Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ansible 通过生成的名称设置可解释的事实_Ansible_Ansible Facts - Fatal编程技术网

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

Ansible 通过生成的名称设置可解释的事实,ansible,ansible-facts,Ansible,Ansible Facts,我正在编写一个ansible playbook,以将一些服务配置部署到不同的地区,并且我有由导入的初始变量include_vars,如下所示: common: [...] us_local: [...] uk_local: [...] us_global: [...] uk_global: [...] 基本上,我想通过使用hosts.yaml中定义的{{site}}变量,包括来自common的变量、所有全局配置以及该区域的本地配置来生成配置。 例如,如果部署的主机是美国,那么我想使用commo

我正在编写一个ansible playbook,以将一些服务配置部署到不同的地区,并且我有由
导入的初始变量include_vars
,如下所示:

common: [...]
us_local: [...]
uk_local: [...]
us_global: [...]
uk_global: [...]
基本上,我想通过使用hosts.yaml中定义的
{{site}}
变量,包括来自
common
的变量、所有全局配置以及该区域的本地配置来生成配置。 例如,如果部署的主机是美国,那么我想使用
common
us\u local
us\u global
uk\u global

我将使用jinja2模板生成最终配置,据我所知,最简单的方法是创建另一个名为
current\u site\u local
的变量,并将
{site}}}\u local
中的所有内容复制到其中,以便以后我可以在模板中直接引用它。但是,通过
set\u facts
我很难让它正常工作

任何帮助都将不胜感激

更新:

我使用了以下语法,它可以工作:

- name: generate curr_site_local
  set_fact:
    current_site_local: '{{ vars[site + "_local"] }}'

尝试使用
组合
过滤器

- name: Set site config '{{ site }}'
  set_fact:
    current_site_local: '{{ common 
      | combine(vars[site + "_global"])
      | combine(vars[site + "_local"]) }}'
在这种情况下,优先顺序是
本地
配置将覆盖
全局
,这将覆盖
公共
。 不确定这是否是您想要的,但这是您在问题中给出的顺序,但现在不包括
\u global

如果希望
common
具有最高优先级,只需颠倒顺序即可

有关详细信息,请参阅文档


使用来自的建议更新了我的答案。

尝试使用
组合过滤器

- name: Set site config '{{ site }}'
  set_fact:
    current_site_local: '{{ common 
      | combine(vars[site + "_global"])
      | combine(vars[site + "_local"]) }}'
在这种情况下,优先顺序是
本地
配置将覆盖
全局
,这将覆盖
公共
。 不确定这是否是您想要的,但这是您在问题中给出的顺序,但现在不包括
\u global

如果希望
common
具有最高优先级,只需颠倒顺序即可

有关详细信息,请参阅文档


更新了我的答案,并提供了来自的建议。

Heh,看起来我们在几秒钟内就回答了对方的问题,但尽管你的答案比我的要全面得多,但我确实认为在:
时使用
块并不是解决该问题的正确方法。如果您更新您的答案以使用
vars
region
,我将很高兴为您的答案投票并删除我的答案。谢谢您的回复。实际上,我只想将{site}}{u local(一个列表)中的内容分配到另一个变量中,称为current{site}{u local,以便稍后我可以在如下模板中使用它:{curr{site}u local%}{entry.name}xxxx{{entry.value}{%endfor%}尝试了您的解决方案,但遇到了一个错误“错!在任务中未检测到任何操作。这通常表示模块名称拼写错误或模块路径不正确。“这个错误只是因为我的打字错误,它现在起作用了。谢谢嘿,看起来我们在几秒钟内就回答了,但是虽然你的答案比我的要全面得多,但我确实认为在:
块时使用
,并不是解决这个问题的正确方法。如果您更新您的答案以使用
vars
region
,我将很高兴为您的答案投票并删除我的答案。谢谢您的回复。实际上,我只想将{site}}{u local(一个列表)中的内容分配到另一个变量中,称为current{site}{u local,以便稍后我可以在如下模板中使用它:{curr{site}u local%}{entry.name}xxxx{{entry.value}{%endfor%}尝试了您的解决方案,但遇到了一个错误“错!在任务中未检测到任何操作。这通常表示模块名称拼写错误或模块路径不正确。“错误只是因为我的输入错误,现在可以正常工作了。谢谢!