【问题标题】:Provision Vagrant Linux VM with another Vagrant Linux VM running Ansible使用另一个运行 Ansible 的 Vagrant Linux VM 配置 Vagrant Linux VM
【发布时间】:2015-10-29 13:52:09
【问题描述】:

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

我想知道是否有人可以告诉我是否有可能使用 vagrant 在同一个盒子上调出两个独立的虚拟机。然后在其中一台虚拟机上安装 Ansible,然后使用 SSH 登录该虚拟机。从那里,使用带有 Ansible 的 Linux VM 作为主机,来配置另一个 Linux VM,这是通过 Windows 主机创建的。因此,这不是 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。

可以吗?抱歉,如果这听起来令人困惑。

【问题讨论】:

标签: linux windows vagrant ansible


【解决方案1】:

现在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

【讨论】:

    【解决方案2】:

    为了配置一个盒子,您不需要使用另一个盒子,在这个 Windows 场景中,您可以简单地编写您的剧本,将其分享给您的客人,然后使用 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
    

    第一行将在您的盒子上显示,然后它将针对您共享到盒子的剧本并运行剧本。

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

    【讨论】:

    • 但是这不还是用Windows做主机吗?我想避免使用 windows ansible has the host,因为设置 cygwin 很痛苦,并且想按预期使用它。
    • 这是在windows上作为主机,但ansible没有安装在主机上,它只在你的vagrant box上。 vagrant windows 将使用 shell 配置器仅在盒子上运行这些命令。您不需要为此在主机上安装 cygwin。
    • 所以,基本上它是在运行本地剧本,通过对 localhost 运行 ansible?
    • 没错。它会安装 ansible 并针对您的 localhost 运行 playbook。全部使用 shell 配置完成
    • 太棒了,这太完美了。
    猜你喜欢
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 2015-12-05
    • 2016-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多