Ansible как работать со списком объектов

Рейтинг: 1Ответов: 1Опубликовано: 08.08.2023

имеется playbook ansible. Хотелось бы его модифицировать под свои нужды. Проблема заключается в следующем. Я хочу задавать собственные поля в системе на основе данных playbook. Туда я вношу данные следующим образом

- name: dicts
  hosts: all
 
  list_items: 
    - {item1: "aaa", item2: "bbb"}
    - {item1: "ccc", item2: "ddd"}
  
  tasks:
    - name: Start Program
      command: "./my_app.py {{ item.item1 }} {{ item.item2 }}"
      with_items: {{ list_items }}


В таком виде Playbook ругается на задание списка list_items. Ошибка Did not find expected indicator "-". Вроде бы по логике этот дефис там не нужен. Как можно исправить подобный playbook для корректного чтения?

UPD. Также встречается ошибка другого рода:

with_items:
  - {{ foo }}
Should be written as 
with_items:
  - "{{ foo }}"

Такое исправление возвращает меня назад к первой ошибке

Upd: Вопрос к комментарию - сработает ли такая конфигурация?

- name: dicts
  hosts: all

  vars:
    list_items:
      - { item1: aaa, item2: bbb }
      - { item1: ccc, item2: ddd }

  tasks:

    - name: Start Program
      command: "./my_app.py {{ item.item1 }} {{ item.item2 }}"
      with_items: "{{ list_items }}"

Ответы

▲ 1Принят

Ты забыл кавычки в with_items. Надо, чтобы было так: with_items: "{{ list_items }}".

Плюс ты не рассказал Ансиблу, что list_items - это переменная. Нужно записать это в vars:.

Исправленный плейбук выглядит так:

- name: dicts
  hosts: all

  vars:
    list_items:
      - item1: aaa
        item2: bbb
      - item1: ccc
        item2: ddd

  tasks:

    - name: Start Program
      command: "./my_app.py {{ item.item1 }} {{ item.item2 }}"
      with_items: "{{ list_items }}"