如何在Vagrantfile中呈现YAML列表

问题描述 投票:0回答:1

我有一个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

尽管我在Vagrantfile中看到了各种读取列表/数组的模式,但我搜索并没有找到具体解决ansible_groups的问题。有什么想法吗?

ruby vagrantfile
1个回答
0
投票

Ansible组不应该是数组,而是散列,将组映射到服务器名称。它应该看起来像:

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

有关如何使用它的更多详细信息,请参见the documentation。>

© www.soinside.com 2019 - 2024. All rights reserved.