Ansible-如何在过滤器中逃脱嵌套Jinja

时间:2018-11-29 17:04:33

标签: filter ansible jinja2

我想在过滤器中使用嵌套的jinja表达式,但是这样做失败。

我有一个看起来像这样的变量文件:

NAME: "test"
VAR: ["a","b","c-test","d", "t-test"]

现在,我想在同一变量文件中使用ansible过滤器从VAR列表中提取特定的字符串。

我尝试过:

NAME: "test"
VAR: ["a","b","c-test","d","test-t"]

testc: "{{ VAR | select('match', 'c-{{ NAME }}') | list }}"
testt: "{{ VAR | select('match', '{{ NAME }}-t') | list }}"

NAME: "test"
VAR: ["a","b","c-test","d","test-t"]

testc: "{{ VAR | select('match', 'c-\'{{ NAME }}\'') | list }}" 
testt: "{{ VAR | select('match', '{{ NAME }}-t') | list }}"

没有成功。

在“ select”以外的过滤器中使用嵌套Jinja时,我也遇到相同的问题。

如何在ansible过滤器中使用或转义嵌套的jinja表达式?

1 个答案:

答案 0 :(得分:1)

您不能嵌套双花括号。双大括号内的名称已被评估为变量,因此您无需将其括在另一对双大括号中即可对其进行评估。您只需使用串联运算符~直接将字符串文字'c-'与变量NAME串联起来:

test: "{{ VAR | select('match', 'c-' ~ NAME) | list }}"
test: "{{ VAR | select('match', NAME ~ '-t') | list }}"