У меня бродячая работа по созданию новых виртуальных машин.В зависимости от провайдера, который я передаю, он может быть создан локально в Virtualbox или в кластере Vsphere с плагином vagrant-vsphere.
Из-за этого бывают случаи, когда я хочу запускать определенные задачи в Virtualbox и определенные задачи в Vsphere.Я подумал, что самый простой способ сделать это - просто передать переменную из Vagrant в ansible на основе провайдера.Грубо говоря, это то, что у меня есть в моем Vagrantfile.
$ansible_provider = ''
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.define vmconf[:name] do |vagrantconf|
vagrantconf.vm.provider :virtualbox do |vb|
$ansible_provider = "virtualbox"
end
vagrantconf.vm.provider :vsphere do |vb|
$ansible_provider = "vsphere"
end
end
config.vm.provision :ansible do |ansible|
ansible.playbook = "provision.yml"
ansible.extra_vars = { ansible_ssh_user: 'test',
ansible_provider: $ansible_provider }
end
end
Я добавил оператор печати, который показывает, что два extra_vars и ansible_ssh_user
работают правильно, но ansible_provider
просто пусто.Когда я удаляю первую строку и изменяю ее на локальную переменную, я получаю следующую ошибку: Message: undefined local variable or method 'ansible_provider'
Я не так часто использовал ruby, поэтому решил, что я что-то там не так делаю.Любая помощь с этим будет принята с благодарностью.