You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible:如何使用含模板语法的fact时避免内容插值?

解决方法

要让my_var里的{{ undefined_variable }}作为原始字符串保留,不触发插值,有两种简单可行的方式:

方法一:用单引号包裹字符串

利用Ansible的YAML解析规则——单引号内的内容不会进行变量插值,直接在set_fact时用单引号包裹目标字符串:

- hosts:
    - localhost
  tasks:
    - name: Set my_var as raw string
      set_fact:
        my_var: '{{ undefined_variable }}'
    - name: Dump my_var
      debug:
        msg: "dump: '{{ my_var }}'"

这样my_var的值会被原样保存为{{ undefined_variable }},后续任何场景调用{{ my_var }}时,都会输出原始字符串。

方法二:使用!unsafe标记

通过Ansible的!unsafe特殊标记,明确告知Ansible该字符串不需要进行模板渲染:

- hosts:
    - localhost
  tasks:
    - name: Set my_var with unsafe marker
      set_fact:
        my_var: !unsafe "{{ undefined_variable }}"
    - name: Dump my_var
      debug:
        msg: "dump: '{{ my_var }}'"

这个标记会强制Ansible跳过对字符串内模板语法的解析,直接保留原始内容。

补充说明

你之前用{{ '{{' }} undefined_variable {{ '}}' }}的转义写法也能实现保存原始字符串,但上述两种方法更简洁直观,且后续调用时无需额外处理。

内容的提问来源于stack exchange,提问作者Ronald Higgins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 19:32:44