Назад | Перейти на главную страницу

Ответные многострочные результаты и цикл

Я регистрируюсь с выходом 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 из каждого результата?

Всякий раз, когда я сталкиваюсь с подобными ситуациями ради анзибля, я останавливаюсь и ищу лучший подход.

Например, есть 'сценарий' модуль. Если вы напишете хороший скрипт, который выводит некоторый json, вы можете затем импортировать вывод этой команды как доступный факт с 'from_json' фильтр. Таким образом, вы будете усердно работать на своем любимом языке и систематизировать факты, чтобы их было легко просмотреть.

Но чтобы попытаться ответить на ваш вопрос ... Я предполагаю, что вы хотите, чтобы все stdout_lines из команды kubectl были объединены в один длинный список. Это должно сделать это:

- 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 }}"