SaltStack之grains,pillar,jinja

2023-10-09 01:30
文章标签 grains pillar saltstack jinja

本文主要是介绍SaltStack之grains,pillar,jinja,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、grains(存放的是静态数据)

1、grains的概念

  • grains是minion第一次启动的时候采集的静态数据,可以用在salt的模块和其他组件中。其实grains在每次minion启动(重启)的时候都会采集,即向master汇报一次。

  • grains的特性—每次启动汇报、静态决定了它没有pillar灵活,要知道pillar是随时可变的,只要在master端修改了,一般都会立刻生效的。所以grains更适合做一些静态的属性值的采集,例如设备的角色(role),磁盘个数(disk_num)等诸如此类非常固定的属性。
    那么我们就可以得到一个大致的判断,如果你想定义的属性值是经常变化的,那请采用pillar,如果是很固定、不易变的那请用grains。

2、grains的相关命令:

salt server2 grains.items   #查看主机server2的grains详细信息(这里的items相当于字典的key和value)
salt '*' grains.items   #查看所有主机的grains详细信息(这里的items相当于字典的key和value)。值的注意的是:必须写'*',不能写为*salt server2 grains.item fqdn   #查看主机server2的fdqn这个key值对应的value值。
salt '*' grains.item fqdn   #查看所有主机的fqdn这个key值对应的value值。salt server2 grains.ls   #查看主机server2的所有key(针对grains)
salt '*' grains.ls   #查看所有主机的所有key(针对grains)

3、grains的一些用法

[root@server1 ~]# salt server2 grains.item ipv4   #查看主机server2的ipv4的信息
server2:----------ipv4:- 127.0.0.1- 172.25.83.2
[root@server1 ~]# salt '*' grains.item ipv4   #查看所有主机的ipv4信息
server3:----------ipv4:- 127.0.0.1- 172.25.83.3
server2:----------ipv4:- 127.0.0.1- 172.25.83.2
[root@server1 ~]# salt server2 grains.item uuid   #查看主机server2的uuid信息
server2:----------uuid:d8022f9f-9bbd-4ebe-9de7-f2232d17164a
[root@server1 ~]# salt '*' grains.item uuid   #查看所有主机的uuid信息
server3:----------uuid:3a5ac263-f82b-4190-97fb-135245788384
server2:----------uuid:d8022f9f-9bbd-4ebe-9de7-f2232d17164a
[root@server1 ~]# salt server2 grains.item os   #查看主机server2的os信息
server2:----------os:RedHat
[root@server1 ~]# salt '*' grains.item os   #查看所有主机的os信息
server2:----------os:RedHat
server3:----------os:RedHat
[root@server1 ~]# salt -G 'os:Redhat' test.ping   #对系统为Redhat的主机进行test.ping方法
server3:True
server2:True
[root@server1 ~]# salt -G 'host:server2' cmd.run hostname   #对host为server2的用户执行shell命令hostname
server2:server2

4、设置grains的方法
方法1:基于配置文件修改roles

在minion端(server2):进行配置
[root@server2 ~]# vim /etc/salt/minion   #在server2的minion配置文件中打开grains
121 grains:
122   roles:   #相当于字典的key值
123     - httpd   #相当于字典的value值
[root@server2 ~]# systemctl restart salt-minion   #重启后minion会将grains同步到master#在master端(server1):进行测试
[root@server1 ~]# salt server2 grains.item roles   #查看server2端的roles信息
server2:----------roles:- httpd
[root@server1 ~]# salt server2 grains.ls   #查看server2端的所有key信息- roles   #我们会看到key信息中有roles出现
[root@server1 ~]# salt -G 'roles:httpd' cmd.run hostname   #查看角色为httpd的主机对应的主机名
server2:server2

方法2:基于自定义文件的grains

