将Vagrant Linux VM与运行Ansible的另一个Vagrant Linux VM配合使用

我知道Ansible有在Windows上运行的问题。 这就是为什么,我想避免使用它为我的主机。 我想configuration一个在VirtualBox中运行的本地linux虚拟机。

我想知道是否有人可以告诉我,如果有可能的话,用vagrant在同一个盒子里调出两个独立的虚拟机。 然后在其中一台虚拟机上安装Ansible,然后使用SSHlogin到该虚拟机。 从那里,用Ansible的Linux VM作为主机,configuration另一个通过Windows主机创build的Linux VM。 所以,这不是虚拟机内部的虚拟机。 这只是两个使用vagrant在Windows上运行的虚拟机,然后通过SSH连接到其中一个虚拟机以使用Ansible来configuration其他虚拟机。

脚步:

  1. Vagrant VM 1并安装Ansible
  2. Vangrant VM 2
  3. SSH到VM 1
  4. 使用Ansible使用VM 1调配VM 2。

可以这样做吗? 对不起,如果这听起来令人困惑。

Solutions Collecting From Web of "将Vagrant Linux VM与运行Ansible的另一个Vagrant Linux VM配合使用"

现在在Vagrant 1.8.0中有一个新的Ansible本地配置程序 ,您可以在您的方案中使用它。

特别是,看文档的“提示和技巧”部分,有一个确切的解决方案(这对我来说)。

下面是这个场景的流浪文件(与文档中的略有不同),它也解决了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 

为了配置一个盒子,你不需要使用另外一个盒子,在这个窗口场景中,你可以简单地编写你的剧本,将它分享给你的客人,并用ansible-playbook使用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 

第一行会在你的盒子上变得有帮助,然后它将把你已经分享到你的盒子的剧本作为目标,并运行剧本。

这是一个例子,我曾经用这个方法来配置我的工作流浪者箱子,希望这个想法可以帮助你。