Я использую ansible для разбора шаблона jinja2. Шаблон jinja2 содержит фрагмент кода, который должен перебирать переменную, представляющую собой список слов. Однако он обрабатывает список dict как строку и печатает отдельные символы. Обратите внимание, что переменная set_fact в заданной книге воспроизведения.
Код для цикла в списке диктов в шаблоне j2:
{% for subscriber in subscribers %}
{% for dict_item in subscriber['filter_policy'] %}
{{dict_item.name}}
{% endfor %}
{% endfor %}
Переменная как вывод в модуле отладки ansible:
subscribers": [
{
"filter_policy": "[ { \"name\": \"Severity\", \"type\": \"CommaDelimitedList\", \"value\": \"critical\" }, { \"name\": \"Environment\", \"type\": \"CommaDelimitedList\", \"value\": \"nonprod\" }]",
"id": "blah@blah.com"
}
]
Ansible дает мне ошибку, говоря:
"msg": "AnsibleUndefinedVariable: 'объект str' не имеет атрибута 'name'"
Однако, если я использую set в шаблоне jinja2, чтобы присвоить переменную одно и то же значение, и использую для нее цикл, он работает нормально.
{% set policies = [{"name": "Severity","type": "CommaDelimitedList","value": "critical"},{"name": "Environment","type": "CommaDelimitedList","value": "nonprod"}] %}
Понятия не имею, как ее решить.
ansible 2.7.2
python version = 3.7.3 (default, Mar 27 2019, 09:23:39) [Clang 10.0.0 (clang-1000.11.45.5)]