Циклы Ansible,обработка словаря

Собственно говоря имеется следующая таска которая запрашивает docker inspect по контейнерам на управляемых нодах:

  - name: Get infos on container`s
    docker_container_info:
      name: "{{ item }}"
    with_items:
      - adminer
      - alertmanager
      - caddy
      - cadvisor
      - grafana
      - nginx
      - nginx-exporter
      - nodeexporter
      - php-fpm
      - postgres-db
      - postgres-exporter
      - prometheus
      - pushgateway
      - cdr_api
    register: result

На выходе получаем один большой словарь с данными о контейнерах. Проблема (мое не понимание) в следующем - как грамотно пройтись по этому словарю, какой из вариантов циклов ansible использовать, если по сути необходимо только получить значение двух ключей по каждому контейнеру. Сделал во такой вариант который задачу выполняет но выглядит не очень эстетично:

 - name: Container status
    ansible.builtin.debug:
      msg: "{{ item }}"
    with_items:
     - "The container {{ result.results[1]['container']['Name'] }} status is {{ result.results[0]['container']['State']['Status'] }}"
     - "The container {{ result.results[1]['container']['Name'] }} status is {{ result.results[1]['container']['State']['Status'] }}"
     - "The container {{ result.results[2]['container']['Name'] }} status is {{ result.results[2]['container']['State']['Status'] }}"
     - "The container {{ result.results[3]['container']['Name'] }} status is {{ result.results[3]['container']['State']['Status'] }}"
     - "The container {{ result.results[4]['container']['Name'] }} status is {{ result.results[4]['container']['State']['Status'] }}"
     - "The container {{ result.results[5]['container']['Name'] }} status is {{ result.results[5]['container']['State']['Status'] }}"
     - "The container {{ result.results[6]['container']['Name'] }} status is {{ result.results[6]['container']['State']['Status'] }}"
     - "The container {{ result.results[7]['container']['Name'] }} status is {{ result.results[7]['container']['State']['Status'] }}"
     - "The container {{ result.results[8]['container']['Name'] }} status is {{ result.results[8]['container']['State']['Status'] }}"
     - "The container {{ result.results[9]['container']['Name'] }} status is {{ result.results[9]['container']['State']['Status'] }}"
     - "The container {{ result.results[10]['container']['Name'] }} status is {{ result.results[10]['container']['State']['Status'] }}"
     - "The container {{ result.results[11]['container']['Name'] }} status is {{ result.results[11]['container']['State']['Status'] }}"
     - "The container {{ result.results[12]['container']['Name'] }} status is {{ result.results[12]['container']['State']['Status'] }}"
     - "The container {{ result.results[13]['container']['Name'] }} status is {{ result.results[13]['container']['State']['Status'] }}"

Как в данной ситуации обойтись одной строкой? Если менять нужно только значения в квадратных скобках.


Ответы (1 шт):

Автор решения: Hellseher
- name: Container status
    ansible.builtin.debug:
      msg: "The container {{ result.results[index]['container']['Name'] }} status is {{ result.results[index]['container']['State']['Status'] }}"
    with_sequence: start=0 end={{ result.results|length }}
    loop_contol:
      loop_var: "index"

Можно посмотреть в сторону более сложного фильтра json_query

Ссылки

→ Ссылка