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
> <https://groups.google.com/d/msgid/vagrant-up/24d7ebd6-6b23-4474-b184-65e795e4f948%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>


-- 
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.

Reply via email to