如何在 ansible 模板中获取嵌套变量?



如何获取嵌套如下的变量:

mongoservers:
- mongo_master: dev_01
label: mongomaster dev01
urls:
- mongomaster01.dev.local.net
- mongomaster02.dev.local.net
- mongo_master: dev_02
label: mongomaster dev02
urls:
- mongomaster.dev03.local.net
- mongomaster.dev04.local.net

我想从上面的 yaml 访问变量中的网址,我的条件是如果mongoservers.mongo_masterdev01我想抓取属于它的所有网址。

您可以使用json_query来过滤和查询哈希列表。阅读jmespath文档以了解查询语言

在以下示例剧本中,我使用以下查询:

[?mongo_master=='dev_01'].urls[]

这可以解释为

对于传入列表中mongo_master元素等于dev_01的每个元素,选择其中的urls元素,最后展平列表

以下是完整的示例剧本:

---
- name: Filter list
hosts: localhost
gather_facts: false
vars:
mongoservers:
- mongo_master: dev_01
label: mongomaster dev01
urls:
- mongomaster01.dev.local.net
- mongomaster02.dev.local.net
- mongo_master: dev_02
label: mongomaster dev02
urls:
- mongomaster.dev03.local.net
- mongomaster.dev04.local.net
tasks:
- name: filter
vars:
query: >-
[?mongo_master=='dev_01'].urls[]
debug:
msg: "{{ mongoservers | json_query(query) | list }}"

这给了:

PLAY [Filter list] ********************************************************************************************************************************************************************************************************
TASK [filter] *************************************************************************************************************************************************************************************************************
Wednesday 25 September 2019  17:57:39 +0200 (0:00:00.039)       0:00:00.039 *** 
ok: [localhost] => {
"msg": [
"mongomaster01.dev.local.net",
"mongomaster02.dev.local.net"
]
}
PLAY RECAP ****************************************************************************************************************************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

相关内容

  • 没有找到相关文章

最新更新