【问题标题】:Ansible double loopAnsible 双循环
【发布时间】:2018-02-07 15:12:54
【问题描述】:

我在 yml 文件中有一个数据列表。 我想提取数据,使用双循环,就像我们以前做的那样。 这是我的清单的一个例子

[a,b,c] vm1: -a -b vm2: -a -c vm3: -b

这是出于一般部署目的。 我需要循环列表,并为每个元素获取需要安装的 vm 列表。 例如

a > vm1 vm2 

b > vm1 vm3

 c > vm2

我尝试了 with_nested 但没有帮助。 有什么办法解决这个问题吗?

【问题讨论】:

  • 你的剧本是什么样的?您使用with_nested 的尝试是什么样的?它是如何失败的?

标签: ansible ansible-facts ansible-template


【解决方案1】:

这个问题与this one非常相似。

这里是修改后的 JMESPath:

---
- hosts: localhost
  gather_facts: no
  vars:
    mylist: [a,b,c]
    myvms:
      vm1:
        - a
        - b
      vm2:
        - a
        - c
      vm3:
        - b
  tasks:
    - debug:
        msg: "{{ item }} > {{ list_with_keys | json_query(qry) | join(',') }}"
      vars:
        list_with_keys: "{{ myvms | dictsort | to_json | from_json }}"
        qry: "[?contains([1],`{{ item }}`)][0]"
      with_items: "{{ mylist }}"

结果:

ok: [localhost] => (item=a) => {
    "changed": false,
    "item": "a",
    "msg": "a > vm1,vm2"
}
ok: [localhost] => (item=b) => {
    "changed": false,
    "item": "b",
    "msg": "b > vm1,vm3"
}
ok: [localhost] => (item=c) => {
    "changed": false,
    "item": "c",
    "msg": "c > vm2"
}

【讨论】:

  • 谢谢。我怎样才能得到这个表格:a:vm1和a:vm2
  • 不确定你的意思,但你总是可以用 set_fact 替换 debug 并用键 a、b、c 构造一个字典,然后用 with_subelements 对其进行迭代。
  • 我想从 a > vm1 , vm2 转换为单独的行,如 a : vm1 和 a : vm2
猜你喜欢
  • 2015-10-12
  • 2022-06-10
  • 2019-04-06
  • 2021-09-14
  • 1970-01-01
  • 2015-12-10
  • 2017-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多