ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

如何在 Saltstack 组件下收集被控主机的信息?

2021-01-26 21:58:05  阅读:199  来源: 互联网

标签:被控 grains minion root saltstack 组件 Saltstack salt web1group


什么是 grains
grains是Saltstack最重要的组件之一,grains的作用是收集被控主机的基本信息,这些信息通常都是一些静态类数据,包括CPU、内核、操作系统、虚拟化等,在服务器端可以根据这些信息进行灵活定制,管理员可以利用这些信息对于不同的业务进行个性化设置,官方提供:grains就是用来区分不同的minion进行不同的配置,salt '' ,主要就是在'' 里面进行匹配主机的作用。

应用场景
在state中使用 用于配置管理模块

在target中使用,用来匹配minion,例如匹配操作系统使用-G的选项

用于信息查询,grains保存收集到的客户端的详细信息

CentOS发行版主机将被“host: {{ grains['xxx'] }}”匹配,以主机saltstack_web1group_1(CentOS 6.5)为例,最终得到“host: saltstack_web1group_1”。同时命令行的匹配操作系统发行版为CentOS的被控端可以通过-G参数来过滤。


[root@saltstack-master ~]# salt -G 'os:CentOS' test.ping
saltstack_web1group_1:
True
saltstack_web1group_2:
True

grains常用操作命令

匹配内核版本为2.6.32-504.el6.x86_64的minion并执行命令'uname -a'


[root@saltstack-master ~]# salt -G 'kernelrelease:2.6.32-431.el6.x86_64' cmd.run 'uname -a'
saltstack_web1group_1:
Linux saltstack_web1group_1 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
saltstack_web1group_2:
Linux saltstack_web1group_2 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

获取所有minion的grains项信息


[root@saltstack-master ~]# salt '*' grains.ls
saltstack_web1group_1:
- SSDs
- biosreleasedate
- biosversion
- cpu_flags
- cpu_model
- cpuarch
- domain
- fqdn
- fqdn_ip4
- fqdn_ip6
- gpus
- host
--------------忽略部分内容------------------

当然也可以获取主机单项grains数据,如获取操作发行版本。


[root@saltstack-master ~]# salt 'saltstack_web1group_1' grains.item os
saltstack_web1group_1:
----------
os:
CentOS

定义grains数据

定义grains数据的方法有两种,其中一种是在minion定制配置文件,另外一种是通过master扩展模块API实现,区别是模块更灵活,可用过Python编程动态定义,而配置文件只适合相对的固定的key与value。


[root@saltstack-master ~]# salt 'saltstack_web1group_1' grains.items
saltstack_web1group_1:
----------
SSDs:
biosreleasedate:
05/19/2017
biosversion:
6.00
cpu_flags:
- fpu
- vme
- de
--------------忽略部分内容------------------

被控端主机定制grains数据

SSH登录一台被控主机(minion),如SN2013-08-022,配置文件定制的路径为/etc/salt/minion,参数为default_include:minion.d/*conf

创建文件【/etc/salt/minion.d/hostinfo.conf】


[root@saltstack_web1group_1 ~]# cd /etc/salt/minion.d/
[root@saltstack_web1group_1 minion.d]# vim hostinfo.conf
grains:
roles:
- webserver
- memcache
deployment: datacenter4
cabinet: 14
[root@saltstack_web1group_1 minion.d]# service salt-minion restart
Stopping salt-minion daemon: [确定]
Starting salt-minion daemon: [确定]

重启minion服务,验证结果在master上运行:salt 'saltstack_web1group_1' grains.itemroles deployment cabinet,观察配置的key和value。


[root@saltstack-master ~]# salt 'saltstack_web1group_1' grains.item roles deployment cabinet
saltstack_web1group_1:
----------
cabinet:
14
deployment:
datacenter4
roles:
- webserver
- memcache

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

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


[root@saltstack-master ~]# install -d /srv/salt/_grains
[root@saltstack-master ~]# cd /srv/salt/_grains
[root@saltstack-master _grains]# vim grains_openfile.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-

import os,sys,commands

#定义一个获取最大打开文件数的函数,函数名称没有要求,符合python函数命名规则即可
def Grains_openfile():
'''
return os max open file of grains value
'''
grains = {} #初始化一个字典,变量名一定要用grains,以便Saltstack识别

_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 #将获取的ulimit -n的结果进行赋值,其中'max_open_file'就是grains项,——open_file就是grains的值
return grains

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的值。

在主控端同步模块:salt 'saltstack_web1group_1' saltutil.sync_grains 或 salt 'saltstack_web1group_1' saltutil.sync_all,此时文件已经同步到被控端主机以下目录中。


[root@saltstack-master _grains]# salt 'saltstack_web1group_1' saltutil.sync_all
saltstack_web1group_1:
----------
beacons:
grains:
- grains.grains_openfile
modules:
output:
renderers:
returners:
sdb:
states:
utils:
[root@saltstack_web1group_1 minion.d]# ll /var/cache/salt/minion/extmods/grains/
总用量 4
-rw-------. 1 root root 774 3月 20 16:36 grains_openfile.py
[root@saltstack_web1group_1 minion.d]# ll /var/cache/salt/minion/files/base/_grains/
总用量 4
-rw-------. 1 root root 774 3月 20 16:36 grains_openfile.py

/var/cache/salt/minion/extmods/grains/

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

刷新模块salt 'saltstack_web1group_1' sys.reload_modules

在/var/cache/salt/minion/extmods/grains/位置的一个编译后的字节码文件grains_openfile.py文件,为python可执行的格式。


[root@saltstack-master _grains]# salt 'saltstack_web1group_1' sys.reload_modules
saltstack_web1group_1:
True
[root@saltstack_web1group_1 minion.d]# ll /var/cache/salt/minion/extmods/grains/
总用量 4
-rw-------. 1 root root 774 3月 20 16:36 grains_openfile.py

校验结果为可以在主控端查看grains信息。

执行salt 'saltstack_web1group_1' grains.item max_open_file
结果显示”max_open_file:65535”,这就是前面定制的主机grains信息。


[root@saltstack-master _grains]# salt 'saltstack_web1group_1' grains.item max_open_file
saltstack_web1group_1:
----------
max_open_file: 65535

标签:被控,grains,minion,root,saltstack,组件,Saltstack,salt,web1group
来源: https://blog.51cto.com/15067236/2607516

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有