仅为属于某个组的主机运行任务

时间:2021-06-08 21:06:48

标签: ansible

我正在尝试根据库存文件中的组跳过剧本中的任务。

库存:

[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 的组中的服务器之外,我希望在所有服务器上运行上述任务。

1 个答案:

答案 0 :(得分:1)

您可以在一个环境中拥有所有主机,但我建议对 devstagingqaprod 使用不同的环境文件。如果您按条件将其分开,它可能会发生得非常快,您可能会弄乱某些条件或忘记将其完全添加到新任务中,并意外地在 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'

在这种情况下,如果你改变事情,你需要非常小心,所以你的条件仍然是它们应该的样子。

相关问题