Saltstack_使用指南12_配置管理-jinja模板

1. 说明:

下文的案例是根据上一篇文章进行的修改。因此请优先读取上一章博文内容《Saltstack_使用指南11_配置管理-状态之间依赖关系

2. 主机规划

服务器名称操作系统版本内网IP外网IP(模拟)Hostname部署模块
salt100CentOS7.5172.16.1.10010.0.0.100salt100salt-master、salt-minion
salt01CentOS7.5172.16.1.1110.0.0.11salt01salt-minion
salt02CentOS7.5172.16.1.1210.0.0.12salt02salt-minion
salt03CentOS7.5172.16.1.1310.0.0.13salt03salt-minion
salt jinja 文档

https://docs.saltstack.com/en/latest/topics/jinja/index.html

Jinja2 文档

http://docs.jinkan.org/docs/jinja2/
http://docs.jinkan.org/docs/jinja2/templates.html

注意事项

修改了master或者minion的配置文件,那么必须重启对应的服务。

3. jinja 用法

# 注意有空格
这里有两种分隔符: {% ... %} 和 {{ ... }} 。前者用于执行诸如 for 循环 或赋值的语句,后者把表达式的结果打印到模板上。
{# ... #} 为注释语法
jinja 在 状态中的使用
3步走:
	1、告诉File模块,你要使用jinja
		- template: jinja
	2、列出参数列表
		- defaults:
      	  HttpPort: 88
	3、模板引用
		{{ HttpPort }}

模板里面支持:salt 远程执行、grains 和 pillar 进行赋值

4. 案例

对上一章案例内容进行改造。
添加 jinja 信息。

添加了 jinja 的好处:

1、可以把 mariadb.sls 也规整到 init.sls;
2、这样就是一个 SLS 文件对外,而不是多个 SLS;
3、在执行 SLS 的时候,直接整体/分批执行,而不是选定某个或某些 minion 执行;不需要指定 minion 目标,减少人为出错的可能性;
4、后期维护方便

4.1. 部署架构

服务器名称操作系统版本内网IP外网IP(模拟)Hostname部署模块【通过salt部署】
salt100CentOS7.5172.16.1.10010.0.0.100salt100mariadb
salt01CentOS7.5172.16.1.1110.0.0.11salt01httpd、PHP
salt02CentOS7.5172.16.1.1210.0.0.12salt02httpd、PHP
salt03CentOS7.5172.16.1.1310.0.0.13salt03httpd、PHP

4.2. 本章涉及的 pillar 的信息

可参见:《Saltstack_使用指南05_数据系统-Pillar

[root@salt100 pillar]# pwd
/srv/pillar
[root@salt100 pillar]# cat top.sls 
base:
  '*':
    - web_pillar.service_appoint

# 下面的跟本章节无关,可以不管
  # 使用通配符
  'salt0*':
    - web_pillar.apache
    - web_pillar.user # 引用
  # 指定具体minion
  'salt03':
    - web_pillar.apache
    - web_pillar.user # 引用
[root@salt100 pillar]# cat web_pillar/service_appoint.sls  # pillar 的 SLS
{% if (grains['ip4_interfaces']['eth0'][0] == '172.16.1.11' and grains['host'] == 'salt01') 
   or (grains['ip4_interfaces']['eth0'][0] == '172.16.1.12' and grains['host'] == 'salt02')
   or (grains['ip4_interfaces']['eth0'][0] == '172.16.1.13' and grains['host'] == 'salt03')
%}
# 注释信息 需要顶格书写
service_appoint: www
{% elif grains['ip4_interfaces']['eth0'][0] == '172.16.1.100' %}
service_appoint: mariadb
{% endif %}
使 pillar 生效
[root@salt100 pillar]# salt '*' saltutil.refresh_pillar  # 刷新
[root@salt100 pillar]# salt '*' pillar.item service_appoint  # 查看 pillar 中 service_appoint 的信息
salt03:
    ----------
    service_appoint:
        www
salt02:
    ----------
    service_appoint:
        www
salt100:
    ----------
    service_appoint:
        mariadb
salt01:
    ----------
    service_appoint:
        www

4.3. 配置文件 httpd.conf 修改

[root@salt100 file]# pwd
/srv/salt/lamp2/file
[root@salt100 file]# vim httpd.conf
# Listen 80
# 下面的是本次修改的部分 ★★★★★
Listen {{ HttpPort }}
………………
# If your host doesn't have a registered DNS name, enter its IP address here.
#
#ServerName www.example.com:80
# 下面的是本次修改的部分 ★★★★★
# 格式  ServerName 本机内网IP:Port
# 这样的话,在 apache.sls 文件中就不用写规则获取 minion的内网IP了,
# 因为在状态执行的时候,就会根据下文的 grains 规则得到对应 minion 的内网IP
# ServerName {{ grains['ip4_interfaces']['eth0'][0] }}:{{ HttpPort }}

# 这里是一个变量,如此的话,在 apache.sls 中需要写规则获取 minion 的内网IP
# 优先这种写法,后期改变时,直接改 sls 文件即可。而不用改变该配置文件
ServerName {{ LocalInnerIP }}:{{ HttpPort }}

# 「#」 注释,只是针对 httpd 服务,对于 jinja 仍然是可用的 ★★★★★
# salt 模块 支持
# hw_addr_eth0={{ HwAddr_eth0 }}
# grains 支持
# ip6_interfaces_eth0={{ IP6_Interface_eth0 }}
# pillar 支持
# pillar_user={{ Pillar_User }}

4.4. apache.sls 文件修改

[root@salt100 lamp2]# pwd
/srv/salt/lamp2
[root@salt100 lamp2]# ll
total 16
-rw-r--r-- 1 root root 747 Jan  1 14:17 apache.sls
drwxr-xr-x 2 root root  75 Jan  1 14:33 file
-rw-r--r-- 1 root root 209 Jan  1 14:04 init.sls
-rw-r--r-- 1 root root 563 Dec 31 15:42 mariadb.sls
-rw-r--r-- 1 root root 346 Dec 31 15:31 php.sls
[root@salt100 lamp2]# cat apache.sls 
apache-service:
  pkg.installed:
    - name: httpd

  file.managed:
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://lamp2/file/httpd.conf
    - user: root
    - gourp: root
    - mode: 644
    - backup: minion
    - require:    # 我依赖谁
      - pkg: apache-service   # 依赖 apache-service 中 pkg 的安装包
    # 新加 jinja 内容  # 本次修改内容 ★★★★★
    - template: jinja
    - defaults:
      LocalInnerIP: {{ grains['ip4_interfaces']['eth0'][0] }}
      HttpPort: 8088
      # salt远程执行模块 支持  ★★★★★
      HwAddr_eth0: {{ salt['network.hw_addr'] ('eth0') }}  # 注意 ] ( 之间的空格
      # grains 支持 【其实 defaults 下的第一行就是,这里在重复一遍】
      IP6_Interface_eth0: {{ grains['ip6_interfaces']['eth0'][0] }}
      # pillar 支持
      Pillar_User: {{ pillar['level1']['level2']['my_user'] }}

  service.running:
    - name: httpd
    - enable: True
    - reload: True
    - require:   # 我依赖谁
      - pkg: apache-service
    - watch:      # 我监控谁
      # 一旦发生变化,就重加载服务
      - file: apache-service  # 监控 apache-service 中 file 的文件

4.5. init.sls 文件修改

[root@salt100 lamp2]# pwd
/srv/salt/lamp2
[root@salt100 lamp2]# ll
total 16
-rw-r--r-- 1 root root 747 Jan  1 14:17 apache.sls
drwxr-xr-x 2 root root  75 Jan  1 14:33 file
-rw-r--r-- 1 root root 209 Jan  1 14:04 init.sls
-rw-r--r-- 1 root root 563 Dec 31 15:42 mariadb.sls
-rw-r--r-- 1 root root 346 Dec 31 15:31 php.sls
[root@salt100 lamp2]# cat init.sls   # 根据 pillar 来区分,哪些 minion 执行哪些 SLS 文件
include:   # 我包含谁
{% if pillar['service_appoint'] == 'www' %}
  - lamp2.apache
  - lamp2.php
{% elif pillar['service_appoint'] == 'mariadb' %}
  - lamp2.mariadb
{% endif %}

4.6. 执行 SLS

# 测试一下,看是否可执行,有没有什么异常
[root@salt100 lamp2]# salt 'salt01' state.sls lamp2.init test=True  
# 根据 init.sls 信息,选取覆盖 if 条件中所有情况的 minion 并测试一下,看是否正常
[root@salt100 lamp2]# salt -L 'salt01,salt100' state.sls lamp2.init test=True  
# 单个执行,并查看返回情况
# 这时可在 salt01 机器,通过 ps -ef | grep 'httpd' 和 netstat -lntup | grep 'httpd' 查看
# 可见 httpd 已经重加载,并且端口从 80 改为了 8088
[root@salt100 lamp2]# salt 'salt01' state.sls lamp2.init 
[root@salt100 lamp2]# salt '*' state.sls lamp2.init  # 批量执行,并查看返回情况

4.7. 部分截图

[root@salt100 lamp2]# salt 'salt01' state.sls lamp2.init test=True  # 对应的截图

在这里插入图片描述

对应 salt 远程执行、grains、pillar 的情况
[root@salt100 ~]# salt 'salt01' network.hw_addr eth0
salt01:
    00:0c:29:95:1b:7a
[root@salt100 ~]# salt 'salt01' grains.item ip6_interfaces:eth0
salt01:
    ----------
    ip6_interfaces:eth0:
        - fe80::20c:29ff:fe95:1b7a
[root@salt100 ~]# salt 'salt01' pillar.item level1:level2:my_user
salt01:
    ----------
    level1:level2:my_user:
        lisi

微信公众号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值