繁体   English   中英

如何停止 Ansible Jinja2 字符串插值(模板)?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM