Ansible 多行结果和循环

use*_*488 2 ansible ansible-playbook

我以这种方式向网络检查的 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 }}"
Run Code Online (Sandbox Code Playgroud)

现在如何通过所有条目?我想将每个结果中的所有“stdout_lines”作为项目。这样的事情可能吗?或者也许一些“嵌套”循环对结果进行一次循环,然后对每个结果的所有 stdout_lines 进行二次循环?

小智 5

每当我遇到这样的情况时,我都会停下来寻找更好的方法。

例如,有一个“脚本”模块。如果您编写了一个输出一些 json 的漂亮脚本,那么您可以使用“from_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 }}"
Run Code Online (Sandbox Code Playgroud)