前言
所有的可执行模块(execution modules)可以查看官方文档,记录下我常用到的模块test
、status
、cmdmod
、useradd
、system
、systemd
、file
和解决rm -f
带来困惑的方法。使用方法除了查看官方文档和手册外,查看源代码(源代码中也详细描述了使用方法和示例)也是一个好的方法。
test
test模块提供对minion端有限项的任意测试,常见的有ping、echo、version等,
源码在minion端/usr/lib/python2.6/site-packages/salt/modules/test.py
,详细的使用方法查源码最直接了。
1 | $ salt minion01 test.ping |
status
status可以查看minion的基本状态如CPU、内存、硬盘、网络等,常见的有all_status、uptime、w、netstats等,
源码在minion端/usr/lib/python2.6/site-packages/salt/modules/status.py
。
对于all_status方法查看源码可以看到这个版本支持的可查询状态有cpuinfo、cpustatus、… …等
1 | def all_status(): |
cmdmod与cmd
cmd这个模块中的run可以执行在bash里执行的所有命令,很强大但是也得注意在run中执行类似rm这样的命令是很危险的。
源码位置在minion端的/usr/lib/python2.6/site-packages/salt/modules/cmdmod.py
。
cmd.run执行命令就像在minion端本地执行命令一样亲切。
1 | $ salt minion01 cmd.run 'df -hT' |
亲切的同时也会带来困惑,如果误操作是这样的,后果很可怕。
1 | $ salt \* cmd.run "rm -rf /" |
可以修改源代码禁止执行rm这种较危险的命令,打开minion端的文件/usr/lib/python2.6/site-packages/salt/modules/cmdmod.py
找到run()函数,在其调用_run()函数的时候判断参数cmd中是否包含rm命令,如果包含了就返回并提示”rm命令很危险,任务执行失败”,这样一来master上cmd.run就不能执行rm命令了。
1 | ''' |
修改文件后重启minion后生效,测试下效果
1 | $ salt minion01 cmd.run "rm -rf /" |
可以看出修改已经生效,再也不用担心cmd.run误操作了。不过有个问题就是,在cmdmod模块中不仅cmd.run可以执行rm命令还有cmd.run_all、cmd.run_stdout等都可以执行rm命令,为了更彻底的封掉rm这个命名,仔细看了下代码发现它们最终都是调用的_run()来完成任务的,可以修改_run()这个函数(在/usr/lib/python2.6/site-packages/salt/modules/cmdmod.py
文件第213行)来彻底的封掉rm这个命令。
1 | ''' |
如果是修改_run()函数后就不用修改run()等其它函数了,修改文件后重启minion后生效,测试下效果
1 | $ salt minion01 cmd.run "rm -rf /" |
将修改过的salt-minion打成rpm包后放到本地的yum源,然后重新安装所有的minion端就可以解决rm带来的困惑了。
useradd
这个模块主是用来用户管理的,源文件位置在minion端(下同)/usr/lib/python2.6/site-packages/salt/modules/useradd.py
,记录几个常用的。
user.add添加新用户
1 | $ salt minion01 user.add testuser |
user.list_users列出所有的用户,可以看到刚才添加的用户
1 | $ salt minion01 user.list_users | grep testuser |
user.info查看用户信息
1 | $ salt minion01 user.info testuser |
user模块还有很多可用的方法,可以根据名称就可以知道其功能了比如
1 | user.getent |
system
系统管理模块,能看懂的就不记录了。
源码位置/usr/lib/python2.6/site-packages/salt/modules/system.py
1 | system.halt #停止正在运行的系统 |
systemd
系统服务管理模块,
源码位置/usr/lib/python2.6/site-packages/salt/modules/systemd.py
1 | service.available sshd #查看服务是否可用 |
file
文件管理模块,这个模块的方法太多,非常强大,选些常用的记一下。
源文件/usr/lib/python2.6/site-packages/salt/modules/file.py
中有所有方法的功能和使用说明。
1 | file.copy /path/to/src /path/to/dst #将master文件拷贝到minion上,salt还有个专门的拷文件的命令salt-cp |