我正在尝试使用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
我想要获得三台机器,它们都必须包含常用软件(Consul服务器和代理、vim等),并且每台机器还需要一些额外的软件。但是,当我运行 "vagrant up" 命令时,只有第一台机器被创建且执行 provisioner 失败,因为另外两台机器没有被创建。 请问是否可以在所有机器创建完成后再执行 provisioner?或者我的方法不正确,应该采用其他方法?感谢您的时间。
ansible
?其次,您可以通过vagrant up --no-provision
命令推迟配置,并可选使用--no-destroy-on-error
。最后,您的main.yml
需要添加---
才能成为有效的 YAML 文件(尽管这可能不会导致失败)。 - Mike D