1. 主机规划

Grains文档

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

注意事项

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

2. Grains基本信息

Saltstack 数据系统
Grains (谷粒)
Pillar (柱子) Grains:静态数据 当Minion启动的时候收集的Minion本地的相关信息
如:操作系统版本,内核版本,CPU,内存,硬盘,设备型号,序列号
、信息查询 【资产管理】★★★★★
、用于目标选择 salt -G 'os:CentOS' test.ping ★★★★★
、配置管理中使用 刷新grains 【这样修改grains信息不用重启salt-minion 也能刷新】
不然需要重启salt-minion
salt '*' saltutil.sync_grains 开发一个Grains:
Python:写一个Python脚本,返回一个字典就可以了。
可以通过

salt 'salt01' saltutil.sync_grains   【推荐】
或salt 'salt01' saltutil.sync_all 【范围太广,不推荐使用】
或salt 'salt01' state.highstate 【执行高级状态时同步,不建议使用】
或salt 'salt01' saltutil.refresh_modules 【只刷新客户端,服务端向客户端分发的不刷新,比如修改了grains的py脚本时,不会推送到minion端 不建议使用】
或salt 'salt01' saltutil.refresh_grains 【只刷新客户端,服务端向客户端分发的不刷新,比如修改了grains的py脚本时,不会推送到minion端 不建议使用】 将配置同步到minion端
如果做了更改也可以使用
salt 'salt01' sys.reload_modules

3. Grains优先级信息

经验证优先级如下:
、 salt系统自带信息 【优先级最低】
、 自编写Python脚本 备注:在指定目录下存放py脚本
、 /etc/salt/grains 备注:该文件不存在,需要自己创建
、 /etc/salt/minion 【优先级最高】

推荐使用 自编写py脚本定义,这样自定义的grains只需要在master端维护即可,减少后期维护成本。

下文内容就是根据优先级写的。

4. Salt自带Grains 信息

4.1. grains条目项信息

 [root@salt100 salt]# salt 'salt01' grains.ls  # 查看salt01机器有哪些grains条目项信息
………………

4.2. grains全部信息

 [root@salt100 salt]# salt 'salt01' grains.items  # 查看salt01机器有哪些grains信息
salt01:
----------
SSDs:
biosreleasedate:
//
biosversion:
6.00
cpu_flags:
- fpu
- vme
- de
- pse
- tsc
- msr
- pae
- mce
- cx8
- apic
- sep
- mtrr
- pge
- mca
- cmov
- pat
- pse36
- clflush
- mmx
- fxsr
- sse
- sse2
- ss
- ht
- syscall
- nx
- pdpe1gb
- rdtscp
- lm
- constant_tsc
- arch_perfmon
- nopl
- xtopology
- tsc_reliable
- nonstop_tsc
- eagerfpu
- pni
- pclmulqdq
- ssse3
- fma
- cx16
- pcid
- sse4_1
- sse4_2
- x2apic
- movbe
- popcnt
- tsc_deadline_timer
- aes
- xsave
- avx
- f16c
- rdrand
- hypervisor
- lahf_lm
- abm
- 3dnowprefetch
- fsgsbase
- tsc_adjust
- bmi1
- avx2
- smep
- bmi2
- invpcid
- mpx
- rdseed
- adx
- smap
- clflushopt
- xsaveopt
- xsavec
- arat
cpu_model:
Intel(R) Core(TM) i5-8250U CPU @ .60GHz
cpuarch:
x86_64
disks:
- sda
- sr0
dns:
----------
domain:
ip4_nameservers:
- 10.0.0.2
- 223.5.5.5
ip6_nameservers:
nameservers:
- 10.0.0.2
- 223.5.5.5
options:
search:
sortlist:
domain:
fqdn:
salt01
fqdn_ip4:
- 172.16.1.11
fqdn_ip6:
- fe80::20c:29ff:fe95:1b84
- fe80::20c:29ff:fe95:1b7a
gid: gpus:
|_
----------
model:
SVGA II Adapter
vendor:
unknown
groupname:
root
host:
salt01
hwaddr_interfaces:
----------
eth0:
:0c:::1b:7a
eth1:
:0c:::1b:
lo:
:::::
id:
salt01
init:
systemd
ip4_gw:
10.0.0.2
ip4_interfaces:
----------
eth0:
- 172.16.1.11
eth1:
- 10.0.0.11
lo:
- 127.0.0.1
ip6_gw:
False
ip6_interfaces:
----------
eth0:
- fe80::20c:29ff:fe95:1b7a
eth1:
- fe80::20c:29ff:fe95:1b84
lo:
- ::
ip_gw:
True
ip_interfaces:
----------
eth0:
- 172.16.1.11
- fe80::20c:29ff:fe95:1b7a
eth1:
- 10.0.0.11
- fe80::20c:29ff:fe95:1b84
lo:
- 127.0.0.1
- ::
ipv4:
- 10.0.0.11
- 127.0.0.1
- 172.16.1.11
ipv6:
- ::
- fe80::20c:29ff:fe95:1b7a
- fe80::20c:29ff:fe95:1b84
kernel:
Linux
kernelrelease:
3.10.-.el7.x86_64
kernelversion:
# SMP Fri Apr :: UTC
locale_info:
----------
defaultencoding:
UTF-
defaultlanguage:
en_US
detectedencoding:
UTF-
localhost:
salt01
lsb_distrib_codename:
CentOS Linux (Core)
lsb_distrib_id:
CentOS Linux
machine_id:
5ae5f27014ee438780bf37ae68889471
manufacturer:
VMware, Inc.
master:
salt100
mdadm:
mem_total: nodename:
salt01
num_cpus: num_gpus: os:
CentOS
os_family:
RedHat
osarch:
x86_64
oscodename:
CentOS Linux (Core)
osfinger:
CentOS Linux-
osfullname:
CentOS Linux
osmajorrelease: osrelease:
7.5.
osrelease_info:
-
-
-
path:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
pid: productname:
VMware Virtual Platform
ps:
ps -efHww
pythonexecutable:
/usr/bin/python
pythonpath:
- /usr/bin
- /usr/lib64/python27.zip
- /usr/lib64/python2.
- /usr/lib64/python2./plat-linux2
- /usr/lib64/python2./lib-tk
- /usr/lib64/python2./lib-old
- /usr/lib64/python2./lib-dynload
- /usr/lib64/python2./site-packages
- /usr/lib64/python2./site-packages/gtk-2.0
- /usr/lib/python2./site-packages
pythonversion:
-
-
-
- final
-
saltpath:
/usr/lib/python2./site-packages/salt
saltversion:
2018.3.
saltversioninfo:
-
-
-
-
selinux:
----------
enabled:
False
enforced:
Disabled
serialnumber:
VMware- 4d 5c a8 3c- be 1b 7a
server_id: shell:
/bin/sh
swap_total: systemd:
----------
features:
+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN
version: uid: username:
root
uuid:
86324d56-5c98-3ca8--82be30951b7a
virtual:
VMware
zfs_feature_flags:
False
zfs_support:
False
zmqversion:
4.1.

