我正在研究一本有趣的剧本,以将服务的一些配置部署到不同的区域,并且我将android.permission.SEND_SMS
导入的初始变量如下:
include_vars
基本上,我想使用hosts.yaml中定义的common: [...]
us_local: [...]
uk_local: [...]
us_global: [...]
uk_global: [...]
变量,通过包含common
中的var,该区域的所有全局配置以及本地配置来生成配置。
例如,如果部署的主机是我们,那么我要使用{{ site }}
,common
,us_local
,us_global
。
我将使用jinja2模板生成最终配置,据我所知,最简单的方法是创建另一个名为uk_global
的变量,并将current_site_local
中的所有内容复制到其中,以便稍后使用我可以直接在模板中引用它。但是,我无法使其通过{{ site }}_local
起作用。
任何帮助将不胜感激。
更新:
我使用了以下语法,并且有效:
set_facts
答案 0 :(得分:2)
尝试使用combine
过滤器。
- name: Set site config '{{ site }}'
set_fact:
current_site_local: '{{ common
| combine(vars[site + "_global"])
| combine(vars[site + "_local"]) }}'
在这种情况下,优先级顺序是local
配置将覆盖global
,并且配置将覆盖common
。
不知道这是否是您想要的,但这就是您在问题中给出的顺序,但是现在不包括<other>_global
。
如果您希望common
具有最高优先级,只需颠倒顺序即可。
请参阅combine
的文档。
根据Matthew L Daniel的建议更新了我的答案。