使用Vagrant为Linux虚拟机提供另一个运行Ansible的Linux虚拟机

3
我知道Ansible在Windows上运行存在问题。这就是为什么我不想在我的主机上使用它。我想提供一个在VirtualBox中运行的本地Linux虚拟机。
我想知道是否有人能告诉我,在同一台计算机上使用vagrant启动两个独立的虚拟机是否可行。然后在其中一个VM上安装Ansible,再通过SSH登录到该VM。从那里,使用带有Ansible的Linux VM作为主机,来提供另一个Linux VM,该VM是通过Windows主机机器创建的。所以,这不是一个VM内部的VM。只是在Windows上使用vagrant运行两个VM,然后SSH到其中一个VM,使用Ansible来提供另一个VM。
步骤:
  1. 使用Vagrant VM 1并安装Ansible
  2. Vangrant VM 2
  3. SSH到VM 1
  4. 使用VM 1上的Ansible来提供VM 2。
这样做可以吗?如果听起来很困惑,请原谅。

2个回答

4

现在在Vagrant 1.8.0中有一个新的Ansible本地提供程序,您可以在您的场景中使用它。

特别是,请查看文档中的“技巧和提示”部分,其中有一个确切的解决方案(对我有效)。

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

为了配置一台机器,你不一定需要使用另一台机器来操作,在windows情境下,你可以编写playbooks并将其共享到你的虚拟机上,然后使用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到你的电脑上,然后针对你分享给电脑的playbook并运行它。

这是一个例子,我曾使用这种方法为我的vagrant工作箱提供服务,希望这个想法能帮助到你。


但是这个还是使用Windows作为主机吗?我想避免使用Windows作为ansible的主机,因为安装cygwin很麻烦,我希望按照预期使用它。 - CodyK
所以,基本上它正在运行一个本地的playbook,通过对localhost运行ansible来实现? - CodyK
太棒了,这非常完美。 - CodyK
@Codemiester :),如果您认为这是一个很好的答案,我会非常感激您将其标记为已接受的答案 :) - Jean Guzman
我使用了Łukasz的答案,因为我发现本地ansible provisioner非常有帮助。 - CodyK
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接