在master端(server1):进行配置
[root@server1 ~]# mkdir /srv/salt/_grains
[root@server1 ~]# cd /srv/salt/_grains/   #该目录的名字必须是_grains
[root@server1 _grains]# vim my_grains.py   #该文件的名字随意给,只要以.py结尾即可
#!/usr/bin/env python
def my_grains():grains={}grains['roles']='nginx'grains['hello']='world'
[root@server1 salt]# salt server3 saltutil.sync_grains    #将server1端将.py文件传给server3#在master端(server1):进行测试
[root@server1 ~]# salt server3 grains.item roles   #查看server3端的roles信息
server3:----------roles:nginx
[root@server1 ~]# salt server3 grains.item hello   #查看server3端的hello信息
server3:----------hello:world
[root@server1 ~]# salt server3 grains.ls   #查看server3端的所有的key- hello- roles

并且在server3的缓存目录下可以看到该文件

在这里插入图片描述
##如果master端定义了grains,同时minion端的配置文件中也指定了grains。minion端配置文件的优先级要高于master端定义的grains。

设置完上面的grains之后,可以修改之前编写的top.sls文件,再次进行高级推送的实验

[root@server1 ~]# cd /srv/salt/
[root@server1 salt]# ls
_grains  httpd  nginx  top.sls  users
[root@server1 salt]# vim top.sls
base:'roles:httpd':- match: grain- httpd.service'roles:nginx':- match: grain- nginx.service
[root@server1 salt]# salt '*' state.highstate

在这里插入图片描述
配置成功

二、pillar(存放的是动态数据)

1、pillar的概念

  • pillar是salt用来分发全局变量到所有minions的一个端口
  • Pillar用于给特定的 minion 定义任何你需要的数据, 这些数据可以被Salt的其他组件使用!安全起见,有些数据是不可以共享出来的,需要指定。比如高度敏感的数据:通过pillar传输的数据会保证只向选定的minions展现,这使得pillar可以作为Salt中管理安全信息的引擎,比如加密的key和密码。

2、pillar的相关命令:

salt server2 pillar.items   #查看主机server2的pillar详细信息(这里的items相当于字典的key和value)
salt '*' pillar.items   #查看所有主机的grains详细信息(这里的items相当于字典的key和value)。值的注意的是:必须写'*',不能写为*salt server2 pillar.item webserver   #查看主机server2的webserver这个key值对应的value值。
salt '*' pillar.item webserver   #查看所有主机的webserver这个key值对应的value值。salt server2 pillar.ls   #查看主机server2的所有key(针对pillar)
salt '*' pillar.ls   #查看所有主机的所有key(针对所有pillar)

3、pillar的一些用法

[root@server1 ~]# salt server2 pillar.item webserver   #查看主机server2的webserver信息
server2:----------webserver:httpd
[root@server1 ~]# salt '*' pillar.item webserver   #查看所有主机的webserver信息
server3:----------webserver:nginx
server2:----------webserver:httpd
[root@server1 ~]# salt -I 'webserver:httpd' test.ping   #对webserver为httpd的主机进行test.ping方法测试
server2:True
[root@server1 ~]# salt -I 'webserver:httpd' cmd.run hostname   #对webserver为httpd的主机执行shell命令hostname
server2:server2

4、pillar的使用
<1>编辑/etc/salt/master打开pillar存储路径

[root@server1 salt]# vim /etc/salt/master844 pillar_roots:845   base:846     - /srv/pillar
[root@server1 salt]# systemctl restart salt-master
[root@server1 ~]# mkdir /srv/pillar

<2>编辑存储pillar键值对文件

[root@server1 ~]# cd /srv/pillar/
[root@server1 pillar]# vim web.sls   #该文件的名字随便起,只要以.sls结尾即可
{% if grains['fqdn'] == 'server2' %}
webserver: httpd
{% elif grains['fqdn'] == 'server3' %}
webserver: nginx
{% endif %}

<3>编辑推送脚本

[root@server1 pillar]# pwd
/srv/pillar
[root@server1 pillar]# vim top.sls
base:'*':- web   #表示的就是之前编辑的web.sls文件

<4>测试:

