Hi, Brian Thanks, after setting VAGRANT_EXPERIMENTAL=typed_triggers your snippet worked!
вт, 18 лют. 2020 о 19:12 Brian Cain <bc...@hashicorp.com> пише: > > Hey there - > > You will need to make your trigger a command trigger. By default, globally > defined triggers run for each guest. If you wish for them to run once before > or after > a given command, you can make it a command trigger: > > config.trigger.before :up, type: :command do |trigger| > > # configuration here > > end > > > More information can be found in this subsection for vagrant triggers in the > documentation: https://www.vagrantup.com/docs/triggers/usage.html#commands > > Thanks! > > On Mon, Feb 17, 2020 at 4:05 AM Andrii Senkovych <andriysenkov...@gmail.com> > wrote: >> >> Dear community, >> >> I'm looking for a way to run a single trigger for a single command i(i.e. >> "vagrant up") inside a multi-machine environment to play with Ansible. I've >> defined a trigger to download a pubkey that will be used in Dockerfile, i.e. >> when "vagrant up" command "issues a "docker build" command under the hood, >> but instead trigger runs for every defined machine. My shortened Vagrantfile >> looks like this: >> >> Vagrant.configure("2") do |config| >> # Check and download vagrant pubkey to include in the Docker images >> config.trigger.before :up do |trigger| >> trigger.name = "Prepare insecure Vagrant SSH public key" >> trigger.ruby do |env, machine| >> vagrant_pubkey_url = >> "https://raw.githubusercontent.com/hashicorp/vagrant/master/keys/vagrant.pub" >> vagrant_pubkey_name = ".vagrant/vagrant.pub" >> >> if (not File.file?(vagrant_pubkey_name)) >> trigger.info = "Vagrant's insecure SSH public key is not present. >> Downloading..." >> open(vagrant_pubkey_url) do |pubkey| >> File.open(vagrant_pubkey_name, "wb") do |pubkey_file| >> pubkey_file.write(pubkey.read) >> trigger.info = "Download complete. Saved key to >> #{vagrant_pubkey_name}" >> end >> end >> end >> end >> end >> >> kinds = ["app", "db", "www"] >> images = [{distribution: "debian", dockerfile: >> "debian10-systemd.Dockerfile"}] >> >> kinds.each do |server_type| >> (1..images.length).zip(images).each do |index, image| >> node_name = "#{server_type}#{index}-#{image[:distribution]}" >> config.vm.define "#{node_name}" do |node| >> node.vm.network :private_network, type: "dhcp" >> node.vm.provider "docker" do |docker| >> docker.name = node_name >> docker.build_dir = "." >> docker.has_ssh = true >> docker.dockerfile = "dockerfiles/#{image[:dockerfile]}" >> docker.create_args = ["--rm", "--privileged", "-v", >> "/sys/fs/cgroup:/sys/fs/cgroup:ro"] >> end >> end >> end >> end >> end >> >> In this configuration we should get 3 containers named "app1-debian", >> "db1-debian", "www1-debian". >> >> I expected my trigger would run only once since it is defined outside of >> node creation loop. But when I run "vagrant up", trigger is fired 3 times. >> Moreover even though there is some code that checks file existence, it is >> downloaded 3 times as well. Next time I run "vagrant up", the file won't be >> downloaded, as if the code is run once on initial Vagrantfile read. >> >> I'd like to use similar global trigger to run Ansible playbook to check >> network connectivity between all hosts but currently I get it run after each >> container is up and not after all containers are up that leads to run checks >> multiple times with different number of hosts (1, 2 and finally, 3 hosts). >> >> Full configuration is available here: >> https://github.com/jollyroger/test-infra-vagrant-ansible >> >> -- >> This mailing list is governed under the HashiCorp Community Guidelines - >> https://www.hashicorp.com/community-guidelines.html. Behavior in violation >> of those guidelines may result in your removal from this mailing list. >> >> GitHub Issues: https://github.com/mitchellh/vagrant/issues >> IRC: #vagrant on Freenode >> --- >> You received this message because you are subscribed to the Google Groups >> "Vagrant" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to vagrant-up+unsubscr...@googlegroups.com. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/vagrant-up/24d7ebd6-6b23-4474-b184-65e795e4f948%40googlegroups.com. > > > > -- > Brian Cain > > -- > This mailing list is governed under the HashiCorp Community Guidelines - > https://www.hashicorp.com/community-guidelines.html. Behavior in violation of > those guidelines may result in your removal from this mailing list. > > GitHub Issues: https://github.com/mitchellh/vagrant/issues > IRC: #vagrant on Freenode > --- > You received this message because you are subscribed to the Google Groups > "Vagrant" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to vagrant-up+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/vagrant-up/CADHESCVcunZ%3DOPdHgMwmfkZyERrDza06i32WwwPBTtDjEZ5--g%40mail.gmail.com. -- WBR, Andrii Senkovych -- This mailing list is governed under the HashiCorp Community Guidelines - https://www.hashicorp.com/community-guidelines.html. Behavior in violation of those guidelines may result in your removal from this mailing list. GitHub Issues: https://github.com/mitchellh/vagrant/issues IRC: #vagrant on Freenode --- You received this message because you are subscribed to the Google Groups "Vagrant" group. To unsubscribe from this group and stop receiving emails from it, send an email to vagrant-up+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/vagrant-up/CAGApkr0uwEiaqBrDcX73NQTMNVsFMnRZ%2B04MHqfCJHofjzWmDw%40mail.gmail.com.