Как безопасно передавать переменные, которые могут содержать специальные символы, в файл docker-compose в Ansible - PullRequest
2 голосов
/ 12 июня 2019

В настоящее время я использую 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.

Ответы [ 2 ]

0 голосов
/ 25 июля 2019

Для этого конкретного сценария решение {{ poller_password | replace("$","$$") }} кажется неизбежным. К счастью, это, кажется, единственный случай, который требует этой осторожности.

0 голосов
/ 12 июня 2019

Если бы подобная ситуация была не $, а каким-то другим символом, в конечном итоге использование

something: !unsafe "{{ variable }}"

не могло бы найти лучший способ.

...