Chr*_*s F 6 ansible ansible-2.x
假设我有一个 defaults/main.yml 文件
---
my_vars:
- var1: value1
- var2: value2
Run Code Online (Sandbox Code Playgroud)
如何编写任务以输出变量?
- debug: msg="The value of {{item.key}} is {{ item.value }}"
with_items:
- "What to put here???"
Run Code Online (Sandbox Code Playgroud)
您似乎在询问 X,但在示例中陈述了 Y。我的意思是,可以迭代的键/值对列表如下所示:
my_vars:
- var1: value1
var2: value2
Run Code Online (Sandbox Code Playgroud)
或者甚至像这样:
my_vars:
var1: value1
var2: value2
Run Code Online (Sandbox Code Playgroud)
为了处理你的字典列表,这里有一个例子。我添加了一个变量来显示字典是如何“聚集”的。
---
- 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}}"
Run Code Online (Sandbox Code Playgroud)
输出:
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'})
Run Code Online (Sandbox Code Playgroud)
同样,您可以看到“聚集”、var1 和 varX 显示在同一迭代中。Ansible 不能很好地处理深度嵌套。Ansible 可以处理字典列表的一个情况是当它们引用类似的事物时:
my_vars:
- name: bob
legs: 4
type: cow
- name: alice
legs: 2
type: bird
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过两种方式进行迭代 - with_items 或 with_subelements。
如果列表中确实有异构键并且想要一次迭代它们,则必须使用嵌套包含(恶心)。您还可以构建一个过滤器。我从来没有做过前者,后者只做过一次。
| 归档时间: |
|
| 查看次数: |
12615 次 |
| 最近记录: |