为什么ansible总是用模板中的单引号replace双引号?
我正在尝试使用Ansible模板生成Dockerfiles – 请参阅Ansible Galaxy和Github中的angular色源和模板
我需要genarate像标准的Dockerfile行:
... VOLUME ["/etc/postgresql/9.4"] ...
但是,当我把这个在input文件中:
... instruction: CMD value: "[\"/etc/postgresql/{{postgresql_version}}\"]" ...
它最终呈现为:
... VOLUME ['/etc/postgresql/9.4'] ...
我失去了“(这使得Dockerfiles无用)
任何帮助? 我怎样才能说服Jinja不能替代“with”?我试过了, “ 安全filter,甚至是{%raw%} – 它只是继续这样做!
更新:这里是如何重现这个问题:
从galaxy.ansible.com或Github获取peruncs.dockerangular色(链接在上面给出)用下面的内容编写一个简单的手册(说demo.yml )并运行: ansible-playbook -v demo.yml 。 -v选项将允许您查看生成的Dockerfile与破碎的内容所在的临时目录,因此您可以检查它。 生成Docker镜像对于成功并不重要,只要尝试获取Dockerfile即可。
- name: Build docker image hosts: localhost vars: - somevar: whatever - image_tag: "blabla/booboo" - docker_copy_files: [] - docker_file_content: - instruction: CMD value: '["/usr/bin/runit", "{{somevar}}"]' roles: - peruncs.docker
提前致谢!
Ansible中的某些东西似乎认识到,作为有效的Python,所以它变成了一个Python列表,然后使用Python的str()
进行序列化,这就是为什么最终使用单引号的值。
解决这个问题的一个简单的方法是在值的开始处粘贴一个空格,这似乎阻止了它被转换为Python:
- name: Build docker image hosts: localhost vars: - somevar: whatever - image_tag: "blabla/booboo" - docker_copy_files: [] - docker_file_content: - instruction: CMD value: ' ["/usr/bin/runit", "{{somevar}}"]' roles: - peruncs.docker
这导致:
CMD ["/usr/bin/runit", "whatever"]