4.3. 查询grains指定信息

 [root@salt100 ~]# salt 'salt01' grains.item roles  # 没有该项信息,因此只显示key 不显示value
salt01:
----------
roles:
[root@salt100 ~]# salt 'salt01' grains.item os
salt01:
----------
os:
CentOS

5. 自写grains的py脚本

该脚本在salt master端,然后推送到minion端。

5.1. master端编写py脚本

 [root@salt100 salt]# pwd
/srv/salt
[root@salt100 salt]# mkdir _grains # salt指定的位置
[root@salt100 salt]# cd _grains/
[root@salt100 _grains]# vim my_grains.py
#!/usr/bin/env python
# -*- coding:utf- -*- def grains_define():
# initialize a grains dictionary
grains = {}
# 填充信息
grains['roles'] = ["webserver01","memcache01"],
grains['os'] = 'redhat01' # 返回这个字典
return grains

5.2. grains刷新并查看指定信息

在master端执行,并查看grains信息

 [root@salt100 ~]# salt 'salt01' saltutil.sync_grains  # 会推送py脚本到minion端,并刷新grains信息
salt01:
- grains.my_grains
[root@salt100 ~]# salt 'salt01' grains.item roles
salt01:
----------
roles:
|_
- webserver01
- memcache01
[root@salt100 ~]# salt 'salt01' grains.item os
salt01:
----------
os:
redhat01

5.3. 在minion端查看推送过来的文件位置

 [root@salt01 minion]# pwd
/var/cache/salt/minion
[root@salt01 minion]# tree
.
├── accumulator
├── extmods
│ └── grains # 在这个目录下
│ ├── my_grains.py
│ └── my_grains.pyc
├── files
│ └── base
│ ├── _grains
│ │ └── my_grains.py
│ ├── top.sls
│ └── web
│ └── apache.sls
├── highstate.cache.p
├── module_refresh
├── pkg_refresh
├── proc
└── sls.p directories, files

6. 在/etc/salt/grains 中定义grains

注意:

该文件默认不存在,需要自己创建。

6.1. minion端配置修改

在salt01上操作

 [root@salt01 salt]# cat /etc/salt/grains
roles:
- webserver02
- memcache02
os: redhat02

6.2. grains刷新并查看指定信息

在salt100上操作

 [root@salt100 ~]# salt 'salt01' saltutil.sync_grains  # 刷新grains信息
