1.Jinja模板简介
Jinja是一种基于python的模板引擎,在SLS文件里可以直接使用jinja模板来做一些操作。
通过jinja模板可以为不同服务器定义各自的变量。
两种分隔符: {% … %} 和 {{ … }},前者用于执行诸如 for 循环 或赋值的语句,后者把表达式的结果打印到模板上。
2.Jinja模板使用方式
2.1基本方式引用变量
在/srv/salt/apache/files/httpd.conf文件中写入变量,在推送脚本中写入传给变量的值
(1)修改apache的推送脚本,将变量的值写入脚本中port:80
(2)编辑apache/files/httpd.conf文件,写入变量
(3)推送到server2,安装httpd服务
(4)在server2上查看配置文件里的参数,与上面写的变量一致,说明引用变量成功
2.2直接引用grains变量
(1)在state文件中引用
- template: jinja
- context:
- port:8080
- host: {{ grains['ipv4'][-1] }}
注释掉reload,有reload时不会看到效果,不加reload默认就使用restart,restart之后才可以看到效果
(2)推送,端口成为8080
(3)在server2上查看,8080端口开启,引用变量成功
(4)在推送脚本中做动作:端口改为80,注销掉host行设置
在apache/files/httpd.conf文件中写入grains获取变量的值
(5)推送,端口成为80
(6)验证,在server2端可以看到已经改为80端口
2.3直接引用pillar变量
(1)在state文件中引用
- template: jinja
- context:
- port:80
- host: {{ pillar['ip'] }}
(2)在apache/files/httpd.conf文件中写入pillar获取变量的值
(3)编辑pillar目录下的脚本
(4)推送,成功
2.4其它方式引用(基于pillar)
(5)再次编辑
在推送脚本中注销掉host行设置,
在apache/files/httpd.conf文件中,写入
Listen {{ pillar['ip'] }}:{{ port }} ##netstat查看端口时,格式显示为ip:端口号
(6)推送
(7)编辑apache/files/httpd.conf模板文件、推送脚本,编写一个独立的脚本(lib.sls)存放变量的值,再次编辑apache/files/httpd.conf模板文件,在最上面引入变量
编写一个独立的脚本(lib.sls)存放变量的值
再次编辑apache/files/httpd.conf模板文件,在最上面引入变量
(8)推送
(9)验证
在server2上查看配置文件,发现正确引入变量,模板最上面一行的内容并没有复制过去,监听端口行显示为设置的格式
nginx脚本更改引用变量
(1)引用变量更改nginx的脚本
(2)推送到server3