grains是Saltstack最重要的组件之一,grains的作用是收集被控主机的基本信息,这些信息通常都是一些静态的数据,包括CPU、内核、操作系统、虚拟化等,在服务器端可以根据这些信息进行灵活定制,管理员可以利用这新信息对不同业务进行个性化配置。

官网提供的用来区分不同操作系统的示例如下(采用jinja模板):

{% if grains['os'] == 'Ubuntu' %}
host: {{ grains['host'] }}
{% elif grains['os'] == 'CentOS' %}
host: {{ grains['fqdn'] }}
{% endif %}

  示例中CentOS发行版主机将被 "host: {{ grains['fqdn'] }}"匹配,以主机SN100-128(centOS6.4)为例,最终得到"host:SN100-128"。同时,命令行的匹配操作系统发行版本为CentOS的被控端可以通过-G参数来过滤,如salt -G 'os:CentOS' test.ping。

[root@localhost~]# salt -G 'os:CentOS' test.ping
SN100-128:
True
SN100-129:
True
SN100-130:
True

(1) grains常用操作命令:

#获取主机的grains项信息:

[root@localhost~]# salt 'SN100-128' grains.ls
SN100-128:
- SSDs
- biosreleasedate
- biosversion
- cpu_flags
- cpu_model
- cpuarch
- domain
- fqdn
- fqdn_ip4
- fqdn_ip6
- gpus
- host
- hwaddr_interfaces
- id
- init
- ip4_interfaces
- ip6_interfaces
- ip_interfaces
- ipv4
- ipv6
- kernel
- kernelrelease
- locale_info
- localhost
- lsb_distrib_codename
- lsb_distrib_id
- lsb_distrib_release
- machine_id
- manufacturer
- master
- mdadm
- mem_total
- nodename
- num_cpus
- num_gpus
- os
- os_family
- osarch
- oscodename
- osfinger
- osfullname
- osmajorrelease
- osrelease
- osrelease_info
- path
- productname
- ps
- pythonexecutable
- pythonpath
- pythonversion
- saltpath
- saltversion
- saltversioninfo
- selinux
- serialnumber
- server_id
- shell
- virtual
- zmqversion

获取主机单项grains数据:

 #获取操作系统发行版本.
[root@localhost~]# salt 'SN100-128' grains.item os
SN100-128:
----------
os:
CentOS
#获取操作系统的内核信息.
[root@localhost~]# salt 'SN100-128' grains.item kernel
SN100-128:
----------
kernel:
Linux #获取操作系统的selinux信息
[root@localhost~]# salt 'SN100-128' grains.item selinux
SN100-128:
----------
selinux:
----------
enabled:
False
enforced:
Disabled

#salt '*' grains.item os //返回键值对

#salt '*' grains.get os  //返回值

获取主机id为'SN100-128'的所有grains键及值信息。

[root@localhost~]# salt 'SN100-128' grains.items
SN100-128:
----------
SSDs:
biosreleasedate:
04/14/2014
biosversion:
6.00
cpu_flags:
- fpu - vme - de - pse - tsc - msr - pae - mce - cx8 - apic - sep - mtrr - pge - mca - cmov - pat - pse36
cpu_model:
Intel(R) Xeon(R) CPU E5-2650 v3 @ 2.30GHz
cpuarch:
x86_64
domain:
fqdn:
TestOnlyMPAPP
fqdn_ip4:
- 10.10.100.128
- 127.0.0.1
fqdn_ip6:
gpus:
|_
----------
model:
SVGA II Adapter
vendor:
unknown
host:
TestOnlyMPAPP
hwaddr_interfaces:
----------
eth1:
00:50:56:87:b1:54
lo:
00:00:00:00:00:00
id:
SN100-128
init:
upstart
ip4_interfaces:
----------
eth1:
- 10.10.100.128
lo:
- 127.0.0.1
ip6_interfaces:
----------
eth1:
- fe80::250:56ff:fe87:b154
lo:
- ::1
ip_interfaces:
----------
eth1:
- 10.10.100.128
- fe80::250:56ff:fe87:b154
lo:
- 127.0.0.1
- ::1
ipv4:
- 10.10.100.128
- 127.0.0.1
ipv6:
- ::1
- fe80::250:56ff:fe87:b154
kernel:
Linux
kernelrelease:
2.6.32-431.el6.x86_64
locale_info:
----------
defaultencoding:
UTF8
defaultlanguage:
zh_CN
detectedencoding:
UTF-8
localhost:
TestOnlyMPAPP
lsb_distrib_codename:
Final
lsb_distrib_id:
CentOS
lsb_distrib_release:
6.5
machine_id:
bcc4f9ad2d40506966ce2b1400000014
manufacturer:
VMware, Inc.
master:
10.10.100.127
mdadm:
mem_total:
8001
nodename:
TestOnlyMPAPP
num_cpus:
2
num_gpus:
1
os:
CentOS
os_family:
RedHat
osarch:
x86_64
oscodename:
Final
osfinger:
CentOS-6
osfullname:
CentOS
osmajorrelease:
6
osrelease:
6.5
osrelease_info:
- 6
- 5
path:
/sbin:/usr/sbin:/bin:/usr/bin
productname:
VMware Virtual Platform
ps:
ps -efH
pythonexecutable:
/usr/bin/python2.6
pythonpath:
- /usr/bin
- /usr/lib64/python26.zip
- /usr/lib64/python2.6
- /usr/lib64/python2.6/plat-linux2
- /usr/lib64/python2.6/lib-tk
- /usr/lib64/python2.6/lib-old
- /usr/lib64/python2.6/lib-dynload
- /usr/lib64/python2.6/site-packages
- /usr/lib64/python2.6/site-packages/gst-0.10
- /usr/lib64/python2.6/site-packages/gtk-2.0
- /usr/lib64/python2.6/site-packages/webkit-1.0
- /usr/lib/python2.6/site-packages
- /usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info
pythonversion:
- 2
- 6
- 6
- final
- 0
saltpath:
/usr/lib/python2.6/site-packages/salt
saltversion:
2015.5.8
saltversioninfo:
- 2015
- 5
- 8
- 0
selinux:
----------
enabled:
False
enforced:
Disabled
serialnumber:
VMware-42 07 95 36 bc 00 ee bd-bc 79 77 5c 81 14 35 b5
server_id:
295812205
shell:
/bin/sh
virtual:
VMware
zmqversion:
3.2.5

