ansible - 通过生成的名称设置 ansible 事实
问题描述
我正在编写一个 ansible playbook 以将一些服务配置部署到不同的区域,并且我有include_vars
如下导入的初始变量:
common: [...]
us_local: [...]
uk_local: [...]
us_global: [...]
uk_global: [...]
基本上,我想通过包含 vars from common
、所有全局配置以及该区域的本地配置来生成配置,使用{{ site }}
在 hosts.yaml 中定义的变量。例如,如果部署的主机是我们,那么我想使用common
, us_local
, us_global
, uk_global
。
我将使用 jinja2 模板生成最终配置,据我了解,最简单的方法是创建另一个名为的变量current_site_local
并将所有内容复制{{ site }}_local
到其中,以便稍后我可以直接在模板中引用它。但是,我无法通过set_facts
.
任何帮助,将不胜感激。
更新:
我使用了以下语法并且它有效:
- name: generate curr_site_local
set_fact:
current_site_local: '{{ vars[site + "_local"] }}'
解决方案
尝试使用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的建议更新了我的答案。
推荐阅读
- firebase - 如何使用颤振将时间戳从 Firebase 转换为 DateTime
- react-native - 添加到数据库时在餐厅应用程序上收到新订单
- javascript - 滚动后如何更改导航栏颜色?
- webpack - ReferenceError:未定义移相器
- javascript - 在 Openlayers 中动态更改图层的可见性
- sql - 如何将多个逗号分隔的字符串转换为具有多列的表
- java - 当尝试使用 primary_key 作为 Hibernate 中复合键的一部分时,字段 'index_id' 没有默认值
- python - 在 Python 3 中使用 Zip 每 2 个字符拆分字符串
- compilation - 动态链接和静态链接的指令点值
- javascript - JSON - 将子子项作为 IF 语句的条件