目录
1、基础简介
Jinja是一种基于python的模板引擎,在SLS文件里可以直接使用jinja模板来做一些操作,通过jinja模板可以为不同服务器定义各自的变量。
存在两种分隔符: {% ... %} 和 {{ ... }}:
{% ... %} 用于执行诸如 for 循环 或 赋值的语句;
{{ ... }}把表达式的结果打印到模板上。
2、基本引用方式
基础环境配置,参考文章:https://blog.youkuaiyun.com/qq_41056224/article/details/119054793
本文的实验均是基于上述文章(若环境不一样,出现相关问题,欢迎留言交流)。
在httpd的服务配置文件中,编写变量,进行文本推送:
##推送的配置文件位置:/srv/salt/apache/init.sls
##编写文件,配置jinja内容
13 file.managed:
14 - source: salt://apache/files/httpd.conf
15 - name: /etc/httpd/conf/httpd.conf
16 - template: jinja ##说明模板类型
17 - context: ##模板内容
18 port: 80 ##字典的方式指定
19 bind: 192.168.1.12
##在配置文件中引用:
41
42 #Listen 12.34.56.78:80
43 Listen {{ bind }}:{{ port }} ##直接引用
##配置推送
[root@server1 apache]# salt server2 state.sls apache
查看推送结果:

server2的结果:

##在state状态文件之间使用import方式引用
##定义变量文件:/srv/salt/apache/lib.sls
##文件内容:
{% set port = 8080 %}
##配置文件导入
##首行添加:{% from 'apache/lib.sls' import port %}
##位置引用:
Listen {{ port }}
##配置推送
[root@server1 apache]# salt server2 state.sls apache



3、在grains中的使用
##grains使用,主要是直接使用granis本身所具有的模板
##查看grains的对应模块
[root@server1 apache]# salt server2 grains.item ipv4
##在init.sls中引用
...
- template: jinja
- context:
port: 80
bind: {{ grains['ipv4'][1] }} ##jinja和grains配合使用
...
##在httpd.conf文件中使用
...
43 Listen {{ bind }}:{{ port }} ##调用jinja模板
...
【注】上述的grains 的引用也可以直接在配置文件中引用,但是为了使文件更加规范,一般写在配置管理文件中,和jinja配合使用


4、在pillar中的使用
pillar的使用方法和grains是一样的,可以在SLS状态文件中使用,也可以在conf配置文件中只接引用。
##在状态文件中引用
13 file.managed:
14 - source: salt://apache/files/httpd.conf
15 - name: /etc/httpd/conf/httpd.conf
16 - template: jinja
17 - context:
18 port: 80
19 bind: {{ pillar['ip'] }}
##在配置文件中直接引用
42 #Listen 12.34.56.78:80
43 Listen {{ pillar['ip'] }}:{{ port }}
【说明】 上述为两种放式均可以使用,在实际引用过程中,选一即可!


上述实验中,存在实验环境的相互干扰,配置之间相互影响,如果在配置过程中看不清晰,可在进行下一个实验前先回复之前的环境,控制唯一变量。
如果仍然存在相应问题,欢迎留言交流。