Hi 你好,欢迎访问!登录
当前位置:首页 - 自动化运维 - 正文 忍人所不忍,能人所不能。

Linux自动化工具之SaltStack扩展组件

2020-03-16自动化运维90root74°c
A+ A-

前面几篇文档里已经了解了saltstack各个组件, 虽然saltstack自带的各种组件在功能上已经很成熟了, 但有时候也无法满足企业各种复杂的环境。本篇文档主讲如何扩展satlstack各个组件

1. 扩展Grains组件

虽然Grains能收集得到Minion的各种静态信息, 但是为了满足更加复杂的应用, 希望Grains能根据我们的需求去采集一些信息. 例如在大批量及其中我们区别每台设备的业务角色, 这个时候我们就可以自定义一个Grains,让Minion通过外部数据(cmdb)去采集自己的业务汇报给Master端

1.1 扩展Grains流程

我们需要在Master端编写一个Python脚本, 该脚本的内容定义如何收集你想要的信息.

把该py脚本同步(rsync)到所有Minion端, 在同步的过程中Minion就会去采集刷新Grains.

[[email protected]_210 ~]# cd /data/etc/salt/
[[email protected]_210 salt]# mkdir _grains       #采集脚本放在_granins下
[[email protected]_210 salt]# cat _grains/example.py
#!/usr/bin/env python
### 自定义granins函数
def grains():
### 创建local空字典
    local={}
### 定义一个名为test的字典.
    test={'key':'vaule','key1':'vaule1','key2':'vaule2'}
### 给local字典存了一组值, key是list,value是一个列表[1,2,3,4]
    local['list']=[1,2,3,4]
### 给local字典存了一组值, key是string,value为字符串str
    local['string'] = 'str'
### 给local字典存了一组值, key是dict,value是一个字典test
    local['dict'] = test
### 整个local字典的所有数据返回
    return local

1.2 将python脚本同步到minion端

[[email protected]_210 _grains]# salt 'docker_211' saltutil.sync_grains
[[email protected]_210 _grains]# salt 'docker_211' grains.item list dict string
docker_211:
    ----------
    dict:
        ----------
        key:
            vaule
        key1:
            vaule1
        key2:
            vaule2
    list:
        - 1
        - 2
        - 3
        - 4
    string:
        string
#python里面三种数据结构再此已全部展现.

1.3 实战用python采集minion端磁盘信息

[[email protected]_210 ~]# cat /data/etc/salt/_grains/fc.py
#!/usr/bin/python2.6
import os,commands,math
def fc():
       fc = {}
       fc['role'] = 'cpisfc_web'
       fc['disks'] = commands.getoutput('df -m| grep "/" | awk \' { print $NF } \' ')
       fc['disk_size'] = commands.getoutput('df -m| grep "/" | tail -n 1 | awk \' { print $2 } \' ')
       fc['disk_size_per'] = int(math.floor(float(fc['disk_size'])/100000))*1000
       fc['node'] = commands.getoutput('hostname | cut -c1-8')
       fc['nets'] = commands.getoutput('ifconfig  | awk \' BEGIN { FS=":| +"; } /inet addr/ { print $4 } \' | awk  \'BEGIN { FS=".";OFS="." }  { print $1,$2,$3,"0/24" } \' ')
       return fc
[[email protected]_210 _grains]# salt 'docker_212' saltutil.sync_grains
[[email protected]_210 _grains]# salt 'docker_212' grains.item disk_size_per
docker_212:
    ----------
    disk_size_per:
        8000

1.4 实战用python脚本采集minion服务器时间

[[email protected]_210 ~]# cat /data/etc/salt/_grains/server_time.py
#!/usr/bin/env python
# coding=utf-8
from datetime import datetime
def get_server_time():
       grains = {}
       grains['server_time'] = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
       return grains
[[email protected]_210 _grains]# salt 'docker_212' saltutil.sync_grains
[[email protected]_210 _grains]# salt 'docker_212' grains.item server_time
docker_212:
    ----------
    server_time:
        2016-09-05 23:41:58

关于grains扩展演示到这,通过这几个实战能看明白自定义的grains该如何写以及grains工作流程

  移步手机端
Linux自动化工具之SaltStack扩展组件

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
标签:

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>


  用户登录