Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.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 如何使用变量';s值来查找另一个名为said value的变量_Ansible_Jinja2 - Fatal编程技术网

Ansible 如何使用变量';s值来查找另一个名为said value的变量

Ansible 如何使用变量';s值来查找另一个名为said value的变量,ansible,jinja2,Ansible,Jinja2,我试图使用一个变量的值作为引用,作为Jinja2中另一个变量的名称,但运气不太好 这是一份可靠的工作,但我目前遇到的问题是金甲2本身。我不确定这是否可能,但我觉得应该是这样,我只是错过了一些显而易见的东西 例如,使用以下yaml: item: key: second_var value: foobar second_var: dict1: key1: value1 key2: value2 dict2: key1: v1 key2: v2 我正在尝

我试图使用一个变量的值作为引用,作为Jinja2中另一个变量的名称,但运气不太好

这是一份可靠的工作,但我目前遇到的问题是金甲2本身。我不确定这是否可能,但我觉得应该是这样,我只是错过了一些显而易见的东西

例如,使用以下yaml:

item:
 key: second_var
 value: foobar

second_var:
  dict1:
    key1: value1
    key2: value2
  dict2:
    key1: v1
    key2: v2
我正在尝试获取second_var的值,所以说:
{{second_var.dict2.key1}
将是
v1

item.key的内容包含
second\u var
。但是当我引用
{{item.key}}
时,我显然只得到字符串'second_var'

我希望能够以某种方式、某种方式转换这个
item.key
字符串,以便(例如)使用
{{item.key}}.dict2.key1

我一直在使用这个有用的live解析器:

我知道你不能嵌套Jinja2变量,所以
{{{{{item.key}}.dict2.key1}
已经不存在了,但这应该能让我很好地理解我想要实现的目标。我不知道现在该怎么做

测试模板:

{{ item.key }}
{% set var_name = item.key -%}
{{ var_name }}
{% set dict = var_name -%}
"{{ dict }}.dict2.key1" = "{{ another_var.dict2.key1 }}"
这是可能的。下面的模板

"{{ item.key }}.dict2.key1" = "{{ lookup('vars', item.key).dict2.key1 }}"
给予


如何以编程方式访问变量名? 例如,我们需要获取任意接口的ipv4地址,其中要使用的接口可以通过角色参数或其他输入提供。可以通过将字符串添加在一起来构建变量名,如下所示:

{{hostvars[inventory\u hostname]['ansible\u'+哪个接口]['ipv4']['address']} 遍历hostvars的技巧是必要的,因为它是整个变量名称空间的字典inventory_hostname'是一个神奇的变量,它指示在主机循环中循环的当前主机


另请参见动态变量:

非常好,谢谢!我知道我肯定错过了一些东西,我太忙于关注Jinja2过滤器:)
"{{ item.key }}.dict2.key1" = "{{ lookup('vars', item.key).dict2.key1 }}"
"second_var.dict2.key1" = "v1"