Здесь происходит две вещи. Во-первых, вы создали YAML, который принимается синтаксическим анализатором, но ведет себя несколько неожиданно (и выдает предупреждение в текущей версии Ansible).
- имя: создать объект json для использования в качестве тега
set_fact:
tag_var: '{ "тест": "этот тест" }'
set_fact:
tag_var_json: "{{ tag_var | to_json }}"
Ключи в YAML уникальны; когда синтаксический анализатор встречает второй экземпляр того же ключа, он отбрасывает первый. Поскольку вы повторили set_fact
, это эквивалентно:
- имя: создать объект json для использования в качестве тега
set_fact:
tag_var_json: "{{ tag_var | to_json }}"
Однако исправление синтаксической ошибки все равно приведет к сбою.
- имя: создать объект json для использования в качестве тега
set_fact:
tag_var: '{ "тест": "этот тест" }'
tag_var_json: "{{ tag_var | to_json }}"
Аргументы set_fact
должны быть шаблонизированы до запуска задачи, после чего tag_var все еще не определен (поскольку эта задача определяет его.)
Один правильный способ написать эту задачу как две отдельные задачи:
- имя: создать объект тега
set_fact:
tag_var:
тест: этотест
- имя: создать строку JSON для тегов
set_fact:
tag_var_json: "{{ tag_var | to_json }}"
Однако, set_fact
вообще не требуется. Вы можете просто установить переменную непосредственно для задачи, в которой вы ее используете, что более эффективно и делает ее более узкой.
- name: Обновить теги экземпляра
команда: обновление экземпляра вычислений oci -c {{ partition }} --freeform-tags "{{ tag_var | to_json }}"
вары:
tag_var:
тест: этотест