Dav*_*rri 55 jinja2 ansible docker
如何逃避Ansible 1.9.2中的双花括号?
例如,如何在以下shell命令中转义双花括号?
- name: Test
shell: "docker inspect --format '{{ .NetworkSettings.IPAddress }}' instance1"
Run Code Online (Sandbox Code Playgroud)
udo*_*dan 91
每当你在Ansible中遇到冲突字符的问题时,经验法则是将它们作为Jinja表达式中的字符串输出.
所以{{你不会使用{{ '{{' }}:
- debug: msg="docker inspect --format '{{ '{{' }} .NetworkSettings.IPAddress {{ '}}' }}' instance1"
Run Code Online (Sandbox Code Playgroud)
Fil*_*ipe 39
这个:
- name: Test
shell: "docker inspect --format {% raw %}'{{ .NetworkSettings.IPAddress }}' {% endraw %} instance1"
Run Code Online (Sandbox Code Playgroud)
应该管用
另一种方法是使用反斜杠 \{\{ .NetworkSettings.IPAddress \}\}
希望能帮助到你
Tig*_*eng 21
试用了ansible 2.1.1.0
{%raw%} ... {%endraw%}块似乎是明确的方式
- name: list container images and name date on the server
shell: docker ps --format {%raw%}"{{.Image}} {{.Names}}"{%endraw%}
Run Code Online (Sandbox Code Playgroud)
只需要逃避领先'{{'
tasks:
- name: list container images and names
shell: docker ps --format "{{'{{'}}.Image}} {{'{{'}}.Names}}"
Run Code Online (Sandbox Code Playgroud)
除了更难以阅读之外,没有损害尾随'}}'.
tasks:
- name: list container images and names
shell: docker ps --format "{{'{{'}}.Image{{'}}'}} {{'{{'}}.Names{{'}}'}}"
Run Code Online (Sandbox Code Playgroud)
反斜杠'\'似乎不起作用
Ansible 2.0中的新功能是可以将值指定为不安全类型。
在您的示例中,您可以执行以下操作:
- name: Test
shell: !unsafe "docker inspect --format '{{ .NetworkSettings.IPAddress }}' instance1"
Run Code Online (Sandbox Code Playgroud)
小智 5
我有一个类似的问题:我需要发布一个由 jinja2 模板制作的 JSON 文档,其中包含一些 go 模板变量(是的,我知道 :-P),例如
"NAME_TEMPLATE": %{{service_name}}.%{{stack_name}}.%{{environment_name}}
试图将模板的这部分隔离在
{% raw %} ... {% endraw %}
没有用,因为 ansible 有某种魔法可以运行模板和变量替换两次(我不确定,但它确实看起来像这样)
service_name尝试使用模板时,您最终会得到“未定义的变量”...
所以我最终使用了!unsafe和的组合{% raw %} ... {% endraw %}来定义后来在模板中使用的事实。
- set_fact:
__rancher_init_root_domain: "{{ rancher_root_domain }}"
#!unsafe: try to trick ansible into not doing substitutions in that string, then use %raw% so the value won't substituted another time
__rancher_init_name_template: !unsafe "{%raw%}%{{service_name}}.%{{stack_name}}.%{{environment_name}}{%endraw%}"
- name: build a template for a project
set_fact:
__rancher_init_template_doc: "{{ lookup('template', 'templates/project_template.json.j2') }}"
Run Code Online (Sandbox Code Playgroud)
该模板包含以下内容:
"ROOT_DOMAIN":"{{__rancher_init_root_domain}}",
"ROUTE53_ZONE_ID":"",
"NAME_TEMPLATE":"{{__rancher_init_name_template }}",
"HEALTH_CHECK":"10000",
Run Code Online (Sandbox Code Playgroud)
输出正常:
"NAME_TEMPLATE": "%{{service_name}}.%{{stack_name}}.%{{environment_name}}",
Run Code Online (Sandbox Code Playgroud)
这是udondan 答案的简短替代方案;用双括号将整个字符串括起来:
shell: "docker inspect --format {{ '{{ .NetworkSettings.IPAddress }}' }} instance1"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31554 次 |
| 最近记录: |