(2) 定义grains数据:

定义grains数据的方法有两种,其中一种为在被控端主机定制配置文件,另一种是通过主控端扩展模块API实现,区别是模块更灵活,可以通过python编程动态定义,而配置文件只适合相对固定的键与值。下面分别举例说明。

1.被控端主机定制grains数据

SSH登录一台被控主机,如SN100-128,配置文件定制的路径为/etc/salt/minion,参数为default_include: minion.d/*.conf,具体操作如下:

【/etc/salt/minion.d/hostinfo.conf】

grains:
roles:
- webserver
- memcache
deployment: datacenter4
cabinet: 13

  重启被控主机salt-minion服务,使之生效:service salt-minion restart。验证结果在主控端主机运行:salt 'SN100-128' grains.item roles deployment cabinet,观察配置的键与值,如下所示。

[root@localhost~]# salt 'SN100-128' grains.item roles deployment cabinet
SN100-128:
----------
cabinet:
13
deployment:
datacenter4
roles:
- webserver
- memcache

或者也可以这样定义

vim /etc/salt/grains

cloud: openstack
test: salt /etc/init.d/salt-minion restart 或者执行同步 salt '*' saltutil.sync_grains salt -G 'cloud:openstack' test.ping

2.主控端扩展模块定制grains数据

  首先在主控端编写python代码,然后将该python文件同步到被控主机,最后刷新生效(即编译python源码文件生成字节码pyc)。在主控端bash目录(见/etc/salt/master配置文件的file_roots项,默认的bash配置在/srv/salt)下生成_grains目录,执行install -d /srv/salt/_grains开始编写代码,实现获取被控主机系统允许最大打开文件数(ulimit -n)的grains数据。

【/srv/salt/_grains/sysprocess.py】

#!/usr/bin/env python
#coding:utf-8 import os,sys,commands
def Granins_openfile():
"""
os max open file of grains value
"""
grains = {}
#init default value
_open_file=65535
try:
getulimit=commands.getstatusoutput('source /etc/profile;ulimit -n')
except Exception,e:
pass
if getulimit[0] == 0:
_open_file=int(getulimit[1])
grains['max_open_file'] = _open_file
return grains
Granins_openfile()

上面代码的说明如下。

 grains_openfile()定义一个获取最大打开文件数的函数,函数名称没有要求,符合python的函数命名规则即可;

 grains = {} 初始化一个grains字典,变量名一定要用grains,以便Saltstack识别;

 grains['max_open_file'] = _open_file 将获取的linux ulimit -n 的结果值赋予grains['max_open_file'],其中"max_open_file"就是grains的项,_open_file就是grains的值。

 最后同步模块到指定被控端主机并刷新生效,因为grains比较合适采集静态类的数据,比如硬件,内核信息等。当有动态类的功能需求时,需要提行刷新,具体操作如下:

  同步模块 salt 'SN100-128' saltutil.sync_all ,看看 "SN100-128"主机发生了什么?文件已经同步到minion cache目录中,如下:

/var/cache/salt/minion/extmods/grains/sysprocess.py
/var/cache/salt/minion/files/base/_grains/sysprocess.py

/var/cache/salt/minion/extmods/grains/为扩展模块文件最终存放位置,刷新模块后将在同路径下生成字节码pyc;

/var/cache/salt/minion/files/base/_grains/为临时存放位置。

 刷新模块salt 'SN100-128' sys.reload_modules,再看看主机发生了什么变化?在/var/cache/salt/minion/extmods/grains/位置多了一个编译后的字节码文件sysprocess.pyc文件,为python可执行的格式。

/var/cache/salt/minion/extmods/grains/sysprocess.py
/var/cache/salt/minion/extmods/grains/sysprocess.pyc
/var/cache/salt/minion/files/base/_grains/sysprocess.py

效验结果为可以在主控端查看grains信息,执行 salt 'SN100-128' grains.item max_open_file,结果显示"max_open_file:1024",这就是前面定制的主机grains信息。

[root@localhost~]# salt 'SN100-128' grains.item max_open_file
SN100-128:
----------
max_open_file:
1024

grains在top.sls中的使用:

'roles: nginx':
- match:grain //声明使用grain
- init.pkg //执行init.pkg模块 

  

  

  

Saltstack grains组件的更多相关文章

  1. Linux centosVMware 自动化运维认识自动化运维、启动salt相关服务、saltstack配置认证、salt-key命令用法、saltstack远程执行命令、saltstack - grains、saltstack – pillar

    一.认识自动化运维 传统运维效率低,大多工作人为完成 传统运维工作繁琐,容易出错 传统运维每日重复做相同的事情 传统运维没有标准化流程 传统运维的脚本繁多,不能方便管理 自动化运维就是要解决上面所有问 ...

  2. Saltstack系列4:Saltstack之Grains组件

    grains说明 grains是Saltstack最重要的组件之一,grains的作用是手机被控主机的基本信息,这些信息通常都是一些静态类的数据,包括CPU.内核.操作系统.虚拟化等,在服务器端可以根 ...

  3. Saltstack pillar组件

     pillar组件 pillar也是Saltstack最重要的组件之一,其作用是定义与被控主机相关的任何数据,定义好的数据可以被其他组件使用,如模板.state.API等.在pillar中定义的数据与 ...

  4. salt之grains组件

    grains是saltstack最重要的组件之一,作用是收集被控主机的基本信息,这些信息通常都是一些静态类的数据,包括CPU.内核.操作系统.虚拟化等,在服务器端可以根据这些信息进行灵活定制,管理员可 ...

  5. SaltStack Grains 详解

    简介 Grains 是SaltStack 的重要组件之一.主要记录minion的静态信息,比如CPU,内存,磁盘,网络信息等.Grains信息是minion启动时汇报给Master的. 刷新grain ...

  6. saltstack grains

    saltstack的grains类似于ansible的setup模块,主要作用为手机客户端的主机基本信息(cpu,内核,os,virtual等),定义在客户端 [root@k8s_master ~]# ...

  7. SaltStack Grains 和 Pillar

    Grains: (1) grains 是服务器的一系列粒子信息,也就是服务器的一系列物理,软件环境信息(2) grains 是 minion 启动时收集到的一些系统信息,比如操作系统版本.内核版本.C ...

  8. Saltstack管理对象属性之grains和pillar组件

    Grains组件 Grains是saltstack记录minion的一些静态信息组件,可以简单的理解为grains里面记录着每台minion的一些常用的属性,比如cpu.内存.磁盘.网络信息等,可以通 ...

  9. SaltStack入门篇(三)之数据系统Grains、Pillar

    1.什么是Grains? Grains是saltstack的组件,用于收集salt-minion在启动时候的信息,又称为静态信息.可以理解为Grains记录着每台Minion的一些常用属性,比如CPU ...

随机推荐

  1. 51nod 1422(强行YY)

    1422 沙拉酱前缀 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 沙拉酱非常喜欢数字序列.这正是他要弄一个关于 ...

  2. Activiti 学习笔记(2016-8-30)

    前言 不管学习什么,都必须对知识体系中专有的名词或者特定的语言组织方式 有所了解. 本文仅记录学习过程中的笔记,参考意义因人而定,不保证所言全部正确. 学习方式,百度传课的视频<权威Activi ...

  3. C#-面向对象——如何调用使用类 普通方法、静态方法的使用

    类的调用使用 新建的类的命名空间与主函数的命名空间默认相同,如果不同,则主函数无法调用自定义类 比如: 只需要进行引用即可 如果不知道方法的类名,可以右键鼠标 → 解析 → using 即可 普通方法 ...

  4. jquery $.each 和for怎么跳出循环终止本次循环

    1.for循环中我们使用continue:终止本次循环计入下一个循环,使用break终止整个循环. 2.而在jquery中 $.each则对应的使用return true 和return false. ...

  5. filter,map,reduce,lambda(python3)

    1.filter filter(function,sequence) 对sequence中的item依次执行function(item),将执行的结果为True(符合函数判断)的item组成一个lis ...

  6. Python3 连接Mysql

    代码: #!/usr/bin/env python # encoding: utf-8 """ @author: 侠之大者kamil @file: mysql_test. ...

  7. ml的线性回归应用(python语言)

    线性回归的模型是:y=theta0*x+theta1   其中theta0,theta1是我们希望得到的系数和截距. 下面是代码实例: 1. 用自定义数据来看看格式: # -*- coding:utf ...

  8. 【BZOJ-4059】Non-boring sequences 线段树 + 扫描线 (正解暴力)

    4059: [Cerc2012]Non-boring sequences Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 440  Solved: 16 ...

  9. .net社区

    英文社区: 名称:MSDN 地址:http://msdn.microsoft.com/zh-cn/default.aspx 描述:这个网站是大家学.Net的初始网站,也是.net方面官方和权威的资料, ...

  10. HDU2203 亲和串

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...