#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 }}"
Комментариев нет:
Отправить комментарий