目录
一、理解 Salt 远程执行的底层原理
Salt 的底层通信是通过 ZeroMQ 完成的,采用了 ZeroMQ 订阅发布模式(Pub 和 Sub)。
Salt master 启动时会监听两个段都,默认是 4505 和 4506。
4506 的作用:Salt Master Ret 接口,支持认证(auth)、文件服务、结果收集等功能;
4505 的作用:Salt Master Pub 接口,提供远程执行命令发送功能。
二、执行模块的构成结构
Salt 中最简单的远程执行模块,源码的位置如下所示(master 端):
/usr/lib/python2.7/site-packages/salt/modules/test.py
三、编写自己的执行模块函数
3.1 默认情况下,我们的定制化模块存放在 /srv/salt/_modules 文件夹下,这个文件夹并不是默认创建的,需要建立对应的目录并添加文件(master 端):
# mkdir -pv /srv/salt/_modules/
mkdir: created directory `/srv/salt'
mkdir: created directory `/srv/salt/_modules/'
# cd /srv/salt/_modules/
# vim hello.py
#!/usr/bin/env python
def world():
"""
This is my frist function.
CLI Example::
salt '*' hello.world
"""
return 'Hello, world!'
3.2 模块添加完毕后,需要把模块推送到所有 minion 上
// master 端
# salt "*" saltutil.sync_modules
syq-snakenx-02.lehe.com:
- modules.hello
返回结果是 minion 接收到的新模块名。下面我们可以测试模块的执行效果:
// master 端
# salt "*" hello.world
syq-snakenx-02.lehe.com:
Hello, world!
四、交叉调用 Salt 自带的模块函数
4.1 _salt_ 函数
4.2 __grains__ 和 __pillar__ 函数
4.3 __virtual__ 函数
五、实战编写一个完整模块