之前的笔记 《Saltstack配置管理学习笔记:requisites处理状态之间关系》 ,记录了一些安装包间的依赖关系以及 文件状态间的关系,可以进行一个声明的全面执行以及文件状态改变后的同步操作。
那么问题来了,文件的同步我们可以实现了,但不一定需要改动的内容都一样,比如web中我们需要监听对应minion端自己的一个网卡IP、某个端口,就不可以直接配置文件指定IP,需要涉及到一些变量进行获取后更改操作。现在Saltstack使用Jinja模板进行文件管理,在jinja中使用grains、pillar等标识并加上一些变量,就可以实现上述操作,同时可以使得文件管理更灵活,使用jinja可以减少人为操作,提升工作效率。
jinja使用归纳为三个地方:
(1)- file状态使用te’mplate参数
– template:jinja
(2)模板文件里边使用变量名称{{ 变量 }} 比如 {{ HOST }} {{PORT}}
(3)变量列表(变量列表和default对齐):
– default:
HOST: {{ grains[‘fqdn_ip4’][0] }} 或者使用{{ salt[‘network.hw_addr’](‘eth0’) }} 等方式获取具体信息
IPORT: 8080
下边我们以一个实际按理来联系下jinja模板使用方法。比如批量修改redis配置文件的监听端口和监听IP。
1,修改source配置文件。我们找到port和bind这两行,我们给他设置成变量,以后sls文件里边获取到的信息就会将这里批量替换修改。
# Accept connections on the specified port, default is 6379. # If port 0 is specified Redis will not listen on a TCP socket. port {{ PORT }} # If you want you can bind a single interface, if the bind option is not # specified all the interfaces will listen for incoming connections. # bind {{ HOST }}
2,修改redis.sls,设置启用jinja模板 。我这里设置一个jinja模板,PORT 可以设置成需要的端口。 HOST这里就比较灵活了,只要可以获取对应信息的方式都可以,比如通过直接指定、grains获取客户端信息、pillar获取客户端信息等。这里以grains组件获取为例。
另外 {{ grains[‘fqdn_ip4’][0] }}也可以直接写入source的目标文件中,但这种不直观,不建议。所有的操作建议都是从sls文件中实现,统一、直观。
redis-service: pkg.installed: - name: redis - require_in: - file: redis-service file.managed: - name: /etc/redis.conf - source: salt://files/redis.conf - template: jinja - defaults: PORT: 6379 HOST: {{ grains['fqdn_ip4'][0] }} service.running: - name: redis - enable: True - watch: - file: redis-service
好了,设置以后我们执行结果结果如下(只截图我们需要看的内容):
---------- ID: redis-service Function: file.managed Name: /etc/redis.conf Result: True Comment: File /etc/redis.conf updated Started: 17:32:23.210806 Duration: 137.856 ms Changes: ---------- diff: --- +++ @@ -22,12 +22,12 @@ # Accept connections on the specified port, default is 6379. # If port 0 is specified Redis will not listen on a TCP socket. -port 6378 +port 6379 # If you want you can bind a single interface, if the bind option is not # specified all the interfaces will listen for incoming connections. # -bind 127.0.0.1 +bind 43.252.228.xxx # Specify the path for the unix socket that will be used to listen for # incoming connections. There is no default, so Redis will not listen ---------- ID: redis-service Function: service.running Name: redis Result: True Comment: Service restarted Started: 17:32:23.471798 Duration: 1298.179 ms Changes: ---------- redis: True
可以发现端口和监听IP地址都已经修改了。
通过上边的案例,了解并练习了jinja模板通过设置变量灵活批量修改文件的方法,以后要修改动态参数的就可以这样批量搞了。
转载请注明:西数超哥博客www.ysidc.top» [原创]SaltStack配置管理学习笔记-使用jinja 模板进行文件管理
https://www.ysidc.top 西数超哥博客,数据库,西数超哥,虚拟主机,域名注册,域名,云服务器,云主机,云建站,ysidc.top