[英]How to stop Ansible Jinja2 string interpolation (templating)?
我有一点 JSON 我需要通过 Ansible,URI 模块发送到 API。
由于 JSON 中未定义的变量,它失败了。特别是由于这一行而失败。
"message": "{{message}}"
这里的事情是我需要这条线。 没有用于替代 {{message}} 的 var,该行必须是...
"message": "{{message}}"
我如何告诉 Ansible 或 URI 模块按原样发送内容?
原件 JSON
"message":"{{ policy.message | default('{{message}}') }}",
我没有尝试将{% raw %}
、 {% endraw %}
行拍打到 JSON 的开头和结尾,因为我确实需要先对其进行一些逻辑处理。
该 var 也失败了,因为它是 JSON 中的第一个。我还有 5 个类似的。
任务
我认为这将有助于解决一些问题,以下是任务……
- name: apply_policy.yml | render policy
set_fact:
_policy_rendered: "{{ lookup('template', 'policy.json.j2') | string }}"
check_mode: no
# Calls API with POST method to CREATE policy
- name: apply_policy.yml | CREATE policy
uri:
url: https://api.xxxxx/policies/
headers:
content-type: application/json
Host: api.xxxxx.com
Connection: keep-alive
Authorization: GenieKey {{key}}
method: POST
body: "{{ _policy_rendered }}"
return_content: yes
body_format: json
status_code: [201]
这里的事情是我需要这条线。 没有 var 意味着替代
{{ message }}
,该行必须是......
"message": "{{ message }}"
我如何告诉 Ansible 或 URI 模块按原样发送内容?
正如评论中已经提到的,为了防止给定的字符串被模板化,您可以利用Unsafe 或 raw strings 。
你可以测试这样的方法
---
- hosts: localhost
become: false
gather_facts: false
vars:
DEFAULT: !unsafe "{{ message }}"
tasks:
- name: Show unsafe value
debug:
msg: !unsafe "{{ message }}"
- name: Show unsafe value
debug:
msg: "{{ policy.message | default(DEFAULT) }}"
导致 output 的
TASK [Show unsafe value] ******
ok: [localhost] =>
msg: '{{ message }}'
TASK [Show unsafe value] ******
ok: [localhost] =>
msg: '{{ message }}'
我没有尝试在 JSON 的开头和结尾添加原始行,因为我确实需要先对它做一些逻辑处理。
它也应该适用于部分字符串。
"message" : "{{ policy.message | default('{% raw %}{{ message }}{% endraw %}') }}"
类似问答
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.