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. java多线程(7)---Condition

    Condition 一.Condition概述 在线程的同步时可以使一个线程阻塞而等待一个信号,同时放弃锁使其他线程可以能竞争到锁. 在synchronized中我们可以使用Object的wait() ...

  2. asp.net core系列 26 EF模型配置(实体关系)

    一.概述 EF实体关系定义了两个实体互相关联起来(主体实体和依赖实体的关系,对应数据库中主表和子表关系). 在关系型数据库中,这种表示是通过外键约束来体现.本篇主要讲一对多的关系.先了解下描述关系的术 ...

  3. SpringBoot入门教程(十五)集成Druid

    Druid是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0.DBCP.PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB ...

  4. MHA非root用户搭建测试

    最近一直在瞎搬砖,最大的感触是运维工作难做.不过废话不多说,最近被分配了一项比较有意思的task,尝试着非root用户搭建MHA并测试下能否成功漂移,以下是两天测试和文档编写的成果,分享给各位看客,欢 ...

  5. -1-3 java集合框架基础 java集合体系结构 Collection 常用java集合框架 如何选择集合 迭代器 泛型 通配符概念 Properties 集合 迭代器

    集合又称之为容器存储对象的一种方式 •数组虽然也可以存储对象,但长度是固定的:显然需要可变长度的容器 集合和数组的区别?                 A:长度区别                  ...

  6. springboot情操陶冶-web配置(六)

    本文则针对数据库的连接配置作下简单的分析,方便笔者理解以及后续的查阅 栗子当先 以我们经常用的mybatis数据库持久框架来操作mysql服务为例 环境依赖 1.JDK v1.8+ 2.springb ...

  7. springboot2.0.3源码篇 - 自动配置的实现,发现也不是那么复杂

    前言 开心一刻 女儿: “妈妈,你这么漂亮,当年怎么嫁给了爸爸呢?” 妈妈: “当年你爸不是穷嘛!‘ 女儿: “穷你还嫁给他!” 妈妈: “那时候刚刚毕业参加工作,领导对我说,他是我的扶贫对象,我年轻 ...

  8. 结识hybrid体验这一年

    在这之前虽然看过一些博客介绍 hybrid,但是始终没有具体应用场景,想象的就是我现在做好了一个网站,然后 native 直接在 webview 中打开我的网站,类似浏览器中打开网站一样,头部添加一个 ...

  9. Linux下Oracle client客户端安装

    0.zip格式 (0)下载地址: a.Oracle官网 (1)安装过程: a.将zip文件分别解压到/software/下,放在同一个目录instandclient_11_2/下 b.在/softwa ...

  10. sql删除数据库重复字段的行

    要保留的数据: WITH summary AS ( SELECT p.id, p.customer, p.total, ROW_NUMBER() OVER(PARTITION BY p.custome ...