ANSIBLE:如何从库存组追加变量
我有一份可分解的清单,其分组如下:ANSIBLE:如何从库存组追加变量,ansible,yaml,Ansible,Yaml,我有一份可分解的清单,其分组如下: +hosts/ +all/ +group_vars/ - linux.yml - webserver.yml - dbserver.yml ... 我有一本为主持人设置监控的剧本;这种监控是由插件完成的。因此,在每个组中,y设置一个包含插件的监控插件列表,以便能够监控每个服务。 在每组yml中,我尝试将其添加到列表中: monitoring_plugins: {{ monitoring_plugins|default([]
+hosts/
+all/
+group_vars/
- linux.yml
- webserver.yml
- dbserver.yml
...
我有一本为主持人设置监控的剧本;这种监控是由插件完成的。因此,在每个组中,y设置一个包含插件的监控插件列表,以便能够监控每个服务。
在每组yml中,我尝试将其添加到列表中:
monitoring_plugins: {{ monitoring_plugins|default([]) + [ 'whatever_plugin_correspond_to_group' ] }}
但是它并没有像预期的那样工作,如果一个主机属于多个组,那么它应该有对应于这些组的插件
有没有办法解决这个问题
提前感谢。您所描述的应该在任务中按预期工作,但是您不能在vars或group_vars yaml或json文件中有可执行代码-这些是静态的 因此,您需要在较低级别设置一个不同的名称,然后在最高级别将其上卷:
group_vars/
dbserver.yml # sets monitoring_plugins_dbserver: ["a", "b"]
linux.yml # sets monitoring_plugins_linux: ["c", "d"]
然后在你的任务中,类似这样的东西,但事先警告我,我没有测试这个具体的例子:
-设定事实:
监控插件:>-
{%set results=[]%}
{%g在groups.keys%}
{%set}=results.extendvars['monitoring_plugins}+g]| d[]%}
{%endif%}
{{results}}
哇,很好的例子,谢谢分享。下划线变量集是什么?下划线与任何其他变量一样,您也可以使用任何其他变量名,但在这样的操作中,变量值无关紧要,通常使用下划线作为变量名。这是一个非常优雅的解决方案。我将投票认为它是正确的,但我认为ansible应该解决这个问题,而不需要在每个剧本/角色上添加任务来积累变量。谢谢