Ansible:过滤合并的Yaml文件

时间:2018-10-16 13:15:51

标签: loops dictionary ansible yaml

我当前的设置如下:

ansible.cfg

[defaults]
retry_files_enabled = false
hash_behaviour = merge

主机

[sample]
sampleserver

group_vars

group_vars / 1.yml的内容:

tenants:
  1:
    name: name1
    ip: ip1

group_vars / 2.yml的内容:

tenants:
  2:
    name: name2
    ip: ip2

group_vars / 3.yml的内容:

tenants:
  3:
    name: name3
    ip: ip3

playbook.yml

- hosts: sample

  tasks:
    - set_fact:
        mytenants: "{{ {customtenants: tenants[customtenants]} }}"
      when: customtenants is defined

    - name: Output tenantname
      debug:
        msg: "mytenant: {{ mytenant }} name: {{ mytenant.name }}"
      with_dict: "{{ mytenants|default(tenants) }}"
      loop_control:
        loop_var: mytenant

命令

为所有租户运行(工作正常)

ansible-playbook playbook.yml -i inventory/hosts

仅对一名已定义的租户运行(正常)

ansible-playbook tenants.yml -i inventory/hosts -e "customtenants=1"

为多个定义的租户运行

ansible-playbook playbook.yml -i inventory/hosts -e '{"customtenants": ["1", "3"]}'

谁能帮助我,以便它适用于多个租户(最后一个命令示例)?

还是有更好的方法来实现这种动态解决方案?

1 个答案:

答案 0 :(得分:0)

我过去所做的事情是将该变量放在主机行中,例如:

- hosts: "{{ customtenants | default( 'all' ) }}"

然后,您可以删除whenwith_dict行。