我的主机文件如下所示,其中我正在使用特定的主机变量smca_role
。
[smca]
smca1 ansible_host=10.66.69.194 smca_role=True
smca2 ansible_host=10.66.69.193 smca_role=False
我的剧本如下所示。我将任务委派给上述smca
组,该任务将在我不需要的两个主机上运行。
---
- hosts:smsm
tasks:
- name: Check the flag for smca role
shell: *****Some Command*****
register: enable_result
delegate_to: '{{ item }}'
with_items: '{{ groups.smca }}'
我的问题:我只想在符合条件smca_role=True
的一台主机上运行它。如何使用Jinja2模板并将if / when条件放在with_items: {{ groups.smca }}
中,使其仅在所需的主机上运行?
注释:
当条件在我的情况下不起作用时使用平原,因为剧本在另一个主机组smsm
上运行,我在该主机组上收集/设置事实,并在将其委派给其他人时使用这些事实smca
主机组。
{{ groups.smca[0] }}
在我的情况下不起作用,因为不能保证总是第一个主机具有该条件为true,它可以继续更改,并且smca
组可以有两个以上主机
答案 0 :(得分:1)
1)在我的情况下无法使用条件时使用普通格式
如果使用以下条件,它将起作用:
when: "{{ hostvars[item]['smca_role'] }}"