如何在Jinja2模板中注入含\n的Ansible变量且保留原格式
解决Ansible变量中
\n在Jinja2模板被转义的问题 方法1:使用raw过滤器
给变量添加|raw过滤器,强制Jinja2不解析字符串中的转义字符,保留原始的\n符号。
模板示例:
private_key: {{ my_private_key_var | raw }}
方法2:变量定义时用单引号包裹
在Playbook或变量文件中定义私钥变量时,用单引号'包裹字符串,Ansible会将其视为原始字符串,不会把\n解析为实际换行。
变量定义示例:
my_private_key_var: '-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC...\n-----END PRIVATE KEY-----'
方法3:用raw块包裹变量
如果模板中仅这一处需要保留原始格式,可使用Jinja2的{% raw %}和{% endraw %}块包裹变量,避免转义解析。
模板示例:
private_key: {% raw %}{{ my_private_key_var }}{% endraw %}
额外注意:如果变量是从外部文件、环境变量读取的,要确保读取过程中没有自动解析转义字符。比如用lookup('file', 'key.txt')读取时,若文件内写的是\n而非实际换行,可配合|string过滤器保证原始格式。
内容的提问来源于stack exchange,提问作者Arbab Nazar
相关产品推荐
相关产品推荐

