Ansible 多行结果和循环

Ansible 多行结果和循环

我通过以下方式注册 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 }}"

相关内容