Ansible Template处理含特殊字符的文件
Ansible Template模块推送文件时,当遇到含有特殊字符的配置文件,如:”;” “#”等,如果不加处理,在执行Ansible-playbooks时会报错,因为这些模块不能被正确解析,如下图所示:
解决办法一
使用jinja2的Comments,注释掉那些特殊字符,语法:“”,参考:http://jinja.pocoo.org/docs/2.9/templates/#comments1
2sed -i '/^;/s/^;/{#;/g' www.conf.j2
sed -i '/^{#/s/$/#}/g' www.conf.j2
Jinja2分隔符配置如下:1
2
3
4{% ... %} for Statements
{{ ... }} for Expressions
{# ... #} for Comments
# ... ## for Line Statements
参考:
Statements
Expressions to print to the template output
Comments not included in the template output
Line Statements
效果图:
解决办法二
使用jinja2的Escaping,把这些特殊字符转义,语法:“ ... ”,参考:http://jinja.pocoo.org/docs/2.9/templates/#escaping1
2sed -i '/^;/s/^;/{% raw %};/g' www.conf.j2
sed -i '/^{% raw %}/s/$/{% endraw %}\n/g' www.conf.j2
Jinja2转义符:1
2
3
4
5#被raw包含起来的部分被转义,不会被解析
{% raw %}
;aaa
#bbb
{% endraw %}
效果图:
本作品采用知识共享署名 2.5 中国大陆许可协议进行许可,欢迎转载,但转载请注明来自Jack Wang Blog,并保持转载后文章内容的完整。本人保留所有版权相关权利。
本文出自”Jack Wang Blog”:http://www.yfshare.vip/2017/03/16/Ansible%20Template%E5%A4%84%E7%90%86%E5%90%AB%E7%89%B9%E6%AE%8A%E5%AD%97%E7%AC%A6%E7%9A%84%E6%96%87%E4%BB%B6/