为什么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"]