Vagrant 流浪汉中的故障切换供应器?
是否可以根据前一个供应器的成功或失败运行一个流浪供应器 我有一个流浪汉虚拟机提供了我想分发给其他人的Ansible。问题是,其中一些人正在运行Windows,而Ansible不支持Windows。我可以解决这个问题,但我想抓住失败的供应器,做些别的事情 确切地说,我只想在Ansible Provisionier失败时运行shell Provisionier。Vagrantfile只是Ruby,所以看起来这应该是可能的,不管怎样Vagrant 流浪汉中的故障切换供应器?,vagrant,ansible,Vagrant,Ansible,是否可以根据前一个供应器的成功或失败运行一个流浪供应器 我有一个流浪汉虚拟机提供了我想分发给其他人的Ansible。问题是,其中一些人正在运行Windows,而Ansible不支持Windows。我可以解决这个问题,但我想抓住失败的供应器,做些别的事情 确切地说,我只想在Ansible Provisionier失败时运行shell Provisionier。Vagrantfile只是Ruby,所以看起来这应该是可能的,不管怎样 Vagrant.configure(Vagrant文件API版本)d
Vagrant.configure(Vagrant文件API版本)do | config|
#这在Windows上失败
config.vm.provision“ansible”do | ansible|
ansible.playbook=“vagrant/ansible/main.yml”
结束
#仅当Ansible provisioner失败时才运行此provisioner:
config.vm.provision“shell”,路径:“failover.sh”
Vagrant在Windows上尝试运行Ansible provisioner时返回此错误:
[default] Running provisioner: ansible...
The executable 'ansible-playbook' Vagrant is trying to run was not found
in the %PATH% variable. This is an error. Please verify this software is
installed and on the path.
我不认为有一种方法可以让故障转移供应器。。。流浪汉似乎只是在犯错时停下来,没有办法继续 正如您所说的,
Vagrantfile
只是Ruby,因此更好的选择可能是在尝试运行provisioner之前先检测机器上是否安装了ansible
将中的which函数与以下功能结合使用,应允许您执行想要执行的操作:
if which('ansible-playbook')
# This fails on Windows
config.vm.provision "ansible" do |ansible|
ansible.playbook = "vagrant/ansible/main.yml"
end
else
# Run this provisioner IF AND ONLY IF the Ansible provisioner has failed:
config.vm.provision "shell", path: "failover.sh"
end
我不认为有一种方法可以让故障转移供应器。。。流浪汉似乎只是在犯错时停下来,没有办法继续 正如您所说的,
Vagrantfile
只是Ruby,因此更好的选择可能是在尝试运行provisioner之前先检测机器上是否安装了ansible
将中的which函数与以下功能结合使用,应允许您执行想要执行的操作:
if which('ansible-playbook')
# This fails on Windows
config.vm.provision "ansible" do |ansible|
ansible.playbook = "vagrant/ansible/main.yml"
end
else
# Run this provisioner IF AND ONLY IF the Ansible provisioner has failed:
config.vm.provision "shell", path: "failover.sh"
end
检查平台,而不是检查单个命令:
if Vagrant::Util::Platform.windows?
config.vm.provision "shell", path: "failover.sh"
else
config.vm.provision "ansible" do |ansible|
ansible.playbook = "vagrant/ansible/main.yml"
end
检查平台,而不是检查单个命令:
if Vagrant::Util::Platform.windows?
config.vm.provision "shell", path: "failover.sh"
else
config.vm.provision "ansible" do |ansible|
ansible.playbook = "vagrant/ansible/main.yml"
end
对于windows主机,在来宾操作系统中运行ansible playbook failover.sh
sudo apt-get install ansible -y
ansible-playbook ansible/playbooks/vagrant-playbook.yml -i ansible/conf/hosts_local -c local
(将您的ansible目录装入vagrantbox并提供一个)
本地主机
[default]
127.0.0.1
对于windows主机,在来宾操作系统中运行ansible playbook failover.sh
sudo apt-get install ansible -y
ansible-playbook ansible/playbooks/vagrant-playbook.yml -i ansible/conf/hosts_local -c local
(将您的ansible目录装入vagrantbox并提供一个)
本地主机
[default]
127.0.0.1
很好的一点,尽管在这种情况下,尝试将ansible playbook运行到变量中可能更容易,类似这样:
do_ansible=`ansible playbook--version`rescue nil
?是的,这更简单一点!很好的一点,尽管在这种情况下,尝试将ansible playbook运行到变量中可能更容易,类似这样:do_ansible=`ansible playbook--version`rescue nil
?是的,这更简单一点!