salt01:
[root@salt100 ~]# salt 'salt01' grains.item roles
salt01:
----------
roles:
- webserver02
- memcache02
[root@salt100 ~]# salt 'salt01' grains.item os
salt01:
----------
os:
redhat02

7. 在/etc/salt/minion 中定义grains

生产中不建议使用,因为写在了默认的配置文件中,不利于后期维护。

7.1. minion端配置修改

minion端salt01机器上配置修改

 [root@salt01 salt]# pwd
/etc/salt
[root@salt01 salt]# vim minion
………………
# Custom static grains for this minion can be specified here and used in SLS
# files just like all other grains. This example sets custom grains, with
# the 'roles' grain having two values that can be matched against.
grains:
roles:
- webserver03
- memcache03
os: redhat03
# deployment: datacenter4
# cabinet:
# cab_u: -

7.2. grains刷新并查看指定信息

在master端刷新grains信息,并查看

 [root@salt100 ~]# salt 'salt01' saltutil.sync_grains  # 刷新指定minion的grains信息
salt01:
[root@salt100 ~]# salt 'salt01' grains.item roles
salt01:
----------
roles:
- webserver03
- memcache03
[root@salt100 ~]# salt 'salt01' grains.item os
salt01:
----------
os:
redhat03

8. Grains使用方式

8.1. 查询grains的指定信息

 [root@salt100 salt]# salt 'salt0*' grains.item os  # 通过通配符匹配salt0*  minion端的操作系统信息
salt01:
----------
os:
CentOS
salt03:
----------
os:
CentOS
salt02:
----------
os:
CentOS
[root@salt100 salt]# salt 'salt0*' grains.item ip4_interfaces:eth0 # 多级查询
salt03:
----------
ip4_interfaces:eth0:
- 172.16.1.13
salt01:
----------
ip4_interfaces:eth0:
- 172.16.1.11
salt02:
----------
ip4_interfaces:eth0:
- 172.16.1.12
[root@salt100 salt]# salt 'salt0*' grains.item ip4_interfaces:eth0: # 取列表中的第一个值★★★★★
salt01:
----------
ip4_interfaces:eth0::
172.16.1.11
salt03:
----------
ip4_interfaces:eth0::
172.16.1.13
salt02:
----------
ip4_interfaces:eth0::
172.16.1.12

8.2. 通过grains查询信息

示例1

 [root@salt100 salt]# salt 'salt01' grains.item os
salt01:
----------
os:
CentOS
[root@salt100 salt]# salt -G 'os:CentOS' cmd.run 'echo "zhangliang $(date +%Y)"' # 指定操作系统为CentOS的
salt03:
zhangliang
salt02:
zhangliang
salt01:
zhangliang
salt100:
zhangliang

示例2

 [root@salt100 salt]# salt 'salt01' grains.item ip_interfaces
salt01:
----------
ip_interfaces:
----------
eth0:
- 172.16.1.11
- fe80::20c:29ff:fe95:1b7a
eth1:
- 10.0.0.11
- fe80::20c:29ff:fe95:1b84
lo:
- 127.0.0.1
- ::
[root@salt100 salt]# salt -G 'ip_interfaces:eth0:172.16.1.11' cmd.run 'whoami'
salt01:
root
[root@salt100 salt]# salt -G 'ip_interfaces:eth1:10.0.0.11' cmd.run 'whoami'
salt01:
root

9. 在top file中使用grains

9.1. top.sls编写

 [root@salt100 salt]# pwd
/srv/salt
[root@salt100 salt]# cat top.sls
base:
# 使用通配符 暂时注释掉
# 'salt0*':
# - web.apache
# - web.nginx # 可以有多个
# 指定具体minion
'salt03':
- web.apache
# 使用grains匹配,添加如下几行
'roles:webserver03':
- match: grain
- web.apache

9.2. state.highstate执行

首先通过grains查看salt01和salt02 的roles信息

 [root@salt100 salt]# salt 'salt01' grains.item roles
salt01:
----------
roles:
- webserver03
- memcache03
[root@salt100 salt]# salt 'salt02' grains.item roles
salt02:
----------
roles:

执行结果

 [root@salt100 salt]# salt 'salt01' state.highstate test=True # 执行正常
………………
[root@salt100 salt]# salt 'salt01' state.highstate # 执行正常
………………
[root@salt100 salt]# salt 'salt02' state.highstate test=True # 执行异常【top.file 中没有该匹配】
salt02:
----------
ID: states
Function: no.None
Result: False
Comment: No Top file or master_tops data matches found.
Changes: Summary for salt02
------------
Succeeded:
Failed:
------------
Total states run:
Total run time: 0.000 ms