[root@server1 ~]# salt '*' pillar.items   #查看所有主机的pillar信息
server3:----------webserver:nginx
server2:----------webserver:httpd
[root@server1 ~]# salt server2 pillar.items   #查看主机server2的pillar信息
server2:----------webserver:httpd
[root@server1 ~]# salt server2 pillar.ls   #查看主机server2的所有key(针对pillar)
server2:- webserver
[root@server1 ~]# salt server2 pillar.item webserver   #查看主机server2的key值为webserver对应的value值
server2:----------webserver:httpd
[root@server1 ~]# salt -I 'webserver:httpd' test.ping   #对webserver这个key值对应的value值为httpd的主机进行test.ping的方法。
server2: True

##如果命令"salt -I ‘wervserver:httpd’ test.ping"测试失败,使用下面的命令进行刷新

[root@server1 ~]# salt '*' saltutil.refresh_pillar   #刷新pillar数据到所有主机
[root@server1 ~]# salt server2 saltutil.refresh_pillar   #刷新pillar数据到server2主机

三、grains和pillar的区别

  • grains存储的是静态、不常变化的内容,pillar则相反
  • grains是存储在minion本地,而pillar存储在master本地
  • minion有权限操作自己的grains值,如增加、删除,但minion只能查看自己的pillar,无权修改

四、jinja模块的使用方法

<1>部署脚本:在server1的httpd.service中编写jinja模版

[root@server1 ~]# cd /srv/salt/httpd/
[root@server1 httpd]# ls
files  install.sls  service.sls
[root@server1 httpd]# vim files/httpd.conf42 Listen {{ port }}
[root@server1 httpd]# vim service.sls
include:- httpd.install/etc/httpd/conf/httpd.conf:file.managed:- source: salt://httpd/files/httpd.conf- template: jinja   #新添加的内容port: 8888   #新添加的内容httpd-service:service.running:- name: httpd- enable: False- reload: Truewatch:- file: /etc/httpd/conf/httpd.conf

<2>执行推送

[root@server1 httpd]# salt server2 state.sls httpd.service

在这里插入图片描述
<3>minion端查看,开启8888端口,启动成功

在这里插入图片描述
2、httpd服务只监听本机
<1>部署脚本

[root@server1 httpd]# pwd
/srv/salt/httpd
[root@server1 httpd]# vim files/httpd.conf  
42 Listen {{ host }}:{{ port }}   #修改的内容
[root@server1 httpd]# vim service.sls 
include:- httpd.install/etc/httpd/conf/httpd.conf:file.managed:- source: salt://httpd/files/httpd.conf- template: jinjaport: 8888host: 172.25.83.2   #新增加的内容httpd-service:service.running:- name: httpd- enable: False- reload: Truewatch:- file: /etc/httpd/conf/httpd.conf

<2>执行推送

[root@server1 httpd]# salt server2 state.sls httpd.service

在这里插入图片描述
<3>minion端查看,开启172.25.83.2:8888端口,启动成功
在这里插入图片描述
3、server2监听172.25.83.2,server3监听172.25.83.3。
<1>部署脚本

[root@server1 httpd]# vim files/httpd.conf42 Listen {{ host }}:{{ port }}
[root@server1 httpd]# vim service.sls
include:- httpd.install/etc/httpd/conf/httpd.conf:file.managed:- source: salt://httpd/files/httpd.conf- template: jinjaport: 8888host: {{ grains['ipv4'][-1] }}   #修改的内容httpd-service:service.running:- name: httpd- enable: False- reload: Truewatch:- file: /etc/httpd/conf/httpd.conf

<2>执行推送

[root@server1 httpd]# salt '*' state.sls httpd.service

<3>minion端查看,server2上开启172.25.83.2:8888端口,server3上开启172.25.83.3:8888端口

(因为server1端的service.sls文件中指定的是当/etc/httpd/conf/httpd.conf文件发生变化,才触发触发器,重载httpd服务。而修改监听主机需要的是重启httpd服务,所以这里需要在minion端(server2和server3)重启httpd服务)
在这里插入图片描述
在这里插入图片描述4、将变量定义在httpd.conf文件中
<1>部署脚本

