我需要修改全局变量或解析条件的所有主机变量。
我希望得到的是
group_vars / all.yaml
commit_success: true
检查主机的配置是否成功应用。如果出现1个或多个失败,则将该主机的commit_success变量更改为false
- name: Compare Each Snapshot
when:
- snap_check.total_failed >= 1
set_fact:
commit_success: false
这不会在发生故障的主机上提交更改,但是即使单个节点发生故障,我也不想将其提交给任何节点。全部或全无。
- name: Confirm Commit
when:
- commit_success
juniper_junos_config:
provider: "{{ credentials }}"
config_mode: "{{ netconf.mode }}"
commit: true
comment: "{{ netconf.comment }}"
commit_empty_changes: false
当4个节点未通过检查时,我的结果是这样。
ok: [d01-bbrj01] => {
"commit_success": true
}
ok: [d03-bbrj03] => {
"commit_success": true
}
ok: [d02-bbrj02] => {
"commit_success": true
}
ok: [d04-bbrj04] => {
"commit_success": true
}
ok: [d05-bprj01] => {
"commit_success": true
}
ok: [d06-bprj02] => {
"commit_success": true
}
ok: [d07-dsrj01] => {
"commit_success": false
}
ok: [d08-dsrj02] => {
"commit_success": false
}
ok: [d09-dsrj03] => {
"commit_success": false
}
ok: [d10-dsrj04] => {
"commit_success": false
}
我还是要修改全局变量,或者在确认提交之前检查所有主机的“ commit_success:true”。
答案 0 :(得分:3)
如果我理解您的正确要求,我认为解决方案很简单。为每个主机分别设置一个commit_success
。我们不需要一个全球性的
- name: Set commit_success
set_fact:
commit_success: "{{ snap_check.total_failed == 0 }}"
请注意,我们在此处删除了when
条件,以便每个主机
将有一个commit_success
事实。
在将要运行juniper_junos_config
任务的主机上,我们通过遍历上一个任务的主机来设置最终变量:
- set_fact:
all_commit_success: "{{ all_commit_success|default(true)|bool and hostvars[item].commit_success }}"
loop: "{{ groups.devices }}"
我们现在可以在juniper_os_config
任务中使用此条件:
- name: Confirm Commit
when:
- all_commit_success
juniper_junos_config:
provider: "{{ credentials }}"
config_mode: "{{ netconf.mode }}"
commit: true
comment: "{{ netconf.comment }}"
commit_empty_changes: false