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

Ansible stdout из элемента, собранного с помощью цикла

Я пытаюсь распечатать стандартный вывод зарегистрированных элементов в соответствии с документацией документация. Вот мой файл yaml:

- name: network-check
  tags: stats
  shell: "tail -n 3 {{ ansible_facts['nodename'] }}_{{ item }}.out | awk '/Mbits/ { sum += $7; n++} END { print sum / n }'"
  loop: "{{ groups['all'] }}"
  when: ansible_facts['nodename'] != item
  register: check

- name: network-check
  tags: stats
  shell: "echo {{ item.stdout }}"
  loop: "{{ check.results }}"

И я все еще получаю ошибку "атрибут stdout", как показано ниже:

TASK [pretests : network-stat] ***************************************************************************************************************************************************************************************************************************************************************************************************************
fatal: [card-kub000]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'dict object' has no attribute 'stdout'\n\nThe error appears to have been in '/home/holo/cardinality/source/sysop/ansible/roles/pretests/tasks/main.yaml': line 21, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: network-stat\n  ^ here\n"}

Что я делаю не так?

Вот как мои результаты для:

- debug: msg="{{ item.item }}"
  loop: "{{ check.results }}"

выглядит как

ok: [card-kub000] => (item={'changed': True, 'end': '2019-01-31 00:36:50.479743', 'stdout': '128', 'cmd': "tail -n 3 card-kub000_card-kub004.out | awk '/Mbits/ { sum += $7; n++} END { print sum / n }'", 'rc': 0, 'start': '2019-01-31 00:36:50.470371', 'stderr': '', 'delta': '0:00:00.009372', 'invocation': {'module_args': {'creates': None, 'executable': None, '_uses_shell': True, '_raw_params': "tail -n 3 card-kub000_card-kub004.out | awk '/Mbits/ { sum += $7; n++} END { print sum / n }'", 'removes': None, 'argv': None, 'warn': True, 'chdir': None, 'stdin': None}}, '_ansible_parsed': True, 'stdout_lines': ['128'], 'stderr_lines': [], '_ansible_no_log': False, 'failed': False, 'item': 'card-kub004', '_ansible_item_result': True, '_ansible_ignore_errors': None, '_ansible_item_label': 'card-kub004'}) => {
    "msg": "card-kub004"

Я наконец выяснил, где была проблема. У меня есть условие «когда», которое сообщает ansible пропустить некоторые элементы, если оно совпадает с именем узла, потому что этот первый элемент не имеет поля stdout. Я добавил условие, чтобы проверить, не пропущен ли элемент, и он начинает работать.

- name: network-check
  tags: stats
  shell: "echo {{ item.stdout }}"
  loop: "{{ check.results }}"
  when: item.changed != False