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

  • 相关阅读:
    linux安装oracle
    echarts柱状图,改变柱状颜色
    JS实现键盘监听(包括组合键)
    css根据屏幕大小切换样式
    (转)Win10下PostgreSQL10与PostGIS安装
    navicat连接PostgreSQL报:column “rolcatupdate” does not exist ...错误的解决办法
    大屏FAQ
    大屏介绍
    大屏模板制作
    大屏做成这样,领导不重用你都难
  • 原文地址:https://www.cnblogs.com/MacoLee/p/5757299.html
Copyright © 2020-2023  润新知