如何在Ansible中避免对变量内容进行模板渲染?
解决办法
1. 用单引号包裹变量值
如果你的JSON内容里没有单引号,直接把整个JSON用单引号包起来,Ansible就不会把里面的{{ }}当成变量解析:
- hosts: all gather_facts: false remote_user: ansadm vars: dashboard_json: '{This is some sample text in JSON with numerous data in curly braces {{Text}} {{MoreText}} {{MoreText}} and many more}'
要是JSON里本身有单引号,把每个单引号改成两个单引号就行(YAML单引号的转义规则)。
2. 用YAML块标量处理多行内容(推荐)
针对1700行的超长JSON,用YAML的|块标量最方便,直接把内容粘贴进去就行,完全不用手动转义任何字符:
- hosts: all gather_facts: false remote_user: ansadm vars: dashboard_json: | { "sample_key": "value containing {{Text}}", "another_key": "value with {{MoreText}}", // 这里直接粘贴完整的1700行JSON }
|会完整保留原始的换行和格式,要是你想把连续换行合并成单个,可以换成>,但JSON用|更合适。
3. 从外部文件加载(最适合大文件)
把JSON内容单独存成一个文件(比如dashboard.json),然后用lookup插件读取,彻底避开转义问题:
- hosts: all gather_facts: false remote_user: ansadm vars: dashboard_json: "{{ lookup('file', 'dashboard.json') }}"
这里的双引号是必须的,因为要执行lookup插件,但读取到的文件内容里的{{ }}会被当作纯文本,不会被解析。
内容的提问来源于stack exchange,提问作者MikeKim
相关产品推荐
相关产品推荐

