使用jinja从复杂的dict结构返回值列表

时间:2017-03-05 23:46:15

标签: python ansible jinja2

我想要做的是从以下字典中获取一个网址列表,即[url1, url2, url3, url4, url5, url6, url7],以便我可以将其分配给我的Ansible剧本中的变量:

dict:
  site1:
    domains:
      - canonical: url1
        redirects:
          - url2
          - url3
  site2:
    domains:
      - canonical: url4
        redirects:
          - url5
          - url6
          - url7

我一直在玩各种过滤器,但到目前为止还没有成功。希望在jinja比我更好的人可以帮忙。感谢。

1 个答案:

答案 0 :(得分:2)

json_query可能会有所帮助:

- hosts: localhost
  gather_facts: no
  vars:
    dict:
      site1:
        domains:
          - canonical: url1
            redirects:
              - url2
              - url3
      site2:
        domains:
          - canonical: url4
            redirects:
              - url5
              - url6
              - url7
  tasks:
    # get redirects
    - debug: msg="{{ dict | json_query('*.domains[].redirects[]') }}"
    # get all urls
    - debug: msg="{{ dict | json_query('*.domains[].{c:to_array(canonical),r:redirects} | [].*[][]') }}"