我有一个变量,如下所示:
device:
- sdb: 2
- sdc: 3
- sdd: 4如何使用ansible循环生成结果:
sdb 1
sdb 2
sdc 1
sdc 2
sdc 3
sdd 1
sdd 2
sdd 3
sdd 4我尝试了with_sequence和loop_control,但不起作用。
发布于 2018-11-21 11:21:33
使用ansible循环和jinja编写了一个调试任务,它应该会给你想要的结果。根据需要进行重构。
- name: Debug device var
debug:
msg: "{% for key, value in item.iteritems() %}{% for i in range(value) %} {{ key }} {{ loop.index }} {% endfor %}{% endfor %}"
loop: "{{ device }}"发布于 2018-11-21 16:49:57
最后,我得到了解决方案,但是我更改了变量的格式。该变量将更改为:
device:
sdb: 2
sdc: 3
sdd: 4结果是:
ok: [ceph-host-2] => (item=1) => {
"msg": "sdd 1"
}
ok: [ceph-host-2] => (item=2) => {
"msg": "sdd 2"
}
ok: [ceph-host-2] => (item=3) => {
"msg": "sdd 3"
}
ok: [ceph-host-2] => (item=4) => {
"msg": "sdd 4"
}
TASK [osd : debug]
ok: [ceph-host-2] => (item=1) => {
"msg": "sdb 1"
}
ok: [ceph-host-2] => (item=2) => {
"msg": "sdb 2"
}
TASK [osd : debug]
ok: [ceph-host-2] => (item=1) => {
"msg": "sdc 1"
}
ok: [ceph-host-2] => (item=2) => {
"msg": "sdc 2"
}
ok: [ceph-host-2] => (item=3) => {
"msg": "sdc 3"
}main.yml
- include_tasks: inner.yml
loop: "{{ device.keys() }}"
loop_control:
loop_var: outer_iteminner.yml
- debug:
msg: "{{ outer_item }} {{ item }}"
with_sequence: count={{ device[outer_item] }}发布于 2018-11-21 19:52:07
该变量为:
device:
- sdb: 2
- sdc: 3
- sdd: 4main.yml
- include_tasks: inner.yml
loop: "{{ device }}"
loop_control:
loop_var: outer_iteminner.yml
- debug:
msg: "{{ outer_item.keys()[0] }} {{ item }}"
with_sequence: count={{ outer_item.values()[0] }}https://stackoverflow.com/questions/53404545
复制相似问题