首页 > 解决方案 > 仅对属于某个组的主机运行任务

问题描述

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

存货:

[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.

标签: ansible

解决方案


您可以将所有主机放在一个环境中,但我建议对 、 和 . 使用不同devstaging环境qa文件prod。如果你按条件分开它,它可能会发生得很快,你搞砸了一些条件或者忘记将它完全添加到一个新任务中,并且不小心在 prod 主机上运行了一个不应该在那里运行的任务。

如果您仍然希望将所有主机放在同一个清单中,您可以使用不同的播放将它们分开(您可以在同一个 playbook 中有多个),然后使用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'

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


推荐阅读