通过生成的名称设置可靠的事实

Set ansible facts though generated name

我正在编写一个 ansible 剧本来将一些服务配置部署到不同的区域,我有 include_vars 导入的初始变量,如下所示:

common: [...]
us_local: [...]
uk_local: [...]
us_global: [...]
uk_global: [...]

基本上,我想通过包含 common 中的变量、所有全局配置以及该区域的本地配置来生成配置,使用 {{ site }} 中定义的变量 hosts.yaml。 比如部署的host是us,那么我要用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 的建议更新了我的答案。