Ansible使用Jinja2模板来修改被管理主机的配置文件。例如给10台远程主机都装上httpd服务,但是要求每个服务器的端口不一样,如何解决?
使用ansible的jinja2模板,也就是template模块。该模块和copy的工作原理很像,都是讲某个文件复制到远端主机上去,但是区别在于template模块可以获取变量的值,而copy则是原封不动的把文件内容复制过去。比如可以针对不同的主机定义不同的变量,template会在将配置文件分发出去前读取变量到jinja2模板,然后分发到不同的被管理主机上。
Ansible允许jinja2模板中使用条件判断和循环,但是不允许在playbook中使用。不是每个管理员都需要这个特性,但是有些时候jinja2模板能大大提高你的效率。
1、jinja2的分隔符
变量和逻辑表达式会被放在tag或分隔符中间。
jinja2模板使用:
- {% EXPR %}作为循环或条件判断表达式;
- { { EXPR }}输出变量的值;
- {# COMMENT #}表示注释;
2、创建jinja2模板
Jinja2是基于Python书写的模板引擎。功能比较类似于PHP的smarty模板。
- jinja2 文件以 `.j2` 为后缀, 也可以不写后缀。
- jinja2 中存在 三种