[root@server1 httpd]# vim files/httpd.conf 42 Listen {{ grains['ipv4'][-1] }}:{{ port }}   #修改的内容
[root@server1 httpd]# vim service.sls 
include:- httpd.install/etc/httpd/conf/httpd.conf:file.managed:- source: salt://httpd/files/httpd.conf- template: jinjaport: 8888   #删除下面一行host的内容httpd-service:service.running:- name: httpd- enable: False- reload: Truewatch:- file: /etc/httpd/conf/httpd.conf

<2>执行推送

[root@server1 httpd]# salt '*' state.sls httpd.service

<3>minion端查看,server2上开启172.25.83.2:8888端口,server3上开启172.25.83.3:8888端口

在这里插入图片描述
在这里插入图片描述
5、使用pillar类型的变量
<1>部署脚本

[root@server1 httpd]# vim files/httpd.conf42 Listen {{ host }}:{{ port }}
[root@server1 httpd]# cd /srv/pillar/
[root@server1 pillar]# ls
top.sls  web.sls
[root@server1 pillar]# vim web.sls
{% if grains['fqdn'] == 'server2' %}
webserver: httpd
IP: 172.25.83.2
{% elif grains['fqdn'] == 'server3' %}
webserver: nginx
IP: 172.25.83.3
{% endif %}
[root@server1 pillar]# cd /srv/salt/httpd/
[root@server1 httpd]# ls
files  install.sls  service.sls
[root@server1 httpd]# vim service.sls
include:- httpd.install/etc/httpd/conf/httpd.conf:file.managed:- source: salt://httpd/files/httpd.conf- template: jinjaport: 8888host: {{ pillar['IP'] }}   #修改的内容httpd-service:service.running:- name: httpd- enable: False- reload: Truewatch:- file: /etc/httpd/conf/httpd.conf

<2>执行推送

[root@server1 httpd]# salt '*' state.sls httpd.service

<3>minion端查看,server2上开启172.25.83.2:8888端口,server3上开启172.25.83.3:8888端口

在这里插入图片描述
在这里插入图片描述
6、将变量定义在httpd.conf文件中

<1>部署脚本

[root@server1 httpd]# vim files/httpd.conf42 Listen {{ pillar['IP'] }}:{{ port }}   #修改的内容
[root@server1 httpd]# cd /srv/pillar/
[root@server1 pillar]# ls
top.sls  web.sls
[root@server1 pillar]# vim web.sls
{% if grains['fqdn'] == 'server2' %}
webserver: httpd
IP: 172.25.83.2
{% elif grains['fqdn'] == 'server3' %}
webserver: nginx
IP: 172.25.83.3
{% endif %}
[root@server1 pillar]# cd /srv/salt/httpd/
[root@server1 httpd]# ls
files  install.sls  service.sls
[root@server1 httpd]# vim service.sls
include:- httpd.install/etc/httpd/conf/httpd.conf:file.managed:- source: salt://httpd/files/httpd.conf- template: jinjaport: 8888   #删除下面一行host的内容httpd-service:service.running:- name: httpd- enable: False- reload: Truewatch:- file: /etc/httpd/conf/httpd.conf

<2>执行推送

[root@server1 httpd]# salt '*' state.sls httpd.service

<3>minion端查看,server2上开启172.25.83.2:8888端口,server3上开启172.25.83.3:8888端口
在这里插入图片描述
在这里插入图片描述
7、使用import的方法定义变量
<1>部署脚本

[root@server1 ~]# cd /srv/salt/httpd/
[root@server1 httpd]# ls
files  install.sls  service.sls
[root@server1 httpd]# vim lib.sls
{% set host = '172.25.83.2' %}
[root@server1 httpd]# vim files/httpd.conf 
1 {% from 'httpd/lib.sls' import host %}
43 Listen {{ host }}:{{ port }}
[root@server1 httpd]# vim service.sls 
include:- httpd.install/etc/httpd/conf/httpd.conf:file.managed:- source: salt://httpd/files/httpd.conf- template: jinjaport: 8888httpd-service:service.running:- name: httpd- enable: False- reload: Truewatch:- file: /etc/httpd/conf/httpd.conf

