Saltstack系列4:Saltstack之Grains组件

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自动化运维技术与最佳实践》整理

原文地址:https://www.cnblogs.com/andy6/p/11705022.html

时间: 2024-10-14 10:28:38

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

Saltstack系列:Saltstack的Grains和Pillar

Grains和Pillar的用途: Grains : 用于存储minion的基本数据信息: Pillar : 用于存储master分配给minion的数据信息. Grains和Pillar的存储区域: Grains : 元数据存储在minion端: Pillar : 元数据存储在master端. Grains和Pillar的更新方式: Grains : 在minion启动时进行更新: Pillar : 元数据存储在master端,使用 saltutil.refresh_pillar进行刷新,效率

Saltstack系列:Saltstack分组

关于Saltstack分组的混合匹配:(Compound matchers) 1.修改配置文件,添加组. [[email protected] ~]# vim /etc/salt/master nodegroups:   group1: '[email protected],node3'   group2: '[email protected]'   group3: '[email protected]/24'   group4: '[email protected][2-3]' [[email

运维工具SaltStack之三Grains组件

运维工具SaltStack之三Grains组件 一.grains组件介绍 grains是收集Minion主机的静态.不常变化的基本信息,存储在Minion端本地,如:CPU.内核.操作系统.虚拟化等,并且服务器端可以根据这些信息进行灵活定制或个性化定制,是Saltstack最重要的组件之一,多用来做资产管理的信息收集,主要解决平台的差异性. 如可以使用以下命令: #salt 'minion01' grains.items  #获取minion01主机基本信息 二.grains组件自定义 自定义g

saltstack Grains组件

saltstack Grains组件 GRAINS组件说明 GRAINS组件是saltstack中非常重要的一个组件,其主要用于记录Minion的一些静态信息.如比:CPU.内存.磁盘.网络等 grains信息是每次客户端启动后自动上报给master的,一旦这些静态信息发生改变需要重启minion或者重新同步grains (Master执行: salt '*' state.highstate) 除此之外我们还可以自定义Grains的一些信息.自定义的方法有三种: 1.通过Minion配置文件定义

(转)Saltstack系列

Saltstack系列1:安装配置 Saltstack系列2:Saltstack远程执行命令 Saltstack系列3:Saltstack常用模块及API Saltstack系列4:Saltstack之Grains组件 Saltstack系列5:Saltstack之pillar组件 Saltstack系列6:Saltstack之state 原文:http://www.cnblogs.com/MacoLee/category/847853.html https://www.centos.bz/ta

Saltstack系列之二——Targeting

昨天原本打算是写salt的WebUi-halite的,不过想了想,还是先写一些"看得见.摸得着的"的一些显而易见,最基本的用处吧.(尝到一些甜头后,才会继续去钻研吧...哈哈~) 那,什么是Targeting呢? 官方给到的解释是: Specifying which minions should run a command or execute a state by matching against hostnames, or system information, or define

自动化运维系列之SaltStack批量部署Apache服务

自动化运维系列之SaltStack批量部署Apache服务 saltstack原理 SalStack由master和minion构成,master是服务端,表示一台服务器:minion是客户端,表示多台服务器.在Master上发送命令给符合条件的minion,Minion就会执行相应的命令.Master和Minion之间是通过ZeroMQ(消息队列)进行通信的. SaltStack的Master端的监听端口是4505和4506,4505端口是Master和Minion认证通信端口:4506端口是

自动化运维Saltstack系列(一)之基础功能篇

Saltstack简介  Saltstack是基于Python开发的一套C/S架构,具备Puppet.Ansible功能于一身的配置管理工具,功能十分强大,各模块融合度及复用性极高:使用号称世界上最快的消息队列ZeroMQ使得Saltstack能够秒级在数万台服务器上进行各种操作,而且使用RAS Key方式确认身份,传输采用AES加密,安全性能更高: Saltstack不仅仅是一款配置管理工具,还是一款做云计算和数据中心架构编排利器.目前Salt-cloud项目也已经合并到Saltstack主项

Saltstack系列之一——安装篇

最近,和暴雪中国区带技术的一个人聊了不少,他们在测试salt,不过目前用的是puppet,服务器数量也快要1000多台.那为什么他们会去考虑测试salt.另谋他法呢,肯定是有salt一定优势的. 其实我对puppet的名声早已经耳濡目染了1年多了,虽然还没去研究过....也知道有同类开源产品saltstack的存在.不过,puppet是由ruby写的,saltstack则是由python编写的,综合下来就选择了研究salt. 国内的博客真是各种抄袭.各种搬啊...真找不到几篇有用的文档和资料.还

《React-Native系列》19、 ListView组件之上拉刷新(iOS和Android通用)

ReactNative提供了RefreshControl下拉刷新组件,但是没有提供上拉刷新组件,上拉刷新在App中是很常用的. 今天我们来实现一个iOS和Android通用的上拉刷新功能. 下面简要介绍下我实现的思路. 如果你对ListView的基础知识不是很清楚,建议先移步:<React-Native系列>16. RN组件之ListView 思路: 1.常量定义: const moreText = "加载完毕"; //foot显示的文案 //页码 var pageNum