【发布时间】:2021-12-01 21:32:47
【问题描述】:
我在多组节点上运行一组任务。 我为每组定义了组的节点都有一个专用的 INI 文件。
对于其中一个组,有一个节点('nfs_server')我想对其进行例外处理。 我创建了一个带有条件定义主机的剧本,例如:
hosts: "{{ nfs_server if monitoring_enabled else '' }}"
gather_facts: yes
become: yes
tasks:
- debug: var=monitoring_enabled
- name: install monitoring
when: monitoring_enabled
include: extras/setup_monitoring.yml
我尝试在清单或 group_vars 文件中定义变量,但我总是收到未定义变量的错误:
ERROR! The field 'hosts' has an invalid value, which includes an undefined variable. The error was: 'monitoring_enabled' is undefined.
当我将主机(临时)更改为“全部”时,运行完成,并且我看到变量已正确评估:
ok: [master1] => { "monitoring_enabled": "false" }
WA1:我确实找到了一个相当丑陋的解决方法,方法是使用“children”语句在我的库存中定义一个额外的组。然后必须使用适合我所有的节点来定义该组 我要添加额外监控的服务器,并在库存中为异常集清空。
WA2:我还在Can I use inventory data from a web service within a playbook? 中找到了一种解决方法,其中“add_host”用于创建动态组。我已经能够完成这项工作,但又不是很干净。
问题:有没有更简单的方法来有条件地定义播放的主机集?
强烈的偏好是这样的,我也可以有一个布尔值的默认值,这样我就不需要在任何地方定义它。
谢谢,M.
【问题讨论】:
-
没有。没有更简单的方法。 add_host 的动态组是 playbook 中的唯一选项。
标签: ansible conditional-statements