Ansible:如何在变量中迭代具有变量编号的数组



我有一个数组,来自循环的注册结果.
它有 4 个元素.
我想遍历数组的项目,循环,序列:0-3(3,表示最后一个元素).
当我做"硬编码"时,如下所示,一切都很好,我得到了我想要的结果.
但我不知道如何将序列变量放在结果变量中, 请问有人可以指导我吗?

工作代码:

- name: Show output array
debug:
msg:
- "{{ output.results[0] }}" # This also works
- "{{ output.results.0.stdout }}"
- "{{ output.results.1.stdout }}"
- "{{ output.results.2.stdout }}"
- "{{ output.results.3.stdout }}"
run_once: yes

非工作代码(语法错误)

- name: Show output array
debug:
msg:
- "{{ output.results[my_item] }}" # Not Working
- "{{ output.results.{{ my_item }}.stdout }}" # Not working
- "{{ output.results.(my_item|int) }}" # Tried hard with lot of patterns.. Still KO
run_once: yes
with_sequence: 0-{{ output.results | length -1 }} # This works, tested
loop_control:
loop_var: my_item

任务 [显示输出数组] ****** 致命:[本地主机]:失败!=> {"msg":"模板字符串时出现模板错误:预期的名称或数字。字符串: {{ output.results.{{ my_item }}.stdout }}">

我有一个数组,来自循环的注册结果。

从您的问题来看,您似乎正在output.results[0-n]中获得一个数组.此外,您在debug任务中有 3 条消息。错误是针对第二条消息的:

- "{{ output.results.{{ my_item }}.stdout }}" # Not working

它抱怨在已经开放的金贾语境中不必要的{{ .. }}

简单的方法:

由于output.results已经是一个数组,您可以直接循环它,然后item.stdout

例:

- debug:
msg: "{{ item.stdout }}"
with_items: "{{ output.results }}"

使用序列或range

在示例中使用range作为with_sequence替换为loop。从文档:

with_sequencelooprange功能以及可能的format过滤器所取代。

- debug:
msg: "{{ output.results[my_item].stdout }}"
loop: "{{ range(0, output.results|length) | list }}"
loop_control:
loop_var: my_item

最新更新