我通过以下方式注册 Ansible 网络检查输出:
- name: Test kube networking
shell: kubectl exec -n iperf -it {{ item }} /test.sh
loop: "{{ pods.stdout_lines }}"
register: echo
- debug: msg={{ item.stdout_lines }}
loop: "{{ echo.results }}"
现在如何遍历所有条目?我希望将每个结果中的所有“stdout_lines”作为项目。这样的事情可能吗?或者也许一些“嵌套”循环一次遍历结果,第二次遍历每个结果中的所有 stdout_lines?
答案1
每当我遇到类似这样的情况时,我都会停下来寻找更好的方法。
例如'脚本'模块。如果你写了一个输出一些 json 的脚本,那么你可以将该命令的输出作为 ansible 事实导入‘来自 JSON’过滤器。这样,您就可以用自己喜欢的语言完成艰苦的工作,并将事实完美地排列,以便于循环浏览。
但要尝试回答您的问题,我猜您想将 kubectl 命令中的所有 stdout_lines 合并为一个长列表。这应该可以做到:
- name: Test kube networking
shell: kubectl exec -n iperf -it {{ item }} /test.sh
loop: "{{ pods.stdout_lines }}"
register: echo
- set_fact:
stdout_lines: []
- set_fact:
stdout_lines: "{{ stdout_lines + item.stdout_lines }}"
with_items: "{{ echo.results }}"
- debug:
msg: "This is a stdout line: {{ item }}"
with_items: "{{ stdout_lines }}"