之前的笔记 《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










