I have a specific use case for Vagrant with which I'm struggling a bit.
We need to have on the same Vagrantfile a way to roll a local development VM and/or an AWS instance. For this I thought of using 2 different providers, a virtualbox provider and the vagrant-aws provider plugin.
If I have only these providers set up in the Vagrantfile, it works as expected. However, if I
vagrant up --provider=virtualbox
the provision block I have setup in the Virtualbox provider block runs
twice. I have tried isolating each provider's configuration and provisioning inside if-then blocks that look at the ARGV array, but Vagrant seems to ignore this.
My final goal is to have at a project level, a way that allows my developer colleagues to
vagrant up locally so that they can work on the project, but, at a different time, different host and by a different process, be able to
vagrant up --provider=aws to roll a staging environment for the same project. Please note that I need different provisioning for either the local VM with Virtualbox or the staging instance on AWS. I also
don't want the provisioning of each provider mixed up
or both providers being setup at the same time.
Does anyone have any insight on how to do this? Vagrant's documentation on Hashicorp's website is a bit misleading as I thought I could isolate different procedures in the same Vagrantfile, but I'm not sure if I'm doing it wrong or if it's not possible at all.
My Vagrantfile looks something like this at the moment:
Vagrant.configure(2) do | config |
# doesn't work:
# provider_is_aws = (!ARGV.nil? && ARGV.join('').include?('provider=aws'))
# unless provider_is_aws # doesn't isolate the configuration
config.vm.provider :virtualbox do |v|
# several config.vm options
# ...
config.vm.provision "ansible" do |ansible|
ansible.playbook = "local_playbook.yml"
end
end
# end # unless block
# if provider_is_aws # doesn't isolate the configuration
config.vm.provider :aws do |aws, override|
# several aws. options
# ...
override.vm.provision "Ansible_Local", type: "ansible_local" do |ansible|
ansible.playbook = "aws_playbook.yml"
end
end
# end # if block
end
If I vagrant up --provider=virtualbox the local_playbook.yml provisioner runs twice (!). This makes absolutely no sense to me.