Правильный способ конкатенации переменных строк
Мне нужно создать новую переменную из содержимого других переменных. В настоящее время я использую что-то вроде этого:
- command: echo "{{ var1 }}-{{ var2 }}-{{ var3 }}"
register: newvar
Проблема заключается в следующем:
- Использование
{{ var1 }}...{{ varN }}
приводит к слишком длинным строкам и очень уродливому коду.
- Использование
{{ newvar.stdout }}
немного лучше, но запутанно.
- Использование модуля
set_fact
кэширует факт между запусками. Это не подходит для меня.
Есть ли другое решение?
Ответы
Ответ 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. Я не тестировал его на более ранних версиях.