Saltstack自动化(七)自定义模块
一、内置模块与自定义模块
saltstack内置了很多模块,这些模块使我们简单的执行一条命令就可以返回我们所需的结果。具体可以查看--- SaltStack内置模块列表 。不过也有很多时候,这些内置模块不能满足我们的正常需要,或者返回的结果不理想,这就需要通过自定义模块实现我们想要的结果。自定义SaltStack模块是需要存放在由/etc/salt/master配置文件中file_roots指定的路径下的_modules目录下。(需要创建),默认位置为/srv/salt/_modules。
二、编写自定义模块
1、创建自定义模块存放目录
Master上创建存放模块的目录:
1mkdir -pv /srv/salt/_modules
2cd /srv/salt/_modules
2、编写自定义模块
这里我想要让返回的格式是txt格式,我在这里模块里定义了两个函数:
1# cat ndisk.py
2#coding:utf-8
3import commands,random
4__outputter__ = {
5 'test': 'txt',
6 'usage': 'txt'
7}
8def test():
9 return random.randint(1,100)%2==0
10def usage(per=35):
11 ret = []
12 (status, output) = commands.getstatusoutput('df -P')
13 out = output.splitlines()
14 for line in out:
15 if not line:
16 continue
17 if line.startswith('Filesystem'):
18 continue
19 comps = line.split()
20 if len(comps) >= 2:
21 perct = (comps[-2]).replace('%', '')
22 if int(perct) > per:
23 data = (comps[-1],perct)
24 ret.append(data)
25 return ret
3、同步文件到minion端
同步自定义模块到客户端的方法有三种,这里一般以第二种属于较正统的同步模块方法,第1,3方法同步的时候也会同步其他信息到客户端:
1state.highstate
2saltutil.sync_modules
3saltutil.sync_all
同步完成后,默认会将自定义模块同步到/var/cache/salt/minion/extmods/modules目录下:
4、自定义模块的调用
同步完成后,自定义模块的调用结果如下:
这里返回的格式会发现有双方括号,返回的并不美观,一般建议返回字典值,我们还可以修改上面的函数为如下:
1def usage(per=35):
2 ret = {}
3 (status, output) = commands.getstatusoutput('df -P')
4 out = output.splitlines()
5 for line in out:
6 if not line:
7 continue
8 if line.startswith('Filesystem'):
9 continue
10 comps = line.split()
11 #print comps
12 if len(comps) >= 2:
13 #print line
14 perct = (comps[-2]).replace('%', '')
15 #print perct
16 if int(perct) > per:
17 key = comps[-1]
18 ret[key] = perct
19 return ret
其执行后,结果如下:
这个结果是不是美观多了?
写模块时,也可以参考salt内置模块,其默认通过rpm安装的位置为:/usr/lib/python2.7/site-packages/salt/modules 。
注:默认salt也带有一个disk模块,不过其执行时的输出结果不满足我们进行巡检的需求,可以通过编写一大批自定义的模块,满足平时巡检的需求。
三、自定义模块中的特殊调用
自定义模块中也可以调用salt内部的一些变量或其他模块,同时还可以给模块指定一个虚拟名称。示例如下:
1[root@ZJHZ-CMREAD-TEST93 _modules]# cat test.py
2#!/usr/bin/python
3#coding:utf-8
4import time
5__virtualname__ = 'hoho'
6def __virtual__():
7 return __virtualname__
8def date():
9 return time.time()
10def get_osfinger():
11 return __grains__['osfinger']
12def get_cachedir():
13 return __pillar__['productname']
14def foo():
15 return __salt__['cmd.run']('df')
执行结果如下:
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/salt-custom-module/5515.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.