ANSIBLE: 如何从清单组附加变量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ANSIBLE: 如何从清单组附加变量相关的知识,希望对你有一定的参考价值。
我有一个ansible清单,组别如下。
+hosts/
+all/
+group_vars/
- linux.yml
- webserver.yml
- dbserver.yml
...
我有一个游戏本,用来设置对主机的监控,而监控的种类是由插件完成的。所以在每个组y中设置一个列表 monitoring_plugins
的插件,以便能够监控每个服务。 在每一个组的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_fact:
monitoring_plugins: >-
{% set results = [] %}
{% for g in groups.keys() %}
{% set _ = results.extend(vars['monitoring_plugins_'+g]|d([])) %}
{% endif %}
{{ results }}
以上是关于ANSIBLE: 如何从清单组附加变量的主要内容,如果未能解决你的问题,请参考以下文章
Ansible-playbook 针对不在清单文件中并包含组变量的任意主机运行
Ansible PlayBook的中清单变量优先级分析及清单变量如何分离总结
如何编写yaml格式的Ansible主机清单(inventory)及清单变量使用Demo