saltstack之grains(静态数据)+pillar(动态参数) jinja模板

1.基本概念

(1)什么是Pillar?

Pillar是在salt 0.9.8版本后才添加的功能组件。它跟grains的结构一样,也是一个字典格式,数据通过key/value的格式进行存储。
在Salt的设计中,Pillar使用独立的加密sessiion,所以Pillar可以用来传递敏感的数据,例如ssh-key,加密证书等。
存储位置:存储在master端存放需要提供给minion的信息
应用场景:敏感信息,每个minion只能访问master分配给自己的信息

(2)pillar和grains的区别

本质上都是key / value 型的数据库。
Grains 是存储在minon上的数据,minion启动后就进行Grain计算,是一种静态数据。
Pillar 数据存储在master, 是动态数据,每个minion只能看到自已的pillar。
一个minion可以告诉master它的数据,而minion则需要从master索要pillar数据。
grains存储的是静态、不常变化的内容,pillar则相反
grains是存储在minion本地,而pillar存储在master本地
minion有权限操作自己的grains值,如增加、删除,但minion只能查看自己的pillar,无权修改

grains 这个跟puppet的facter一样,负责采集客户端一些基本信息
可以在客户端自定义 然后自动汇报上来 也可以从服务器端定义然后推下去 采集完后 再汇报上来
pillar 这个东西如果跟grains 比较的话 他的灵活性强点 向怎么定义就怎么定义 然后取值即可

2.grains演示过程如下

(1)在server1上可以直接利用grains采集静态数据
[root@server1 files]# salt server2 grains.item os
[root@server1 files]# salt server2 grains.item fqdn #取完整的主机名 包括域名等
[root@server1 files]# salt server2 grains.item nodename #只取主机名
[root@server1 files]# salt server2 grains.ls #列出所有保留字
saltstack之grains(静态数据)+pillar(动态参数) jinja模板_第1张图片
(2)saltstack中的grains相当于ansible中的setup,可以查看远程主机的基本信息
saltstack之grains(静态数据)+pillar(动态参数) jinja模板_第2张图片
(3)在minion端设置开启grains,并且重启服务
vim /etc/salt/minion
在这里插入图片描述
在这里插入图片描述
(4)在server1上通过grains查看角色
saltstack之grains(静态数据)+pillar(动态参数) jinja模板_第3张图片
(5)在server3上编写文件,然后重启服务
vim grains
saltstack之grains(静态数据)+pillar(动态参数) jinja模板_第4张图片
(6)在server1上查看
saltstack之grains(静态数据)+pillar(动态参数) jinja模板_第5张图片
saltstack之grains(静态数据)+pillar(动态参数) jinja模板_第6张图片
(7)在server1上设置grains
SaltStack可以分为Master和Minion,自定义modules模块可以让你更加便捷的在两者之间进行信息收集和获取
首先需要在master机器的file_roots 下建一个_modules文件夹,里面放.py 文件,也就是自定义模块
建立目录,编写文件
在这里插入图片描述
vim my_grains.py
saltstack之grains(静态数据)+pillar(动态参数) jinja模板_第7张图片
py文件里面要加return 返回值
(8)在server1上测试,对_modules里面的文件同步到minion
在这里插入图片描述
在server2缓存目录利用tree工具查看
saltstack之grains(静态数据)+pillar(动态参数) jinja模板_第8张图片
同步grains给server2
在这里插入图片描述
saltstack之grains(静态数据)+pillar(动态参数) jinja模板_第9张图片
在server2上发现了扩展模块
saltstack之grains(静态数据)+pillar(动态参数) jinja模板_第10张图片
salt '’ grains.ls #列出grains的所有key
salt ‘
’ grains.items # 查看所有grains信息,查看所有item
salt ‘*’ grains.item fqdn #查看单个item

grains的一些用法
[root@server1 salt]# salt server2 grains.item ipv4 ##查看server2的ipv4的信息
server2:

ipv4:
- 127.0.0.1
- 172.25.15.2
[root@server1 salt]# salt server2 grains.item uuid ##查看server2的uuid
server2:

