使用运行Ansible的另一个Vagrant Linux VM配置Vagrant Linux VM

时间:2015-10-29 13:52:09

标签: linux windows vagrant ansible

我知道Ansible在Windows上运行有问题。这就是为什么,我想避免将它用于我的主机。我想配置一个在VirtualBox中运行的本地linux vm。

我想知道是否有人可以告诉我是否可能,使用vagrant在同一个盒子上调出两个独立的VM。然后在其中一个VM上安装Ansible,然后使用SSH登录到该VM。从那里,使用带有Ansible的Linux VM作为主机,配置另一个通过Windows主机创建的Linux VM。因此,这不是VM中的VM。它只是使用vagrant在Windows上运行的两个VM,然后通过SSH连接其中一个VM以使用Ansible来配置另一个VM。

步骤:

  1. Vagrant VM 1并安装Ansible
  2. Vangrant VM 2
  3. SSH到VM 1
  4. 使用Ansible使用VM 1配置VM 2.
  5. 能做到吗?对不起,如果这听起来很混乱。

2 个答案:

答案 0 :(得分:4)

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

特别是,看看"提示与技巧"文档的一部分,有一个确切的解决方案(对我有用)。

下面是我的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

答案 1 :(得分:3)

为了配置一个盒子你没必要使用另一个盒子,在这个Windows场景中你可以简单地编写你的剧本,分享给你的访客并用ansible-playbook使用{{ 1}}配置。

shell

第一行将在你的盒子上获得安全,然后它将定位你已经分享到你的盒子的剧本并运行剧本。

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