Подтвердить что ты не робот

Правильный способ конкатенации переменных строк

Мне нужно создать новую переменную из содержимого других переменных. В настоящее время я использую что-то вроде этого:

- command: echo "{{ var1 }}-{{ var2 }}-{{ var3 }}"
  register: newvar

Проблема заключается в следующем:

  • Использование {{ var1 }}...{{ varN }} приводит к слишком длинным строкам и очень уродливому коду.
  • Использование {{ newvar.stdout }} немного лучше, но запутанно.
  • Использование модуля set_fact кэширует факт между запусками. Это не подходит для меня.

Есть ли другое решение?

4b9b3361

Ответ 1

Хороший вопрос. Но я думаю, что нет хорошего ответа, который бы соответствовал вашим критериям. Лучшее, что я могу придумать, это использовать дополнительный файл vars.

Задача такая:

- include_vars: concat.yml

И в concat.yml у вас есть свое определение:

newvar: "{{ var1 }}-{{ var2 }}-{{ var3 }}"

Ответ 2

Поскольку строки являются списками символов в Python, мы можем конкатенировать строки так же, как мы объединяем списки (с знаком +):

{{ var1 + '-' + var2 + '-' + var3 }}

Если вы хотите передать результирующую строку некоторому фильтру, убедитесь, что вы заключили в круг в скобках:

например. Чтобы объединить наши 3 вара и получить хэш sha512:

{{ (var1 + var2 + var3) | hash('sha512') }}

Примечание: это работает на Ansible 2.3. Я не тестировал его на более ранних версиях.