Saltstack_使用指南12_配置管理-jinja模板
1. 说明
下文的案例是根据上一篇文章进行的修改。因此请优先读取上一章博文内容《Saltstack_使用指南11_配置管理-状态之间依赖关系》
2. 主机规划
salt 版本
[root@salt100 ~]# salt --version
salt 2018.3. (Oxygen)
[root@salt100 ~]# salt-minion --version
salt-minion 2018.3. (Oxygen)
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步走:
、告诉File模块,你要使用jinja
- template: jinja
、列出参数列表
- defaults:
HttpPort:
、模板引用
{{ HttpPort }} 模板里面支持:salt 远程执行、grains 和 pillar 进行赋值
4. 案例
对上一章案例内容进行改造。
添加 jinja 信息。
添加了 jinja 的好处:
1、 可以把 mariadb.sls 也规整到 init.sls;
2、 这样就是一个 SLS 文件对外,而不是多个 SLS;
3、 在执行 SLS 的时候,直接整体/分批执行,而不是选定某个或某些 minion 执行;不需要指定 minion 目标,减少人为出错的可能性;
4、 后期维护方便
4.1. 部署架构
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'][] == '172.16.1.11' and grains['host'] == 'salt01')
or (grains['ip4_interfaces']['eth0'][] == '172.16.1.12' and grains['host'] == 'salt02')
or (grains['ip4_interfaces']['eth0'][] == '172.16.1.13' and grains['host'] == 'salt03')
%}
# 注释信息 需要顶格书写
service_appoint: www
{% elif grains['ip4_interfaces']['eth0'][] == '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
# 下面的是本次修改的部分 ★★★★★
Listen {{ HttpPort }}
………………
# If your host doesn't have a registered DNS name, enter its IP address here.
#
#ServerName www.example.com:
# 下面的是本次修改的部分 ★★★★★
# 格式 ServerName 本机内网IP:Port
# 这样的话,在 apache.sls 文件中就不用写规则获取 minion的内网IP了,
# 因为在状态执行的时候,就会根据下文的 grains 规则得到对应 minion 的内网IP
# ServerName {{ grains['ip4_interfaces']['eth0'][] }}:{{ 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
-rw-r--r-- root root Jan : apache.sls
drwxr-xr-x root root Jan : file
-rw-r--r-- root root Jan : init.sls
-rw-r--r-- root root Dec : mariadb.sls
-rw-r--r-- root root Dec : 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:
- backup: minion
- require: # 我依赖谁
- pkg: apache-service # 依赖 apache-service 中 pkg 的安装包
# 新加 jinja 内容 # 本次修改内容 ★★★★★
- template: jinja
- defaults:
LocalInnerIP: {{ grains['ip4_interfaces']['eth0'][] }}
HttpPort:
# salt远程执行模块 支持 ★★★★★
HwAddr_eth0: {{ salt['network.hw_addr'] ('eth0') }} # 注意 ] ( 之间的空格
# grains 支持 【其实 defaults 下的第一行就是,这里在重复一遍】
IP6_Interface_eth0: {{ grains['ip6_interfaces']['eth0'][] }}
# 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
-rw-r--r-- root root Jan : apache.sls
drwxr-xr-x root root Jan : file
-rw-r--r-- root root Jan : init.sls
-rw-r--r-- root root Dec : mariadb.sls
-rw-r--r-- root root Dec : 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 已经重加载,并且端口从 改为了
[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:
:0c:::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
Saltstack_使用指南12_配置管理-jinja模板的更多相关文章
- SaltStack配置管理-jinja模板
上一篇:SaltStack配置管理-状态间关系 需求:需要apache配置文件里面监听的端口是每个minion本地的地址 saltstack默认的模板是jinjia模板 参考文档:http://doc ...
- Saltstack_使用指南03_配置管理
1. 主机规划 注意事项 修改了master或者minion的配置文件,那么必须重启对应的服务. 2. 了解YAML 具体地址 https://docs.saltstack.com/en/latest ...
- Saltstack_使用指南11_配置管理-状态之间依赖关系
1. 说明 下文的案例是根据上一篇文章进行的修改.因此请优先读取上一篇文章内容<Saltstack_10_配置管理-状态模块> 并且目录进行了变化,从 /srv/salt/lamp 变为了 ...
- Saltstack_使用指南10_配置管理-状态模块
1. 主机规划 salt 版本 [root@salt100 ~]# salt --version salt (Oxygen) [root@salt100 ~]# salt-minion --versi ...
- 5 LAMP配置管理:模块(state、file、pkg、service)、jinja模板、job管理、redis主从
1. 配置管理:state和file https://docs.saltstack.com/en/latest/topics/states/index.html Full list of states ...
- Saltstack_使用指南17_salt-ssh
1. 主机规划 salt 版本 [root@salt100 ~]# salt --version salt (Oxygen) [root@salt100 ~]# salt-minion --versi ...
- 架构师成长之路5.6-Saltstack配置管理(jinja模板)
点击架构师成长之路 架构师成长之路5.6-Saltstack配置管理(jinja模板) 配置管理工具: Pupper:1. 采用ruby编程语言:2. 安装环境相对较复杂:3.不支持远程执行,需要FU ...
- SaltStack的配置管理--jinja (七)
SaltStack的配置管理--jinja 需求场景:使用jinja模板,让各节点的httpd都监听在本机的ip [root@7mini-node1 apache]# vim files/httpd. ...
- saltstack通过jinja模板,grains方式将配置的变量值写入到配置文件中?
需求描述: 在通过saltstack进行jinja模板获取值的时候,可以通过grains的方式,获取一些操作系统相关的信息,比如,OS,ip地址等,在这里演示下,做个记录. 演示: 1.修改sls文件 ...
随机推荐
- Linux Bash文本操作之sed篇其二
上一篇总结了sed的基础应用(Linux Bash文本操作之sed篇其一),内容实在有够多,这里再对稍微高级一些的用法做一个整理,以方便使用时查阅. 查看文本内容 示例1表示在第一到第四行匹配到的行后 ...
- Spring Cloud进阶之路 | 一:服务注册与发现(nacos)
转载请注明作者及出处: 作者:银河架构师 原文链接:https://www.cnblogs.com/luas/p/12068846.html 1.版本 最新稳定版本为1.1.4,也可以从发版说明.博客 ...
- 高级Java开发人员最常访问的几个网站
这是高级Java开发人员最常访问的几个网站. 这些网站提供新闻,一般问题或面试问题的答案,精彩的讲座等.质量是优秀网站的关键因素,这此网站都有较高的质量内容.下面逐一介绍: 1. Stackoverf ...
- ELK:ElasticSearch中有数据,Kibana查询不到数据
ElasticSearch中有数据,Kibana查询不到数据 多数原因就是Linux的时区问题, 在linux输入date查看当前时间是否根本地相对应,不对应那么你就来对了, 解决方案一. 这个选择的 ...
- 2019QM大作业2-weyl半金属Landau Level
目录 说明 for cnblog QM大作业2--weyl半金属的Landau Level \(\boldsymbol{Abstract}\) 说明 Landau Level 自旋与pauli mat ...
- 网站如何免费升级到HTTPS?
最近在做网站SSL升级,看似简单的操作还是会遇到各种问题,现在和大家分享一下. 证书申请: 公司是创业公司,为了省成本准备申请免费证书,对比了一些证书商,最后选择使用沃通wosign提供的证书服务,发 ...
- 文本切换器(TextSwitcher)的功能与用法
TextSwitcher继承了ViewSwitcher,因此它具有与ViewSwitcher相同的特征:可以在切换View组件时使用动画效果.与ImageSwitcher相似的是,使用TextSwit ...
- Android几种多渠道打包
1.什么是多渠道打包 在不同的应用市场可能有不同的统计需求,需要为每个应用市场发布一个安装包,这里就引出了Android的多渠道打包.在安装包中添加不同的标识,以此区分各个渠道,方便统计app在市场的 ...
- netty解决粘包半包问题
前言:开发者用到TCP/IP交互时,偶尔会遇到粘包或者半包的数据,这种情况有时会对我们的程序造成严重的影响,netty框架为解决这种问题提供了若干框架 1. LineBasedFrameDecoder ...
- CMake指南
版权申明: 本文原创首发于以下网站,您可以自由转载,但必须加入完整的版权声明 博客园:https://www.cnblogs.com/MogooStudio/ csdn博客:https://blog. ...