Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vagrant 流浪汉中的故障切换供应器?_Vagrant_Ansible - Fatal编程技术网

Vagrant 流浪汉中的故障切换供应器?

Vagrant 流浪汉中的故障切换供应器?,vagrant,ansible,Vagrant,Ansible,是否可以根据前一个供应器的成功或失败运行一个流浪供应器 我有一个流浪汉虚拟机提供了我想分发给其他人的Ansible。问题是,其中一些人正在运行Windows,而Ansible不支持Windows。我可以解决这个问题,但我想抓住失败的供应器,做些别的事情 确切地说,我只想在Ansible Provisionier失败时运行shell Provisionier。Vagrantfile只是Ruby,所以看起来这应该是可能的,不管怎样 Vagrant.configure(Vagrant文件API版本)d

是否可以根据前一个供应器的成功或失败运行一个流浪供应器

我有一个流浪汉虚拟机提供了我想分发给其他人的Ansible。问题是,其中一些人正在运行Windows,而Ansible不支持Windows。我可以解决这个问题,但我想抓住失败的供应器,做些别的事情

确切地说,我只想在Ansible Provisionier失败时运行shell Provisionier。Vagrantfile只是Ruby,所以看起来这应该是可能的,不管怎样

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
?是的,这更简单一点!