<2>执行推送

[root@server1 httpd]# salt server2 state.sls httpd.service

在这里插入图片描述
<3>minion端查看,server2上开启172.25.83.2:8888端口
在这里插入图片描述

这篇关于SaltStack之grains,pillar,jinja的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/169377

相关文章

SaltStack

SaltStack 官方文档 1.简介 作用:批量处理状态管理(配置管理)事件驱动(通过事件触发操作)管理私有云/公有云yum仓库:http://repo.saltstack.com 安装1.master和minionrpm --import https://repo.saltproject.io/py3/redhat/7/x86_64/3004/SALTSTACK-GPG-KEY.pubcu

saltstack执行模块

(1)master中编写自定义模块 [root@server1 ~]# mkdir /srv/salt/_modules -p[root@server1 ~]# cd /srv/salt/_modules/[root@server1 _modules]# vim my_disk.py#!/use/bin/env pythondef df():return __salt__['cmd.ru

saltstack实现一键部署keepalived+haproxy的高可用负载均衡集群

配置环境 主机名ip服务server1172.25.1.1salt-master、salt-minion haproxy、keepalivedserver2172.25.1.2salt-minion , httpdserver3172.25.1.3salt-minion , nginxserver4172.25.1.4salt-minion , haproxy、keepalived 此文章

saltstack中grains和pillar的用法

SaltStack_Grains Grains 1.什么是grains:(静态数据,minion启动时采集) Grains Static bits of information that a minioncollects about the system when the minion first starts. The grains interface is made available t

saltstack Pillar

Pillar数据是与特定minion关联的,也就是说每一个minion都只能看到自己的数据,所以Pillar可以用来传递敏感数据 定义Pillar数据 master配置文件中定义 Pillar使用与State相似的SLS文件。Pillar文件放在master配置文件中pillar_roots定义的目录下 vim /etc/salt/master......pillar_roots

saltstack 扩展module

在master上创建/srv/salt/_modules/目录 添加扩展文件 vim /srv/salt/_modules/hello.py# -*- coding: utf-8 -*-def create(msg):return 'Command: "{0}" completed successfully!'.format(msg) 同步模块 salt '*' saltutil.sync

借助saltstack获取window最新一次的补丁更新时间

结果验证,如下命令可以实现。 salt 'TIBERX' cmd.run "wmic qfe list full" | grep "InstalledOn" | awk -F'=' '{print$2}' | awk -F'/' '{print$3,$1,$2}' | sort | awk 'END {print}'

Window的saltstack连接不稳定的问题解决

saltstack服务端IP调整后 重新安装了服务端。发现有部分Window的被控制端连接不稳定。 经过试验,解决方法如下: 1)重新启动Window客户端; 2)再服务端进入/etc/salt/pki/master/minions ,删除那条WINDOS客户端的认证文件; 3)重启服务端; 4)运行salt-key -a [WINDOW客户端名] 5)测试salt "*"

saltstack的api安装以及使用解释

首先,贴上官方地址:https://docs.saltstack.cn/ salt,一种全新的基础设施管理方式,部署轻松,在几分钟内可运行起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯。 salt底层采用动态的连接总线, 使其可以用于编配, 远程执行, 配置管理等等. 一、什么是saltstack 什么是saltstack• Saltstack是基于python

Saltstack 最大打开文件数问题之奇怪的 8192

哈喽大家好,我是咸鱼。 今天分享一个在压测过程中遇到的问题,当时排查这个问题费了我们好大的劲,所以我觉得有必要写一篇文章来记录一下。 问题出现 周末在进行压测的时候,测试和开发的同事反映压测有问题,请求打到 A 服务上被拒绝了。 我们登录服务器查看 A 服务的日志,发现频繁地报 Too many open files 错误,可以看到压测的时候该进程要处理大量的 socket,导致打开的文件