在所有元素中创建具有相同值的字典

时间:2020-03-27 08:44:10

标签: ansible

我有这样的字典:

     abc:
        xyz1:
          url: "{{ url }}"
          api_key: "{{ key }}"
        xyz2:
          url: "{{ url }}"
          api_key: "{{ key }}"
        xyz3:
          url: "{{ url }}"
          api_key: "{{ key }}"

我知道所有xyz {number}在url和api_key中都具有相同的值,并且将来还会具有相同的值。

我需要这种嵌套格式,但是用哪种更优雅的方式来编写它(而不是用我做的方式)(这将需要很多元素)?

1 个答案:

答案 0 :(得分:1)

创建模板

shell> cat myvars.yml.j2
abc:
{% for index in range(1, size+1) %}
  xyz{{ index }}:
    url: "{{ '{{'  }} url {{ '}}' }}"
    api_key: "{{ '{{'  }} key {{ '}}' }}"
{% endfor %}

剧本

- hosts: localhost
  vars:
    size: 3
    key: mykey
    url: myurl
  tasks:
    - template:
        src: myvars.yml.j2
        dest: myvars.yml
    - include_vars: myvars.yml
    - debug:
        var: abc

将创建文件myvars.yml

shel> cat myvars.yml
abc:
  xyz1:
    url: "{{ url }}"
    api_key: "{{ key }}"
  xyz2:
    url: "{{ url }}"
    api_key: "{{ key }}"
  xyz3:
    url: "{{ url }}"
    api_key: "{{ key }}"

并且调试将显示包含的变量

    "abc": {
        "xyz1": {
            "api_key": "mykey", 
            "url": "myurl"
        }, 
        "xyz2": {
            "api_key": "mykey", 
            "url": "myurl"
        }, 
        "xyz3": {
            "api_key": "mykey", 
            "url": "myurl"
        }
    }