2015-10-29 54 views
3

我知道Ansible在Windows上運行時遇到問題。這就是爲什麼,我想避免將它用於我的主機。我想配置一個在VirtualBox中運行的本地linux虛擬機。配置Vagrant Linux VM與另一個運行Ansible的Vagrant Linux VM

我想知道是否有人可以告訴我,如果可能的話,使用vagrant在同一個盒子上調出兩個獨立的虛擬機。然後在其中一臺虛擬機上安裝Ansible,然後使用SSH登錄到該虛擬機。從那裏,使用帶有Ansible的Linux VM作爲主機,配置另一臺通過Windows主機創建的Linux VM。所以,這不是虛擬機內部的虛擬機。這只是兩個使用vagrant在windows上運行的虛擬機,然後通過SSH連接到其中一個虛擬機以使用Ansible來配置其他虛擬機。

步驟:

  1. 流浪VM 1和安裝Ansible
  2. Vangrant VM 2
  3. SSH到VM 1
  4. 使用Ansible到規定VM 2使用VM 1.

可以這樣做嗎?對不起,如果這聽起來令人困惑。

+0

的可能的複製[?能否提供流浪漢虛擬機使用別的流浪VM的Ansible安裝(http://stackoverflow.com/questions/33393748/can-vagrant-provision -vm-using-an-ansible-installation-in-another-vagrant-vm) – ydaetskcoR

回答

4

Vagrant 1.8.0現在有new Ansible local provisioner,您可以在您的方案中使用它。

特別是,看文檔的「提示和技巧」部分,有一個確切的解決方案(這對我有效)。

下面是我Vagrantfile對於這種情況,這也解決了潛在的問題與SSH權限和「執行」清單文件(如果你使用Cygwin)(從一個文檔中的略有不同):

Vagrant.configure(2) do |config| 
    config.vm.synced_folder "./", "/vagrant", 
    owner: "vagrant", 
    mount_options: ["dmode=775,fmode=600"] 

    config.vm.define "vm2" do |machine| 
    machine.vm.box = "box-cutter/ubuntu1404-desktop" 
    machine.vm.network "private_network", ip: "172.17.177.21" 
    end 

    config.vm.define 'vm1' do |machine| 
    machine.vm.box = "ubuntu/trusty64" 
    machine.vm.network "private_network", ip: "172.17.177.11"  

    machine.vm.provision :ansible_local do |ansible| 
     ansible.provisioning_path = "/vagrant" 
     ansible.playbook = "provisioning/playbook.yml"  
     ansible.limit = "vm2" 
     ansible.inventory_path = "inventory" 
     ansible.verbose = "vvv" 
     ansible.install = true  
    end 
    end 
end 

和庫存文件:

vm1 ansible_connection=local 
vm2 ansible_ssh_host=172.17.177.21 ansible_ssh_private_key_file=/vagrant/.vagrant/machines/vm2/virtualbox/private_key 
3

爲了配置一個盒子,您不需要使用另一個盒子,在這個窗口場景中,您可以簡單地編寫您的劇本,將它分享給您的客人,並使用shell供應與ansible-playbook匹配。

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| 

$script = <<SCRIPT 
sudo apt-get install -y software-properties-common 
sudo apt-add-repository -y ppa:ansible/ansible 
sudo apt-get update 
sudo apt-get install -y ansible 
ansible-playbook /home/vagrant/provisioning/playbook.yml 
SCRIPT 

config.vm.synced_folder "./provisioning", "/home/vagrant/provisioning" 

config.vm.provision "shell", inline: $script 

end 

第一行會得到你的盒子ansible然後它會針對您已經共享給你的盒子的劇本和運行劇本。

這是一個例子,我曾經用這種方法來配置我的工作遊民箱,希望這個想法能幫助你。

+0

但是,這不是仍然使用Windows作爲主機?我想避免在主機上使用windows,因爲設置cygwin是一件痛苦的事情,並且希望按照預期使用它。 – CodyK

+0

這是作爲主機在窗戶上,但沒有安裝在主機上,它只在你的流浪箱上。流浪者窗口將使用外殼提供者僅在框上運行這些命令。你不需要在主機上獲取cygwin。 – Alberick0

+0

那麼,基本上它是運行本地劇本,通過運行本地主機? – CodyK