如何在 Vagrantfile 中呈现 YAML 列表



>我有一个Vagrantfile,它引用了一个YAML文件,使多主机配置更容易。

它大部分工作,但我使用的是 Ansible 配置器,我需要引用ansible.groups项的列表/数组。

YAML 如下所示:

hosts:
- host:
provision:
ansible:
enable: yes
playbook_path: webserver.yml
groups:
- web
- vagrant
- live            

我正在尝试使用以下方法在Vagrantfile中引用它:

if host['provision']['ansible']['enable'] == true
vmhost.vm.provision "ansible" do |ansible|
ansible.verbose = "vv"
ansible.config_file = "./ansible.cfg"
ansible.playbook = host['provision']['ansible']['playbook_path']
ansible.tags = host['provision']['ansible']['tags']
ansible.groups = host['provision']['ansible']['groups']
end
end

但是这在构建实际 VM 时给了我此错误:

undefined method `each_pair' for ["web", "vagrant", "dev"]:Array

我搜索了一下,没有找到任何专门针对ansible_groups的内容,尽管我已经看到了在 Vagrantfile 中读取列表/数组的各种模式。有什么想法吗?

Ansible 组不应该是一个数组,而是一个哈希,将组映射到服务器名称。它应如下所示:

hosts:
- host:
provision:
ansible:
enable: yes
playbook_path: webserver.yml
groups:
web:
- machine1
- machine2
vagrant:
- machine3
- machine4
live:
- machine5

有关如何使用它的更多详细信息,请参阅文档。

最新更新