上一篇分享了《SaltStack安装配置与远程执行测试》,涉及到了test.ping和cmd.run两个模块方法,实际上SaltStack的模块有140多个之多,每个模块又有多种函数(function,也有的称为方法),但我在查阅和测试了多个模块如archive 、file、user、network、pkg、service、status等之后,发现很多模块的功能实际上大多都可以用万能的cmd.run加相应的系统命令来代替。如果SaltStack所管理的服务器系统发行版众多,系统命令有差异(比如yum和apt-get),用cmd.run的话需要分开执行,而用SaltStack相应的系统模块可以屏蔽这种差异性,一次执行就可以搞定多种发行版。如果不是这种情况的话我觉得用cmd.run加相应的系统命令就可以了。最后我觉得比较实用和值得写一写的是cmd与cp模块,本文主要内容是这两个模块及其基本用法。


一、SaltStack的模块及其函数

1、使用命令salt 'salt-minion01' sys.list_modules可以列出所有的模块,可以看到多达146个

SaltStack远程执行两大模块:cmd与cp模块测试_第1张图片

SaltStack远程执行两大模块:cmd与cp模块测试_第2张图片

2、使用命令salt 'salt-minion01' sys.list_functions test可以列出具体模块(如test模块)的所有函数

SaltStack远程执行两大模块:cmd与cp模块测试_第3张图片

3、使用命令salt 'salt-minion01' sys.doc test可以列出具体模块(如test模块)全部函数的帮助及示例,若指定模块的具体函数,则可以单独查看该函数(如test.ping)的帮助及示例,类似查看man手册

SaltStack远程执行两大模块:cmd与cp模块测试_第4张图片

SaltStack远程执行两大模块:cmd与cp模块测试_第5张图片


二、cmd模块及其常用函数测试

1、cmd模块有不少函数,本节主要测试的是cmd.run、cmd.run_bg、cmd.script三个函数的使用

SaltStack远程执行两大模块:cmd与cp模块测试_第6张图片

2、cmd.run的命令中若使用了awk,则$符前面需要加转义符

SaltStack远程执行两大模块:cmd与cp模块测试_第7张图片

3、cmd.run可以使用参数stdin指定标准输入字符串

SaltStack远程执行两大模块:cmd与cp模块测试_第8张图片

4、使用cmd.run_bg可以将命令放到minion后台执行

SaltStack远程执行两大模块:cmd与cp模块测试_第9张图片

5、使用cmd.script可以将master上的脚本推送到minion并执行,通过查看/etc/salt/master文件可以知道master默认的文件根目录是/src/salt,需将测试脚本放到该目录

SaltStack远程执行两大模块:cmd与cp模块测试_第10张图片

SaltStack远程执行两大模块:cmd与cp模块测试_第11张图片

SaltStack远程执行两大模块:cmd与cp模块测试_第12张图片

6、cmd.script推送脚本时也可以带参数

SaltStack远程执行两大模块:cmd与cp模块测试_第13张图片


三、cp模块及其常用函数测试

1、cp模块可以实现master推送文件或目录给minion,也可以实现从minion拉取文件或目录,cp模块也有不少函数,本节主要测试cp.get_file、cp.get_dir、cp.push、cp.push_dir四个函数的使用

SaltStack远程执行两大模块:cmd与cp模块测试_第14张图片

2、使用cp.get_file可以推送master上的文件到minion,文件需要位于master的文件根目录中,即默认的/srv/salt

15.png

SaltStack远程执行两大模块:cmd与cp模块测试_第15张图片

3、当推送文件给minion时指定的存放路径在minion上不存在时会失败,这时可以加参数makedirs=true自动在minion上创建目录

SaltStack远程执行两大模块:cmd与cp模块测试_第16张图片

4、使用cp.get_dir可以推送master上的目录到minion,目录需要位于master的文件根目录中,即默认的/srv/salt

18.png

SaltStack远程执行两大模块:cmd与cp模块测试_第17张图片

5、从minion拉取文件或目录到master,默认是被禁用的,需要修改master上的/etc/salt/master文件启用,并重启salt-master服务。拉取的文件或目录默认存放在/var/cache/salt/master/minions/minion-id/files下

20.png

6、当使用cp.push从多台minion拉取文件时,即时使用了通配符,也只有文件名在多台minion上都相同的文件才会被拉取

SaltStack远程执行两大模块:cmd与cp模块测试_第18张图片

7、如果想使用通配符拉取同一类文件,可以使用cp.push_dir加上glob参数

SaltStack远程执行两大模块:cmd与cp模块测试_第19张图片

8、使用cp.push_dir如果不指定glob参数,则是拉取整个目录

SaltStack远程执行两大模块:cmd与cp模块测试_第20张图片

9、虽然从不同的minion拉取的文件都存放在minion各自的目录下,但使用通配符可以轻松地把文件集中复制到同一个目录中

25.png

本文出自江健龙的技术博客 jiangjianlong.blog.51cto.com,转载请注明出处。