我正在尝试根据库存文件中的组跳过剧本中的任务。
库存:
[test]
testserver1
[qa]
qaserver1
[prod]
prodserver1
prodserver2
我很确定我需要将 when
子句添加到我的任务中,但不确定如何引用库存文件。
- name: Add AD group to local admin
ansible.windows.win_group_membership:
name: Administrators
members:
- "{{ local_admin_ad_group }}"
state: present
when: inventory is not prod
基本上,除了名为 prod
的组中的服务器之外,我希望在所有服务器上运行上述任务。
答案 0 :(得分:1)
您可以在一个环境中拥有所有主机,但我建议对 dev
、staging
、qa
和 prod
使用不同的环境文件。如果您按条件将其分开,它可能会发生得非常快,您可能会弄乱某些条件或忘记将其完全添加到新任务中,并意外地在 prod 主机上运行了不应在那里运行的任务。
如果您仍然希望将所有主机放在同一个清单中,您可以使用不同的剧本将它们分开(您可以在同一个剧本中拥有多个),然后使用 hosts
指定它们应该运行的位置。
例如:
- name: play one
hosts:
- qa
- test
tasks:
<all your tasks for qa and test>
- name: play two
hosts: prod
tasks:
<all your tasks for prod>
如果您想在每个任务级别执行此操作,可以使用 group_names
变量。
例如:
- name: Add AD group to local admin
ansible.windows.win_group_membership:
name: Administrators
members:
- "{{ local_admin_ad_group }}"
state: present
when: '"prod" not in group_names'
在这种情况下,如果你改变事情,你需要非常小心,所以你的条件仍然是它们应该的样子。