Vagrant 流浪多机供应

Vagrant 流浪多机供应,vagrant,ansible,Vagrant,Ansible,我正在尝试使用Ansible作为供应器在Vagrant中创建多机环境 我的文件如下所示: Vagrant.configure("2") do |config| config.vm.provision "ansible" do |ansible| ansible.limit = "all" ansible.playbook = "main.yml" ansible.inventory_path = "staging" ansi

我正在尝试使用Ansible作为供应器在Vagrant中创建多机环境

我的文件如下所示:

   Vagrant.configure("2") do |config|

    config.vm.provision "ansible" do |ansible|
       ansible.limit = "all"
       ansible.playbook = "main.yml"
       ansible.inventory_path = "staging"
       ansible.verbose = "-vvvv"
     end

    config.vm.define "machine1" do |machine1| 
        machine1.vm.box = "ubuntu/trusty64"
        machine1.vm.network "private_network", ip:"192.168.77.10"
        machine1.vm.hostname = "machine1"
        machine1.vm.provider :virtualbox do |vb|
           vb.name = "machine1"
        end
    end    

    config.vm.define "machine2" do |machine2| 
        machine2.vm.box = "ubuntu/trusty64"
        machine2.vm.network "private_network", ip:"192.168.77.11"
        machine2.vm.hostname = "machine2"
        machine2.vm.provider :virtualbox do |vb|
            vb.name = "machine2"
        end
    end    

    config.vm.define "machine3" do |machine3| 
        machine3.vm.box = "ubuntu/trusty64"
        machine3.vm.network "private_network", ip:"192.168.77.12"
        machine3.vm.hostname = "machine3"
        machine3.vm.provider :virtualbox do |vb|
           vb.name = "machine3"
        end
    end      
end
库存:

[AppServers]
192.168.77.10
192.168.77.11
192.168.77.12

[WebServers]
192.168.77.11
192.168.77.12

[WebLoadBalancers]
192.168.77.10

[SlaveDbServers]
192.168.77.10
192.168.77.12

[MasterDbServers]
192.168.77.11

[DbLoadBalancers]
192.168.77.11
main.yml:

- hosts: all
  roles:
  - Common
  - ConsulServer
  - ConsulAgent  

- hosts: WebServers
  roles:
  - WebServer

- hosts: WebLoadBalancers
  roles:
  - LoadBalancer

- hosts: MasterDbServers
  roles:
  - DbServer
我想买3台机器。所有这些都必须包含通用软件(领事服务器和代理、vim等)。每台机器都有一些额外的功能。但一旦我运行了
“vagrant up”
,只有创建的第一台机器provisioner运行失败,因为其他两台机器没有创建。 是否可以在创建所有计算机后运行provisioner?或者我的方法不正确,我应该以其他方式执行此操作?
谢谢您的时间。

我遇到的第一个问题是
错误:无法在中找到角色。
。我假设你有这些角色,为了简单起见排除了它们。我在这里的建议是,当您测试此功能时,使用一个简单的Ansible剧本:

---
-主持人:全部
收集事实:错误
任务:
-命令:hostname-f
其次,当前的问题围绕着静态库存文件的使用以及其中的注意事项。您看到一个错误,因为在第一台机器启动后运行的Ansible provisioner
无法找到所有主机,而其他主机则没有

最后,每台机器都有一个不同的钥匙,您必须通过。因此,在Ansible的帮助下,以下是关于多机并行的Vagrant,以下是我向您推荐的Vagrant文件的样子:

Vagrant.configure(“2”)do | config|
N=3
VAGRANT_VM_PROVIDER=“virtualbox”
ANSIBLE_RAW_SSH_ARGS=[]
(1..N-1).每个do |机器id|

ANSIBLE_RAW_SSH_ARGS首先,显而易见,您的本地主机上是否安装了
ANSIBLE
?第二,您可以推迟设置,但
vagrant up--不设置
,也可以选择
--出错时不销毁
。最后,您的
main.yml
需要
--
才能成为有效的yaml(尽管它可能不会导致失败)。Ansible安装在本地主机上,并作为provisioner运行,但它仅在主机192.168.77.10上运行-其他无法访问。似乎,vagrant在创建每台机器后运行provisioner,而不是在Vagrantfile createdYou中的所有机器都正确后运行provisioner-我已经创建了main.yml文件中看到的所有角色。目前他们什么也不做,只是“呼应‘某个角色的你好’”,因为我刚刚开始学习流浪和安斯布尔。我在你写的流浪汉文件里看到过。所以,我们有两种可能的选择来运行provisioner,在所有机器都不是每台机器创建之后——使用某种循环(通过您的示例中的机器列表或数字范围)或者在没有准备的情况下运行vagrant up,然后单独运行vagrant provision,对吗?实际上有很多方法可以解决这个问题。我不建议您使用——两步模式中没有规定。就我个人而言,我喜欢有一个hosts文件来指定我的组,因为这是我处理我的产品
ansible playbook
用法的方式。但是,如果您不需要或不想要静态清单文件,则可以对主机组使用vagrant内置支持。请参阅,我可以提供一个示例。我在上面的帖子中尝试了您的Vagrantfile with hosts文件,但遇到了新问题:现在Ansible成功连接到最后一台机器(192.168.77.12),但其他2台(192.168.77.10-11)无法访问:
fatal:[192.168.77.11]=>SSH错误:在连接到192.168.77.11:22时,使用-vvvv重新运行命令有时很有用,它会打印SSH调试输出以帮助诊断问题。
看起来需要一些额外的SSH选项。你能告诉我在哪里找吗?@PavloI。那是因为周围的工作不起作用。你有没有可能把你的代码更少的专有数据和角色放到我可以看到的回购协议中?我很乐意帮忙。目前还没有任何合适的东西。非常感谢您抽出时间!以下是回购协议: