上一篇博客《SaltStack(6)——saltstack之jinja模块详解》已经对Jinja模板进行了解释,实验环境已经配置好master及minion的环境,创建好默认数据配置目录,并且编写好了apache和nginx自动安装部署脚本。
上一篇博客链接:https://blog.csdn.net/dghfttgv/article/details/104956264
目录
一、使用Jinja模板调用grains和pillar
使用方法一
- 步骤一:
- 1、nja最基本的用法是使用控制结构包装条件
- 2、测试
- 步骤二:测试
使用方法二
- 步骤一:编辑httpd.conf文件
- 步骤二:编辑apache主模板文件
- 步骤三:测试
使用方法三
- 步骤一:创建变量文件
- 步骤二:修改htpd.conf模板文件
- 步骤三:编译
- 步骤四:测试
使用方法四:
- 例:定义变量在httpd.con配置文件中监听主机的ip
- 方法一:
- 步骤一:配置变量文件
- 步骤二:编辑httpd配置模板
- 步骤三:测试
- 方法二:
- 1、编辑http.conf文件将监听端口的值改成grain变量的取值
- 2、在init.sls文件中添加jinja模板
- 3、在server2上查看配置文件的内容
- 方法三:
- 1、编辑http.conf文件将监听端口的值改成pillar变量的取值
- 2、编辑init.sls文件
- 3、编辑
二、pillar给不同节点不同的配置实现keepalived
- 方法一:
- 步骤一:
- 1、创建实验目录
- 2、创建init.sls文件安装keeplived软件
- 3、编译
- 步骤二:将keepalived.conf复制到当前的目录下
- 步骤三:定义pillar变量
- 步骤四:修改init.sls文件
- 步骤五:测试
- 方法二:
- 步骤一:修改init.sls中的内容
- 步骤二:
- 步骤三:测试
一、使用Jinja模板调用grains和pillar
- Jinja 是一种基于python的模板引擎,在sls文件中可以直接使用jinja模板开做一些操作
- 通过jinja模板可以为不同的服务器定义各自的变量
- 两种分隔符:{ %...% }和{ { ... } },前者用于执行诸如for循环或赋值的语句后者把表达式的结果打印在模板上
实验环境
主机名 | ip | 服务 |
---|---|---|
server1 | 172.25.6.1 | 服务端 salt-master |
server2 | 172.25.6.2 | 客户端 salt-minion |
server3 | 172.25.6.3 | 客户端 salt-minion |
使用方法一:
在sls文件中使用
步骤一:
1、jinja最基本的用法是使用控制结构包装条件
[root@server1 ~]# vim /srv/salt/test.sls
/mnt/testfile:
file.append:
{% if grains['fqdn'] == 'server2' %} ##条件判断语句
- text: server2 ##如果是server2主机在后边追加一个纯文本信息,如果信息不存在则会新创建新的
{% elif grains['fqdn'] == 'server3' %}
- text: server3
{% endif %}
2、测试 :
[root@server1 salt]# salt '*' state.sls test
步骤二:
测试
1、在server2、server3上查看 /mnt/testfile下的内容
[root@server2 ~]# cat /mnt/testfile
server2
追加的原理是 :如果testfile中存在要追加的内容则不会改变追加的值、如果testfile中不存在才会在下边追加
验证:
使用方法二:
在普通文件中使用
模块中变量的调用情况
步骤一:
编辑httpd.conf文件
[root@server1 ~]# vim /srv/salt/apache/httpd.conf
...
Listen {{ port }} ##修改配置文件中的端口为变量格式
...
步骤二:
1、编辑apache主模板文件
[root@server1 ~]# vim /srv/salt/apache/init.sls ##编辑apache主模板文件
install-apache:
pkg.installed:
- pkgs:
- {{ pillar['webserver'] }}
- httpd-tools
- phpservice.running:
- name: {{ pillar['webserver'] }}
- enable: True
- watch:
- file: install-apachefile.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/httpd.conf
- template: jinja ##调用的是jinja模板
- context:
port: 8080 ##定义变量
(红色字体为修改的内容!!!)
步骤三:
测试
1、编译:
[root@server1 ~]# salt server2 state.sls apache
2、测试:
在server2上查看端口的变量
[root@server2 ~]# netstat -anltp ##查看端口信息
使用方法三:
import方式,可在satate之间共享
定义变量文件——>引用变量文件
步骤一:
1、创建变量文件
[root@server1 ~]# vim /srv/salt/lib.sls
{% set port = 80 %} ##定义一个变量
步骤二:
1、修改htpd.conf模板文件
[root@server1 ~]# vim /srv/salt/apache/httpd.conf
在文件的第一行插入
{% from 'lib.sls' import port %} ##从lib.sls文件调用变量
步骤三:
编译:
[root@server1 apache]# salt server2 state.sls apache
步骤四:
测试:
在server2上:
[root@server2 ~]# netstat -anltp
(变量调用成功!!!)
使用方法四:
直接引用gain变量 :
- Linten {{ grains['ip']}}
直接引用pillar变量
- Linten {{ pillar['ip']}}
在state文件中引用:
- template: jinja
- context:
bind: {{ pillar['ip']}}
例:定义变量在httpd.con配置文件中监听主机的ip
方法一
步骤一:
1、配置变量文件
[root@server1 ~]# vim /srv/salt/apache/init.sls
install-apache:
pkg.installed:
- pkgs:
- {{ pillar['webserver'] }}
- httpd-tools
- phpservice.running:
- name: {{ pillar['webserver'] }}
- enable: True
- watch:
- file: install-apachefile.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/httpd.conf
- template: jinja
- context:
port: 8080
bind: {{ grains['ipv4'][1] }} ##变量的值 切片取第二个值
2、查看server2的ipv4
[root@server1 apache]# salt server2 grains.item ipv4 ##查看server2 ipv4的值
server2:
----------
ipv4:
- 127.0.0.1
- 172.25.6.
步骤二:
编辑httpd配置模板
[root@server1 ~]# vim /srv/salt/apache/httpd.conf
...
Listen {{ bind }}:{{ port }} ##端口的变量信息
...
步骤三:
测试
1、编译
[root@server1 apache]# salt server2 state.sls apache
2、在server2上查看配置文件的内容
[root@server2 ~]# vim /etc/httpd/conf/httpd.conf
方法二:
通过grain取变量值
在http.conf模板中定义grians变量
在init.sls模板中引用jinja模板
1、编辑http.conf文件将监听端口的值改成grain变量的取值
[root@server1 ~]# vim /srv/salt/apache/httpd.conf
...
Listen {{ grains['ipv4'][1] }}:{{ port }} ##通过grain取从ipv4的值
...
2、在init.sls文件中添加jinja模板
[root@server1 ~]# vim /srv/salt/apache/init.sls
install-apache:
pkg.installed:
- pkgs:
- {{ pillar['webserver'] }}
- httpd-tools
- php在server2上查看配置文件的内容service.running:
- name: {{ pillar['webserver'] }}
- enable: True
- watch:
- file: install-apachefile.managed:
[root@server1 ~]# salt server2 state.sls apache
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/httpd.conf
- template: jinja ##t添加jin'ja模板
- context:
port: 8080
3、在server2上查看配置文件的内容
在http.conf模板中定义grians变量
在init.sls模板中引用jinja模板
[root@server2 ~]# vim /etc/httpd/conf/httpd.conf
方法三:
通过pillar取变量值
- 在http.conf模板中定义grians变量
- 在init.sls模板中引用jinja模板
- 在方法二的基础上
1、编辑http.conf文件将监听端口的值改成pillar变量的取值
[root@server1 ~]# salt server2 state.sls apache
2、编辑init.sls文件
[root@server1 ~]# salt server2 state.sls apache
install-apache:
pkg.installed:
- pkgs:
- {{ pillar['webserver'] }}
- httpd-tools
- phpservice.running:
- name: {{ pillar['webserver'] }}
- enable: True
- watch:
- file: install-apache[root@server1 ~]# salt server2 state.sls apache
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/httpd.conf
- template: jinja
- context:
port: {{ pillar['port'] }} ##通过pillar提取端口的变量值
bind: {{ grains['ipv4'][1]}} ##通过grains提取端口的变量值
3、编辑
[root@server1 ~]# salt server2 state.sls apache
二、pillar给不同节点不同的配置实现keepalived
例:用过pillar实现高可用
- 方法一
步骤一:
1、创建实验目录
[root@server1 ~]# mkdir /srv/salt/keepalived/
2、创建init.sls文件安装keeplived软件
[root@server1 ~]# vim /srv/salt/keepalived/init.sls
install-keepalived: ##安装keeplived软件
pkg.installed:
- name: keepalived
3、编译
[root@server1 keepalived]# salt '*' state.sls keepalived ##编译
步骤二
修改keepalived配置文件的模
1、将keepalived.conf复制到当前的目录下
[root@server1 keepalived]# scp server2:/etc/keepalived/keepalived.conf . ##复制文件至当前目录下
[root@server1 keepalived]# vim keepalived.conf ##编辑文件模板
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost ##邮件的接受者
}
notification_email_from keepalived@localhost ##系统提示接受的邮件来源
smtp_serv! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1 ##服务端口改为本机的
smtp_connect_timeout 30
router_id LVS_DEVEL
}vrrp_instance VI_1 {
state {{ STATE }} ##状态采用变量的格式
interface eth0
virtual_router_id 51
priority {{ PRI }}
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
{{ VIP }} ##ip改成变量的形式
}
}
步骤三:
定义pillar变量
[root@server1 ~]# cd /srv/pillar/ ##进入pillar目录中
[root@server1 pillar]#
[root@server1 pillar]# ls
top.sls web.sls
[root@server1 pillar]#
[root@server1 pillar]# vim web.sls ##编辑pillar主配置文件
{% if grains['fqdn'] == 'server3' %}
webserver: nginx
state: BACKUP ##状态变量的设定将server3时设置为BACKUP
pri: 50 ##设置优先级
{% elif grains['fqdn'] == 'server2' %}
webserver: httpd
state: MASTER ##将server2设置为master
pri: 100 ##设置优先级
{% endif %}keepalivedport: 80
vip: 172.25.6.100 ##设置vip变量
步骤四:
修改init.sls文件
[root@server1 ~]# vim /srv/salt/keepalived/init.sls
install-keepalived:
pkg.installed:
- name: keepalived
file.managed: ##模板的编译
- name: /etc/keepalived/keepalived.conf ##配置文件所在的路径
- source: salt://keepalived/keepalived.conf ##模板文件所在的位置
- template: jinja ##调用jinjia模板
- context: ##调用变量的值
STATE: {{ pillar['state'] }}
PRI: {{ pillar['pri'] }}
VIP: {{ pillar['vip'] }}service.running:
- name: keepalived ##开启keepalived服务
- watch:
- file: install-keepalived
步骤五:
测试:
1、编译
[root@server1 keepalived]# salt '*' state.sls keepalived
2、在server2上查看
[root@server2 ~]# ip addr ##查看vip
在server3上查看ip addr
[root@server3 ~]# ip addr ##查看主机的ip a
3、master节点飘移测试
在server2上关掉keepalived服务模拟宕机的情况
[root@server2 ~]# systemctl stop keepalived.service ##关掉keepalived服务模拟宕机的情况
3.1、在server2上查看vip
3.2、在server3上查看vip是否已经转移过去
3.3、在浏览器上访问vip
在浏览器上输入:http://172.25.6.100
(访问到的是server3上的内容 !!!)
4、重新开启server2的keepalived服务
[root@server2 ~]# systemctl start keepalived.service ##重启服务
(vip又重新迁回到server2节点上 !!!)
4.2、在浏览器上进行测试
(访问到的是server3和server4端的内容因为之前在server2上做了haproxy的实验 !!!)
- 方法二
不用在pillar目录下定义pillar变量值,直接将变量值写到init.sls文件中
步骤一 :
1、修改init.sls中的内容
[root@server1 ~]# vim /srv/salt/keepalived/init.sls
install-keepalived:
pkg.installed:
- name: keepalived
file.managed:
- name: /etc/keepalived/keepalived.conf
- source: salt://keepalived/keepalived.conf
- template: jinja
- context:
{% if grains['fqdn'] == 'server3' %}
webserver: nginx
STATE: BACKUP
PRI: 50
{% elif grains['fqdn'] == 'server2' %}
webserver: httpd
STATE: MASTER
PRI: 100
{% endif %}
VIP: 172.25.6.200 ##将vip设置为172.25.6.200service.running:
- name: keepalived
- watch:
- file: install-keepalived
步骤二:
keepalived.conf文件中的内容不变详见方法一
步骤三:
测试
1、编译:
[root@server1 keepalived]# salt server2 state.sls keepalived
2、测试
在server2上查看vip