Что означает условное «когда: var | d ()» в Ansible 2.5 - PullRequest
0 голосов
/ 08 мая 2018

Я не могу найти в документах Ansible четкое значение условия, такого как when: var | d(). Кто-то может дать четкое объяснение?

например. Ниже приведено, работает ли ввод значения extra-var из cli или значение по умолчанию для локальной переменной ENV:

vars:
  my_var: "{{ e_var | default(ansible_env.USER | default(False,true)) }}"
tasks:
  - name: Conditional check
    debug:
      msg: "{{ my_var }}"
    when: my_var | d()

Но это не удалось:

vars:
  my_var: "{{ e_var | default(ansible_env.USER | default(false,true)) }}"
tasks:
  - name: Conditional check
    debug:
      msg: "{{ my_var }}"
    when: my_var

Что именно делает when: my_var | d()? Как это взаимодействует с частью | default(false,true) в объявлении переменной?

1 Ответ

0 голосов
/ 08 мая 2018

d - псевдоним фильтра default. Это фильтр Jinja2, так что отправляйтесь на документацию Jinja2 . Они работают одинаково:

по умолчанию ( значение, default_value = u '', логическое = False )

[]

Псевдонимы: d


Что касается проблемы, с которой вы сталкиваетесь , то это потому, что Ansible обрабатывает условие, состоящее только из имени переменной, в отличие от более сложного выражения (которое передается непосредственно в Jinja2 / Python) ( the фактический код начинается здесь ):

  • Если переменная my_var имеет значение user01, условный запрос попытается найти значение переменной user01 и потерпит неудачу, поскольку он не существует.

  • Если вы просто добавите логическое соединение (которое в общем смысле является избыточным), Ansible по-разному обработает все выражение и будет работать:

    when: my_var and true
    

В вашем случае использование другого default фильтра в выражении также является избыточным, но не позволяет Ansible попытаться найти значение «вложенной» переменной.

...