Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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
Templates 基于组更改Ansible模板中的变量_Templates_Jinja2_Ansible - Fatal编程技术网

Templates 基于组更改Ansible模板中的变量

Templates 基于组更改Ansible模板中的变量,templates,jinja2,ansible,Templates,Jinja2,Ansible,我有一个类似这样的Ansible库存文件: [es-masters] host1.my-network.com [es-slaves] host2.my-network.com host3.my-network.com [es:children] es-masters es-slaves 我还有一个Jinja2模板文件,如果主机属于“es masters”组,则需要将某个值设置为“true” 我相信有一个简单的方法可以做到这一点,但在谷歌搜索和阅读文档之后,我画了一个空白 我想在Jinja

我有一个类似这样的Ansible库存文件:

[es-masters]
host1.my-network.com

[es-slaves]
host2.my-network.com
host3.my-network.com

[es:children]
es-masters
es-slaves
我还有一个Jinja2模板文件,如果主机属于“es masters”组,则需要将某个值设置为“true”

我相信有一个简单的方法可以做到这一点,但在谷歌搜索和阅读文档之后,我画了一个空白

我想在Jinja2模板中找到一些简单且编程的东西:

{% if hostvars[host][group] == "es-masters" %}
node_master=true
{% else %}
node_master=false
{% endif %}

有什么想法吗?

你可以反过来做。 检查标识符(主机名或IP或清单中的任何内容)是否在定义的组中。如果组在hostvars中,则不会

{% if ansible_fqdn in groups['es-masters'] %}
node_master=true
{% else %}
node_master=false
{% endif %}
但是,你最好做的是: 在模板中提供默认值

# role_name/templates/template.j2
node_master={{ role_name_node_master | default(true) }}
而不是覆盖组中的变量

# group_vars/es-masters.yml
role_name_node_master: false

如果您的资源清册没有识别具有ansible_fqdn、ansible_主机名等的主机,您还可以使用
组名称
检查当前主机是否将“es masters”作为其组之一

{% if 'es-masters' in group_names %}
node_master=true
{% else %}
node_master=false
{% endif %}

请参见

为避免不存在的组出错,您应首先检查该组是否存在:

{% if 'es-masters' in group_names and ansible_fqdn in groups['es-masters'] %}
node_master=true
{% else %}
node_master=false
{% endif %}

也许是这样?更改名为
node\u master
的变量,而不是使用txt

您是将hostvars传递给渲染函数还是希望jinja2能够访问hostvars?这只是一个示例,真的-我真正想要的是一种编程方式来“查看”特定主机所属的组,并在此基础上找到更改模板中变量的方法。文档:除了直接在INI文件中存储变量外,主机和组变量还可以存储在相对于清单文件的单个文件中。这些变量文件采用YAML格式。如果您是YAML新手,请参阅YAML语法。YAML库包含在AppEngine SDKHow中,我是否将答案扩展到有孩子的小组,张贴在
{% if ansible_fqdn in groups['es-masters'] %}
    {% set node_master=true %}
{% else %}
    {% set node_master=false %}
{% endif %}