【发布时间】:2015-12-24 19:52:44
【问题描述】:
我正在尝试使用 Ansible 作为配置器在 Vagrant 中创建多机环境。
我的 Vagrantfile 如下所示:
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 台机器。它们都必须包含通用软件(Consul 服务器和代理、vim 等)。还有一些额外的 - 每台机器都拥有。但是一旦我运行"vagrant up" 只创建了第一台机器,provisioner 就会运行,因为其他 2 台没有创建而失败。
是否可以在创建所有机器后运行配置程序?或者我的方法不正确,我应该以其他方式执行此操作?
感谢您的宝贵时间。
【问题讨论】:
-
首先,很明显,您的本地主机上是否安装了
ansible?其次,您可以推迟配置,但vagrant up --no-provision和可选的--no-destroy-on-error。最后,您的main.yml需要---是有效的 yaml(尽管它可能不会导致它失败)。 -
Ansible 安装在 localhost 上并作为配置器运行,但它仅针对主机 192.168.77.10 运行 - 其他无法访问。似乎,vagrant 在创建每台机器后运行配置程序,而不是在创建 Vagrantfile 的所有机器之后