В настоящее время я использую ANSIBLE скрипт для развертывания файла docker-compose (используя модуль docker_service), который устанавливает ряд переменных среды, которые считываются службой .NET Core, работающей внутри контейнера Docker, например:
(...)
environment:
- Poller:Username={{ poller_username }}
- Poller:Password={{ poller_password }}
(...)
Переменные для poller_username и poller_password загружаются из Ansible Vault (которое в конечном итоге будет перемещено в хранилище Hashicorp) и без проблем интерполируются в файл.
Однако я столкнулся со сценарием, в котором эта логика не работает: у пользователя есть «$» в середине его пароля. Это означает, что вместо переменной окружения, для которой установлено значение «abc $ 123», вместо этого для нее задано значение «abc», что приводит к сбою приложения.
После написания команды отладки я правильно получаю вывод пароля на консоль. Если я наберу docker exec <container_name> env
, я получу неправильный пароль.
Существует ли фильтр Jinja, который я могу использовать, чтобы убедиться, что пароль соответствует стандартам docker-compose? Мне кажется нереальным гарантировать, что у пароля никогда не будет $.
РЕДАКТИРОВАТЬ: {{ poller_password | replace("$","$$") }}
работает, но это не очень элегантное решение, чтобы иметь потенциально в каждой переменной, которую я использую в модуле docker-compose.