是否有可能在特定的流浪机器上执行供应器,在该机器之后';Vagrant文件中的定义是否已结束?

是否有可能在特定的流浪机器上执行供应器,在该机器之后';Vagrant文件中的定义是否已结束?,vagrant,ansible,virtualbox,Vagrant,Ansible,Virtualbox,我希望能够为一个项目一次启动我所有的漫游虚拟机,然后在最后,在其中一个虚拟机上执行Ansible(使用Ansible_local)。是否可以在您之前定义的机器上运行诸如ansible_local之类的供应器 我想做的示例: # VM definitions config.vm.define "control" do |control| control.vm.hostname = "control.somedomain.local" control.

我希望能够为一个项目一次启动我所有的漫游虚拟机,然后在最后,在其中一个虚拟机上执行Ansible(使用Ansible_local)。是否可以在您之前定义的机器上运行诸如ansible_local之类的供应器

我想做的示例:

    # VM definitions
    config.vm.define "control" do |control|
        control.vm.hostname = "control.somedomain.local"
        control.vm.network "private_network", ip: "172.28.128.3"
        control.vm.provider "virtualbox" do |control_vbox|
            control_vbox.name = "Ansible Controller"
            control_vbox.cpus = 2
            control_vbox.memory = 1024
        end
    end
    config.vm.define "web01" do |web|
        control.vm.hostname = "web01.somedomain.local"
        control.vm.network "private_network", ip: "172.28.128.4"
        control.vm.provider "virtualbox" do |web_vbox|
            web_vbox.name = "Web Server 1"
            web_vbox.cpus = 2
            web_vbox.memory = 1024
        end
    end

    # run ansible_local provisioner from the control VM
    config.vm.provision "ansible_local" do |ansible|
        ansible.run_on_vm = "control"
        ansible.playbook = "some_playbook.yml"
    end

您可以在文件中进行以下更改

# VM definitions
config.vm.define "control" do |control|
    control.vm.hostname = "control.somedomain.local"
    control.vm.network "private_network", ip: "172.28.128.3"
    control.vm.provider "virtualbox" do |control_vbox|
        control_vbox.name = "Ansible Controller"
        control_vbox.cpus = 2
        control_vbox.memory = 1024
    end

    # run ansible_local provisioner from the control VM
    control.vm.provision "ansible_local" do |ansible|
        ansible.run_on_vm = "control"
        ansible.playbook = "some_playbook.yml"
    end
end
config.vm.define "web01" do |web|
    control.vm.hostname = "web01.somedomain.local"
    control.vm.network "private_network", ip: "172.28.128.4"
    control.vm.provider "virtualbox" do |web_vbox|
        web_vbox.name = "Web Server 1"
        web_vbox.cpus = 2
        web_vbox.memory = 1024
    end
end
这样ansible provisioner将仅在控制VM上运行

其他的可能性是

  • 按以下顺序运行vagrant命令

    $ vagrant up --no-provision // will spin up all the vms but will not provisiong
    $ vagrant provision control // will provision the control vm
    
  • 检查可以用来运行特定命令的,我还没有在多机环境下测试过


这不是我想要的。它将在web01 VM存在之前运行provisioner,因此无法运行Ansible对其进行配置。我知道我可以对它们重新排序,以便控制权排在最后,但这不是问题的关键。我想知道我是否可以在创建完所有VM后调用ansible_local provisioner。