Ну, это была совершенно захватывающая кроличья нора.
Потому что в ansible шаблоны jinja2 визуализируются рекурсивно , когда он пытается чтобы обработать сообщение с ошибкой, которое содержит шаблон с ошибкой, он пытается повторно обработать шаблон с ошибкой снова , повторно вызывая ошибку
Это, кажется, влияет на вас включением переменная ansible_failed_task
, поскольку - необъяснимо - кажется, что безопасно включать ansible_failed_result
в тело
Как я могу лучше сказать, экспериментируя с ansible 2.9. 6, нужно определить, можно ли безопасно вывести переменную аромата a*_task
перед тем, как дотронуться до нее, потому что я не смог найти ни одной комбинации | string
или |regex_replace
или всего, что позволяло бы jinja2 прикоснуться к этой переменной, если она содержит фиктивную ссылку на переменную:
- block:
- debug:
msg: this explodes {{ nope_not_a_var }}
rescue:
- set_fact:
is_undefined_error: '{{ "undefined variable" in ansible_failed_result.msg }}'
- name: variable is unsafe version
debug:
msg: >-
failed task action has an undefined variable in the task,
so we cannot show you the task, but here is the result: {{ ansible_failed_result }}
when: is_undefined_error
- name: variable is safe to output version
debug:
msg: Reboot FAILED at TASK - {{ ansible_failed_task.name }} with ERROR {{ ansible_failed_result }}
when: not is_undefined_error
Может быть безопасным встроить этот тест "..." in ansible_failed_result.msg
в строки when:
напрямую, но так как ( должен ) проду Поскольку оба раза один и тот же ответ, нет действительно веской причины оценивать его дважды
Мне кажется, что это ошибка ansible, но у меня нет эмоциональной энергии, чтобы ее устранить. с их сообществом - однако, я призываю вас сообщить об ошибке с ними