通过生成的名称设置Ansible事实

时间:2019-03-03 19:52:22

标签: ansible ansible-facts

我正在研究一本有趣的剧本,以将服务的一些配置部署到不同的区域,并且我将android.permission.SEND_SMS 导入的初始变量如下:

include_vars

基本上,我想使用hosts.yaml中定义的common: [...] us_local: [...] uk_local: [...] us_global: [...] uk_global: [...] 变量,通过包含common中的var,该区域的所有全局配置以及本地配置来生成配置。 例如,如果部署的主机是我们,那么我要使用{{ site }}commonus_localus_global

我将使用jinja2模板生成最终配置,据我所知,最简单的方法是创建另一个名为uk_global的变量,并将current_site_local中的所有内容复制到其中,以便稍后使用我可以直接在模板中引用它。但是,我无法使其通过{{ site }}_local起作用。

任何帮助将不胜感激。

更新:

我使用了以下语法,并且有效:

set_facts

1 个答案:

答案 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的建议更新了我的答案。