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
.
解决方案
您可以将所有主机放在一个环境中,但我建议对 、 和 . 使用不同dev
的staging
环境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'
在那种情况下,如果你改变事情,你需要非常小心,所以你的条件仍然是他们应该的样子。
推荐阅读
- javascript - 在 Vue.js 中等待 Ajax 响应数据
- android - 恢复输入的编辑文本值
- javascript - ExtJs 6 日历周和日事件
- c# - C# NewtonSoft JsonConvert serializexmlnode 到嵌套数组?
- android - 检查 Google Fit 是否已连接
- html - Angular 6 JSON 管道
- sql-server - Sql 事务网络性能
- macos - 将 NSOpenPanel 选项传递给 NSDocument
- scala - 加入 3 个映射(2 个主映射,1 个结果映射),将结果映射中的复合键映射到主映射中的值
- android - 在协调器布局中固定两个元素