Ansible - Как избежать вложенного дзиндзя в фильтре - PullRequest
0 голосов
/ 29 ноября 2018

Я хочу использовать вложенное выражение 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 }}"

безуспех.

У меня та же проблема с использованием вложенного Jinja в фильтрах, отличных от 'select'.

Как вы используете или экранируете вложенное выражение Jinja в пределах ansible фильтра?

1 Ответ

0 голосов
/ 29 ноября 2018

Вы не можете вкладывать двойные фигурные скобки.Имена внутри двойных фигурных скобок уже оцениваются как переменные, поэтому вам не нужно заключать их в другую пару двойных фигурных скобок для их оценки.Вы можете просто использовать оператор конкатенации ~ для конкатенации строкового литерала 'c-' напрямую с переменной NAME:

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