#ansible
Есть структура вида в котором хранятся объекты со своими какими-то свойствами, которые
прописаны в файле определения переменных:
vars:
objects:
- name: objectA:
sectionB:
property1: "value1"
property2: "value2"
property3: "value3"
Хотел бы динамически во время исполнения моего playbook исполнять task, который добавлял
бы в данный(ые) объект(ы) дополнительное динамически вычисляемое свойство.
Нашел много примеров, которые динамически добавляют элементы (items) в словарь (dictionary),
но вот подобного найти не получается.
Требуется сделать нечто подобное (один из вариантов, которые я пробовал использовать):
- set_fact:
item.sectionB: "{{item.sectionB | combine(property_string) }}"
with_items:
- "{{ objects }}"
vars:
property_string: '{ property4: "value4" }'
Чтобы получить в итоге:
vars:
objects:
- name: objectA:
sectionB:
property1: value1
property2: value2
property3: value3
property4: value4
Пробовал использовать функцию combine(), она в таком виде отрабатывает без ошибок,
но структуру не изменяет, а функция union() завершается ошибкой.
Ответы
Ответ 1
Вот здесь описан принцип решения: https://ansibledaily.com/process-complex-variables-with-set_fact-and-with_items/ Изменить изначальную переменную нельзя, но можно при помощи set_fact сделать факт с таким же именем, который в большинстве случаев будет меть приоритет к изначальной переменной. Первым шагом формируете новый список объектов с добавлением к элементам нужных атрибутов через combine. Примерно: - set_fact: tmp_object: "{{ item | combine(<объет_с_дополнениям>) }}" with_items: "{{ objects }}" register: tmp_objects И потом из tmp_objects достаем то, что нам на самом деле нужно: - set_fact: objects: {{ tmp_objects.results | map(attribute='ansible_facts.tmp_object') | list }}"
Комментариев нет:
Отправить комментарий