2017-05-18 11 views
-1

我希望能夠立即爲一個項目啓動所有的Vagrant虛擬機,然後在最後一個虛擬機上執行Ansible(使用ansible_local)。是否有可能在您之前定義的計算機上運行諸如ansible_local之類的預配置?在Vagrantfile中機器的定義結束後,是否可以在特定的Vagrant機器上執行供應商?

的是我想要做的

例子:

# 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 

回答

0

在Vagrantfile您可以進行以下變化

# 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供應方將只在控制運行VM

其他可能性是

  • 在下列順序運行流浪命令

    $ vagrant up --no-provision // will spin up all the vms but will not provisiong 
    $ vagrant provision control // will provision the control vm 
    
  • 檢查可用於運行特定命令的vagrant trigger plugin,我沒有雖然多機環境中測試

+0

這不是我想要的是。它將在web01虛擬機存在之前運行provisioner,因此它將無法運行Ansible來配置它。我知道我可以對它們進行重新排序,以便控制能夠持續進行,但這不是問題的關鍵。我想知道是否可以在創建所有虛擬機之後調用ansible_local置備程序。 – SPoage

相關問題