Salt的執(zhí)行模塊函數(shù)并沒有什么特別之處,它們實際上就是Python函數(shù),但是當(dāng)它們結(jié)合上Salt的遠程執(zhí)行功能就會變得非常強大。當(dāng)然,我們可以用Python擴展出自己的模塊。
默認(rèn)情況下,我們的定制化模塊存放在/srv/salt/_modules
文件夾下,這個文件夾不是默認(rèn)創(chuàng)建的,需要建立對應(yīng)的目錄并添加文件
mkdir -pv /srv/salt/_modules/
創(chuàng)建完之后就可以在該文件下寫第一個我們自己的模塊了
def world():
"""
This is hello function.
CLI Example:
salt '*' hello.world
"""
return 'Hello world'
模塊添加完成后,需要把模塊推送到所有minion上,命令如下:
[root@localhost _modules]# salt "*" saltutil.sync_modules
minion-one:
- modules.hello
minion-two:
- modules.hello
返回結(jié)果是minion接收到的新模塊名,接下來我們就可以測試模塊的執(zhí)行效果了:
[root@localhost _modules]# salt "*" hello.world
minion-two:
Hello world
minion-one:
Hello world
ok,這樣我們就成功的完成了第一個模塊的編寫執(zhí)行,雖然這個例子很簡單,但是python語言能提供的強大功能都可以編寫成Salt模塊,并通過遠程執(zhí)行的方式進行調(diào)用。
實戰(zhàn)編寫一個完整模塊
作為系統(tǒng)管理員可能經(jīng)常需要查出當(dāng)前系統(tǒng)最占用內(nèi)存的程序以及當(dāng)前系統(tǒng)中最占用CPU的程序,下面我們就把這個常用的功能寫成一個模塊,讓它使用起來更加便捷。
vi /srv/salt/_modules/prank.py
# -*- coding: utf-8 -*-
'''
The top nth processes which take up CPU and memory space usage are available through this module, additional;
The module can get the system load information.
'''
# Import python libs
import os
# Import salt libs
import salt.utils
def cpu(n):
'''
Return the top nth processes which take up the CPU usage for this minion
CLI Example:
salt '*' prank.cpu <n>
'''
cmd = "ps axu|sort -k3 -nr|head -n%s" % str(n)
output = __salt__['cmd.run_stdout'](cmd)
res = []
for line in output.splitlines():
res.append(lines)
return res
def mem(n):
'''
Return the top nth processes which take up the memory usage for this minion
CLI Example:
salt '*' prank.mem <n>
'''
cmd = "ps axu|sort -k4 -nr|head -n%s" % str(n)
output = __salt__['cmd.run_stdout'](cmd)
res = []
for line in output.splitlines():
res.append(lines)
return res
def load():
'''
Return the load averages for this minion
CLI Example:
.. code-block:: bash
salt '*' prank.loadavg
'''
load_avg = os.getloadavg()
return {'1-min': load_avg[0],
'5-min': load_avg[1],
'15-min': load_avg[2]}
這個模塊中cpu(n)
和mem(n)
分別調(diào)用了__salt__['cmd.run_stdout']
來執(zhí)行命令,最后將命令返回結(jié)果傳回給master顯示,load()
函數(shù)用系統(tǒng)的os模塊收集了load情況。
模塊編寫完成后執(zhí)行模塊同步命令:
[root@localhost _modules]# salt "*" saltutil.sync_modules
minion-one:
- modules.prank
minion-two:
- modules.prank
同步完成后就可以使用命令查看最占CPU或者最占內(nèi)存的程序了
salt "*" prank.cpu 4
salt "*" prank.mem 4