grains说明

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

例:(janja模板)

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

grains常用操作命令

匹配内核版本为2.6.32-358.14.1.el6.x86_64的主机

salt -G 'kernelrelease:2.6.32-358.14.1.el6.x86_64' cmd.run 'uname -a'

获取所有主机的grains项信息

salt '*' grains.ls

定义grains数据

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

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

【/etc/salt/minion】

default_include:minion.d/*.conf #自定义grains配置文件路径

grains配置文件:【/etc/salt/minion.d/hostinfo.conf】

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

重启salt-minion使之生效:service salt-minion restart
验证:

salt 'wx' grains.item roles deployment cabinet

结果:

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

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

首先在主控端编写python代码,然后将该python文件同步到被控端主机,最后刷新生效(即编译Python源码文件成字节码pyc)。

在主控端base目录(在/etc/salt/master中配置的file_roots项,默认在/srv/salt)下生成_grains目录执行install -d /srv/salt/_grains开始编写代码,实现获取被控主机系统允许最大打开文件数(ulimit -n)的grains数据

【/srv/salt/_grains/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比较适合采集静态类的数据,比如硬件、内核信息等,当有动态类的功能需求时,需要进行刷新。
同步操作:

salt 'wx' saltutil.sync_all

结果:文件同步到被控端的cache目录中

/var/cache/salt/minion/extmods/grains/grains_openfile.py
/var/cache/salt/minion/files/base/_grains/grains_openfile.py
#注:/var/cache/salt/minion/extmods/grains/为扩展模块文件最终存放位置,刷新模块后将在同路径下生产字节码pyc;/var/cache/salt/minion/files/base/_grains/为临时存放位置。

刷新模块:

salt 'wx' sys.reload_modules

#生成pyc字节码
/var/cache/salt/minion/extmods/grains/grains_openfile.py
/var/cache/salt/minion/extmods/grains/grains_openfile.pyc
/var/cache/salt/minion/files/base/_grains/grains_openfile.py

验证:

salt 'wx' grains.item max_open_file

结果:

wx:
----------
max_open_file:
1024

参考资料:

根据刘天斯《Python自动化运维技术与最佳实践》整理

Saltstack系列4:Saltstack之Grains组件的更多相关文章

  1. (转)Saltstack系列

    Saltstack系列1:安装配置 Saltstack系列2:Saltstack远程执行命令 Saltstack系列3:Saltstack常用模块及API Saltstack系列4:Saltstack ...

  2. SaltStack系列(一)之环境部署、命令及配置文件详解

    一.SaltStack介绍 1.1 saltstack简介: saltstack是基于python开发的一套C/S架构配置管理工具,它的底层使用ZeroMQ消息队列pub/sub方式通信,使用SSL证 ...

  3. JS组件系列——又一款MVVM组件:Vue(二:构建自己的Vue组件)

    前言:转眼距离上篇 JS组件系列——又一款MVVM组件:Vue(一:30分钟搞定前端增删改查) 已有好几个月了,今天打算将它捡起来,发现好久不用,Vue相关技术点都生疏不少.经过这几个月的时间,Vue ...

  4. (转)CentOS6/7 使用saltstack源安装saltstack

    CentOS6/7 使用saltstack源安装saltstack 原文:https://blog.csdn.net/wh211212/article/details/77053708 CentOS ...

  5. SpringBoot系列之Spring容器添加组件方式

    SpringBoot系列之Spring容器添加组件方式 本博客介绍SpringBoot项目中将组件添加到Spring容器中的方法,SpringBoot项目有一个很明显的优点,就是不需要再编写xml配置 ...

  6. Saltstack grains组件

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

  7. Saltstack系列5:Saltstack之pillar组件

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

  8. SaltStack系列(三)之state相关介绍

    一.管理对象 saltstack系统中管理对象叫做Target,在master上可以采用不同的Tatget去管理不同的minion.这些Target都是通过去管理和匹配Minion的ID来做一些集合. ...

  9. Saltstack系列6:Saltstack之state

    state功能 state是Saltstack最核心的功能,通过预先定制好的sls(salt state file)文件对被控制主机进行状态管理,支持包括程序包(pkg).文件(file).网络配置( ...

随机推荐

  1. Linux下使用fdisk发现磁盘空间和使用mount挂载文件系统

    若在安装Linux系统时没有想好怎么使用服务器,开始时只分了一部分给根目录.后面需要再使用时,可以通过几下一步进行分区和挂载文件系统. 看磁柱数使用情况 fdisk -l Disk /dev/sda: ...

  2. meta标签兼容性

    基本标签SEO 优化为移动设备添加 viewportWindows 8其他 禁止数字识自动别为电话号码不让android识别邮箱每 8 秒刷新一次页面移动端的头部标签和meta 基本标签 声明文档使用 ...

  3. mysql-server 的一些记录

    为避免 innodb 文件的增大.个人倾向于读立表空间.以 innodb_file_per_table=1 参数调整. 不使用默认数据目录的话,须得将 grp own 都循环设置为mysql. 昨天晚 ...

  4. Win+R运行自定义程序应该这样玩

    互联网是一个“生态圈”,Windows有自己的生态学,有些看似高效的“奇技淫巧”实则只是搞笑. 我很以前十分崇拜善用佳软的站长,对事不对人,有些弊端,只是我们不知道,但并不代表就没有. 有些“恍然大悟 ...

  5. 小三角图标如何用CSS写

    上三角▲     1 width: 0; 2 height: 0; 3 line-height: 0; 4 font-size: 0; 5 border-width: 10px; 6 border-s ...

  6. leetcode 135. Candy ----- java

    There are N children standing in a line. Each child is assigned a rating value. You are giving candi ...

  7. LNMP环境搭建(discuz论坛)

    一.操作系统级环境及软件版本 操作系统:CentOS release 6.5 (Final)minimal 内核版本:2.6.32-431.el6.x86_64 MySQL版本:MySQL-5.6.2 ...

  8. spark新能优化之数据本地化

    数据本地化的背景: 数据本地化对于Spark Job性能有着巨大的影响.如果数据以及要计算它的代码是在一起的,那么性能当然会非常高.但是,如果数据和计算它的代码是分开的,那么其中之一必须到另外一方的机 ...

  9. linux 下查看机器是cpu是几核的(转)

    几个cpu more /proc/cpuinfo |grep "physical id"|uniq|wc -l 每个cpu是几核(假设cpu配置相同) more /proc/cpu ...

  10. android开源项目---developer篇

    本文转载于:http://blog.csdn.net/likebamboo/article/details/19081209 主要介绍和Android开发工具和测试工具相关的开源项目. Buck fa ...