Saltstack_使用指南04_数据系统-Grains的更多相关文章

  1. Saltstack_使用指南05_数据系统-Pillar

    1. 主机规划 Pillar文档 https://docs.saltstack.com/en/latest/topics/pillar/index.html 注意事项 修改了master或者minio ...

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

    1. 说明 下文的案例是根据上一篇文章进行的修改.因此请优先读取上一章博文内容<Saltstack_使用指南11_配置管理-状态之间依赖关系> 2. 主机规划 salt 版本 [root@ ...

  3. Saltstack_实战指南02_各主机Pillar信息指定

    1. 实战项目GitHub地址 该项目已经放在了GitHub上,地址如下: https://github.com/zhanglianghhh/salt-example-lnmp 2. 主机规划 3. ...

  4. Saltstack_使用指南17_salt-ssh

    1. 主机规划 salt 版本 [root@salt100 ~]# salt --version salt (Oxygen) [root@salt100 ~]# salt-minion --versi ...

  5. Saltstack_使用指南16_syndic

    1. 主机规划 salt 版本 [root@salt100 ~]# salt --version salt (Oxygen) [root@salt100 ~]# salt-minion --versi ...

  6. Saltstack_实战指南01_系统规划

    1. 实战项目GitHub地址 之前<Saltstack_使用指南>详细讲解了saltstack的使用.那么从这节开始实战讲解,当然不会再像之前那样详细说明了.只是讲一些系统规划之类的信息 ...

  7. 2. SaltStack数据系统: Grains、Pillar

    1. SaltStack数据系统 Grains (谷物) Pillar (支柱) 2.Grains Grains存放着Salt命令启动时收集的信息,运行时不收集 2.1  信息查询 收集资产 网卡,i ...

  8. Saltstack数据系统Grains和Pillar(三)

    Saltstack数据系统 分为Grains和Pillar 一.Grains 静态数据,当Minion启动的时候收集的MInion本地的相关信息.(包含操作系统版本.内核版本.CPU.内存.硬盘.设备 ...

  9. SaltStack数据系统-Grains

    上一篇:SaltStack配置管理 granis:谷粒 pillar:柱子 grains是salt的一个组件,存放minion启动时候收集的信息(状态信息) 查看 salt '*' grains.it ...

随机推荐

  1. python 菱形继承问题究极版

    如果只是正常的菱形继承,经典类(python2中最后一个父类不继承object类)是深度优先,即会从左边父类开始一路走到底 新式类(最后一个父类继承了object类)是广度优先,即从左边父类开始继承, ...

  2. 『左偏树 Leftist Tree』

    新增一道例题 左偏树 Leftist Tree 这是一个由堆(优先队列)推广而来的神奇数据结构,我们先来了解一下它. 简单的来说,左偏树可以实现一般堆的所有功能,如查询最值,删除堆顶元素,加入新元素等 ...

  3. asp.net core 系列 20 EF基于数据模型创建数据库

    一.概述 本章使用 Entity Framework Core 构建执行基本数据访问的 ASP.NET Core MVC 应用程序.使用迁移(migrations)基于数据模型创建数据库,是一种cod ...

  4. dotnet core使用IO合并技巧轻松实现千万级消息推送

    之前讲述过多路复用实现单服百万级别RPS吞吐,但在文中有一点是没有说的就是消息IO合并,如果缺少了消息IO合并即使怎样多路复用也很难达到百万级别的请求响毕竟所有应用层面的网络IO读写都是非常损耗性能的 ...

  5. Spring Boot2.0:使用Docker部署Spring Boot

    一.Spring Boot项目添加 Docker 支持1.在pom.xml中添加 Docker 构建插件 <plugins> <!-- Docker maven plugin --& ...

  6. LeetCode专题-Python实现之第7题:Reverse Integer

    导航页-LeetCode专题-Python实现 相关代码已经上传到github:https://github.com/exploitht/leetcode-python 文中代码为了不动官网提供的初始 ...

  7. Java开发知识之Java控制语句

    Java开发知识之Java控制语句 一丶复合语句 不管任何语言都有控制语句 if else if else whie do  while  for .... 首先讲解的是java的复合语句 1.什么是 ...

  8. C#线程安全使用(一)

    关于Task的使用,一直都是半知半解,最近终于有时间详细的看了一遍MSDN,作为备忘录,将心得也记录下来和大家分享. 首先,根据MSDN的描述,Task是FrameWork4引进的新功能,他和ConC ...

  9. Ruby数组(1):基本用法

    数组 Ruby中的数组是一个容器,数组中的每个元素都是一个对象的引用. 注意,Array类中包含了Enumerable模块,所以Enumerable中的方法也都能使用,例如Enumerable中的re ...

  10. SDWebImage源码解析

    但凡经过几年移动开发经验的人去大公司面试,都会有公司问到,使用过哪些第三方,看过他们的源码嘛?而SDWebImage就是经常被面试官和应聘者的提到的.下面将讲述SDWebImage的源码解析以及实现原 ...