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.

Reply via email to