在Ansible中,如何迭代键/值对列表?

时间:2017-10-30 20:52:09

标签: ansible ansible-2.x

假设我有一个

的默认/ main.yml文件
---
my_vars:
- var1: value1
- var2: value2

如何编写我的任务来输出我的变量?

- debug: msg="The value of {{item.key}} is {{ item.value }}"
  with_items:
  - "What to put here???"

1 个答案:

答案 0 :(得分:-1)

您似乎在询问X,但在您的示例中说明了Y.我的意思是可以迭代的键/值对列表如下所示:

my_vars:
- var1: value1
  var2: value2

或者甚至喜欢这样:

my_vars:
  var1: value1
  var2: value2

要处理你的词典列表,这里有一个例子。我添加了一个变量来显示字典是如何聚集的。

---
- hosts: localhost
  connection: local
  vars:
    my_var:
    - var1: value1
      varX: valueY
    - var2: value2
  tasks:
  - debug: var=item
    with_items: "{{my_var}}"
  - debug: var=item.var1
    when: "'var1' in item"
    with_items: "{{my_var}}"

输出:

TASK [debug] ***********************************************************************************************************
ok: [localhost] => (item={'varX': 'valueY', 'var1': 'value1'}) => {
    "item": {
        "var1": "value1",
        "varX": "valueY"
    }
}
ok: [localhost] => (item={'var2': 'value2'}) => {
    "item": {
        "var2": "value2"
    }
}

TASK [debug] ***********************************************************************************************************
ok: [localhost] => (item={'varX': 'valueY', 'var1': 'value1'}) => {
    "item": {
        "var1": "value1",
        "varX": "valueY"
    },
    "item.var1": "value1"
}
skipping: [localhost] => (item={'var2': 'value2'})

同样,您可以在同一次迭代中看到' clumping',var1和varX show。 Ansible并没有很好地处理深度嵌套问题。 Ansible可以处理dicts列表的情况是指他们指的是类似的东西:

my_vars:
- name: bob
  legs: 4
  type: cow
- name: alice
  legs: 2
  type: bird

然后,您可以通过两种方式迭代它 - 使用with_items或with_subelements。

如果你真正拥有列表中的hetrogenous键并希望一次迭代一次,你将不得不使用嵌套包含(yuck)。您还可以构建过滤器。我从来没有做过前者,只做过一次。