uuid:
026611d5-381c-42ab-bb83-e307d4e89b1a
[root@server1 salt]# salt server2 grains.item os ##查看server2的os
server2:

os:
RedHat
[root@server1 salt]# salt -G ‘os:RedHat’ test.ping ##对系统为RedHat的主机进行test.ping方法
server2:
True
server3:
True
server1:
True
[root@server1 ~]# salt -G ‘host:server2’ cmd.run hostname
#对host为server2的用户执行shell命令hostname
server2:
server2

grains在top FILE中的使用案例(通过匹配不同主机执行不同脚本:
在server4上写grains文件,然后重启服务minion
在这里插入图片描述
在server1上查看grains
saltstack之grains(静态数据)+pillar(动态参数) jinja模板_第11张图片
写top.sls然后推
saltstack之grains(静态数据)+pillar(动态参数) jinja模板_第12张图片
saltstack之grains(静态数据)+pillar(动态参数) jinja模板_第13张图片
saltstack之grains(静态数据)+pillar(动态参数) jinja模板_第14张图片
saltstack之grains(静态数据)+pillar(动态参数) jinja模板_第15张图片
以上则是通过匹配不同主机执行不同脚本

3.pillar,动态数据
(1)在master节点上面设置
在这里插入图片描述
在这里插入图片描述
systemctl restart salt-master.service
在这里插入图片描述
在这里插入图片描述
saltstack之grains(静态数据)+pillar(动态参数) jinja模板_第16张图片
在这里插入图片描述
base:
’:
- web.vars
全局推一个web/vars.sls的脚本
saltstack之grains(静态数据)+pillar(动态参数) jinja模板_第17张图片
刷新所有节点,获取pillar信息
salt '
’ saltutil.refresh_pillar
salt ‘’ pillar.items
saltstack之grains(静态数据)+pillar(动态参数) jinja模板_第18张图片
[root@server1 pillar]# salt ‘server2’ pillar.items
[root@server1 pillar]# salt ‘server3’ pillar.items
[root@server1 pillar]# salt ‘server4’ pillar.items
saltstack之grains(静态数据)+pillar(动态参数) jinja模板_第19张图片
[root@server1 pillar]# salt '
’ pillar.items
[root@server1 pillar]# salt -I ‘webserver:httpd’ test.ping
[root@server1 pillar]# salt -I ‘webserver:nginx’ test.ping
[root@server1 pillar]# salt -I ‘webserver:haproxy’ test.ping
saltstack之grains(静态数据)+pillar(动态参数) jinja模板_第20张图片
saltstack之grains(静态数据)+pillar(动态参数) jinja模板_第21张图片

grains与pillar比较
saltstack之grains(静态数据)+pillar(动态参数) jinja模板_第22张图片

三、jinja模板
Jinja是基于python的模板引擎,在saltstack中我们使用yaml_jinja渲染器来根据模板生产对应的配置文件,对于不同的操作系统或者不同的情况通过jinja可以让配置文件或者操作形成一种模板的编写方式。
通过master端使用jinja模板直接修改minion的http配置文件:
server1(master端)
jinja模块的使用
{% %}:定义
{{ }}:取值
脚本定义固定端口

编辑http安装文件(使用jinja模板)
[root@server1 apache]# vim install.sls
saltstack之grains(静态数据)+pillar(动态参数) jinja模板_第23张图片
修改http配置文件
在这里插入图片描述
执行文件
[root@server1 httpd]# salt server2 state.sls apache.install
saltstack之grains(静态数据)+pillar(动态参数) jinja模板_第24张图片
saltstack之grains(静态数据)+pillar(动态参数) jinja模板_第25张图片
测试
saltstack之grains(静态数据)+pillar(动态参数) jinja模板_第26张图片
利用grains推送
grains
saltstack之grains(静态数据)+pillar(动态参数) jinja模板_第27张图片
在这里插入图片描述
salt server2 state.sls apache.install
saltstack之grains(静态数据)+pillar(动态参数) jinja模板_第28张图片
在这里插入图片描述

你可能感兴趣的:(saltstack之grains(静态数据)+pillar(动态参数) jinja模板)