首页 > 解决方案 > 如何使用变量的值来查找名称为所述值的另一个变量

问题描述

我正在尝试使用一个变量的值作为 Jinja2 中另一个变量的名称的参考,但运气不佳。

这是针对 Ansible 的工作,但我目前遇到问题的是 Jinja2 部分本身。我不确定这是否可能,但我觉得应该是这样,我只是遗漏了一些明显的东西。

例如,使用以下 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_var。但是当我引用时,{{ item.key }}我显然只是得到字符串'second_var'。

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

我一直在使用这个有用的实时解析器:http: //jinja.quantprogramming.com/

我知道你不能嵌套 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: another_var
 value: foobar

another_var:
  dict1:
    key1: value1
    key2: value2
  dict2:
    key1: v1
    key2: v2

标签: ansiblejinja2

解决方案


可以查找vars。下面的模板

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

"second_var.dict2.key1" = "v1"

推荐阅读