我当前正在使用ansible脚本部署docker-compose文件(使用docker_service模块),该文件设置了一系列环境变量,这些变量由运行在docker容器内的.NET Core服务读取,如下所示:< / p>
(...)
environment:
- Poller:Username={{ poller_username }}
- Poller:Password={{ poller_password }}
(...)
从Ansible Vault(最终将其移至Hashicorp Vault)中加载poller_username和poller_password的变量,并且可以毫无问题地插入文件中。
但是,我遇到了一个逻辑失败的情况:用户密码中间有一个“ $”。这意味着不是将环境变量设置为“ abc $ 123”,而是将其设置为“ abc”,从而导致我的应用程序失败。
编写调试命令后,我将密码正确输出到控制台。如果我执行docker exec <container_name> env
,则会输入错误的密码。
是否可以使用Jinja过滤器来确保密码符合docker-compose标准?对我来说,保证密码永远不会包含$似乎不可行。
编辑:{{ poller_password | replace("$","$$") }}
可以工作,但这并不是我可能在docker-compose模块中使用的每个变量中都采用的一种非常优雅的解决方案。
答案 0 :(得分:0)
类似的情况不是$,而是其他字符,最终使用了
something: !unsafe "{{ variable }}"
找不到更好的方法。
答案 1 :(得分:0)
对于这种特定情况,{{ poller_password | replace("$","$$") }}
解决方案似乎是不可避免的。幸运的是,这似乎是唯一需要注意的情况。