西数超哥博客
运维经验教程分享

[原创]SaltStack配置管理学习笔记-使用jinja 模板进行文件管理

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

赞(0)
声明:本站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,若涉及侵权请及时告知,将会在第一时间删除。本站原创内容未经允许不得转载:西数超哥博客 » [原创]SaltStack配置管理学习笔记-使用jinja 模板进行文件管理