Объединение списков возможных в сочетании с фильтром «по умолчанию» - PullRequest
0 голосов
/ 10 апреля 2019

все

в моем инвентаре я использую три переменные на разных уровнях:

 all/vars: 
 common_configs:
   - src: cfg.a
     dest: dest_a
 group_vars/vars:
 group_configs:
   - src: cfg.b
     dest: dest_b
 host_vars/vars: 
 host_configs:
   - src: cfg.c
     dest: dest_c

наконец мне нужно развернуть все cfg на целевой хост.Я использую следующий код:

 - copy:
     src: '{{ item.src }}'
     dest: '{{ item.dest }}'
   with_items:
      - '{{ common_configs + group_configs + host_configs }}'

Все работает, но в моем случае обязательным является только common_configs, поэтому, когда group_configs или / и host_configs не определены - я получаю сообщение об ошибке.Я пытался использовать фильтр по умолчанию (опустить):

   with_items:
      - '{{ common_configs + group_configs + host_configs|default(omit) }}'

Но у меня есть другая ошибка:

FAILED! => {"msg": "Unexpected templating type error occurred on ({{ common_configs + group_configs + host_configs|default(omit) }}): can only concatenate list (not \"str\") to list"}

Каков истинный способ пропустить неопределенные переменные в таком случае?

1 Ответ

0 голосов
/ 10 апреля 2019

Вы хотите использовать фильтр default для замены неопределенных переменных пустым списком в вашем выражении:

with_items:
   - '{{ common_configs + group_configs|default([]) + host_configs|default([]) }}'
...