【问题标题】:Ansible / jinja2 list of dicts of listsAnsible / jinja2 列表的字典列表
【发布时间】:2017-11-09 14:52:00
【问题描述】:

我正在尝试从列表的 dicts 列表中组成一个列表,但失败了。试图获取 r1 的所有对等方的列表

示例数据 yaml:

---
conn:
- id: asd
  peers:
  - name: r1
  - name: r2
- id: dsa
  peers:
  - name: r1
  - name: r3
- id: sad
  peers:
  - name: r2
  - name: r4

输出应该是[r2,r3],因为 r1 只有 r2 和 r3 作为对等点。如何从 ansible 任务中获取此列表?

【问题讨论】:

    标签: list dictionary ansible yaml jinja2


    【解决方案1】:

    您可能想探索JMESPath

    ---
    - hosts: localhost
      gather_facts: no
      vars:
        conn:
          - id: asd
            peers:
            - name: r1
            - name: r2
          - id: dsa
            peers:
            - name: r1
            - name: r3
          - id: sad
            peers:
            - name: r2
            - name: r4
      tasks:
        - debug:
            msg: "{{ conn | json_query(qry) }}"
          vars:
            qry: '[*].{p:peers[].name} | [?contains(p,`r1`)].p[] | [?@!=`r1`]'
    

    选择peers[].name 作为p,仅选择将r1 作为p 的元素的项目,然后展平列表并删除任何r1 项目,从而有效地只留下r1 个同行。

    【讨论】:

    • 令人印象深刻,确实令人印象深刻。它要求 jmespath 不是 ansible 的原生。它仍然是一个简洁的工作解决方案。谢谢。我会一直使用它,直到有人想出另一个只需要核心 ansible 模块的东西。
    猜你喜欢
    • 1970-01-01
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-06
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    相关资源
    最近更新 更多