т.е. у меня есть книга воспроизведения, там можно применить некоторые действия для некоторых хостов из списка ansible_play_hosts_all
, и мне нужно выполнить одну задачу только в том случае, если ни один из хостов в списке ansible_play_hosts_all
не определил определенную переменную. Я попытался использовать такой подход:
- name: look-up if there are no junos changes in such deploy
set_fact:
no_junos_changes: >-
{%- set ns = namespace(junos_changes_counter=0) -%}
{%- for router in ansible_play_hosts_all -%}
{%- if hostvars[router]['correct_sections'] is defined -%}
{%- set ns.junos_changes_counter = ns.junos_changes_counter + 1 -%}
{%- endif -%}
{%- endfor -%}
{{ ns.junos_changes_counter }}
delegate_to: localhost
run_once: true
- name: sent final summary to ms teams in case when junos commit skipped
import_tasks: ./tasks/post_commit_summary.yml
when: no_junos_changes|int == 0
delegate_to: localhost
run_once: true
Итак, первая задача предоставит мне число, сколько хостов в списке ansible_play_hosts_all
имеют переменную hostvars[router]correct_sections
. Затем, во втором задании, я просто сравниваю это число с 0.
Оно работает, как и ожидалось, но я не уверен, является ли это наиболее простым и элегантным способом для этой цели. Я имею в виду, в идеале я хотел бы избавиться от первой задачи и использовать одну строчку в выражении «когда» для второй задачи, я просто не уверен, возможно ли это ...