Hri*_*nov 8 jinja2 ansible docker
我正在尝试使用Ansible模板生成Dockerfiles - 请参阅Ansible Galaxy和Github中的角色源和模板
我需要创建一个标准的Dockerfile行,如:
...
VOLUME ["/etc/postgresql/9.4"]
...
Run Code Online (Sandbox Code Playgroud)
但是,当我把它放在输入文件中时:
...
instruction: CMD
value: "[\"/etc/postgresql/{{postgresql_version}}\"]"
...
Run Code Online (Sandbox Code Playgroud)
最终渲染如下:
...
VOLUME ['/etc/postgresql/9.4']
...
Run Code Online (Sandbox Code Playgroud)
我失去了"(这使得Dockerfiles无用)
有帮助吗?我如何说服Jinja不要用'with'代替?我试过 ',安全过滤器,甚至{%raw%} - 它只是继续这样做!
更新: 以下是如何重现该问题:
从galaxy.ansible.com或Github 获取peruncs.docker角色(上面给出链接)用下面的内容写一个简单的playbook(比如demo.yml)并运行:ansible-playbook -v demo.yml.该-v选项将允许您查看temp目录,其中产生的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
Run Code Online (Sandbox Code Playgroud)
提前致谢!
lar*_*sks 12
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
Run Code Online (Sandbox Code Playgroud)
这导致:
CMD ["/usr/bin/runit", "whatever"]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5582 次 |
最近记录: |