如何在if / when条件下仅在组中的一台主机上运行委托_任务?

时间:2018-07-05 03:26:19

标签: ansible

我的主机文件如下所示,其中我正在使用特定的主机变量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 }}中,使其仅在所需的主机上运行?

注释:

  1. 当条件在我的情况下不起作用时使用平原,因为剧本在另一个主机组smsm上运行,我在该主机组上收集/设置事实,并在将其委派给其他人时使用这些事实smca主机组。

  2. {{ groups.smca[0] }}在我的情况下不起作用,因为不能保证总是第一个主机具有该条件为true,它可以继续更改,并且smca组可以有两个以上主机

1 个答案:

答案 0 :(得分:1)

  

1)在我的情况下无法使用条件时使用普通格式

如果使用以下条件,它将起作用:

when: "{{ hostvars[item]['smca_role'] }}"