利用 Saltstack 远程执行命令
Saltstack 的一个比较突出优势是具备执行远程命令的功能,操作及方法与func( https://fedorahosted.org/func/ )相似,可以帮助运维人员完成集中化的操作平台。
命令格式:salt '<操作目标>' <方法> [参数]
示例:查看被控主机的内存使用情况,如图10-2所示。
其中针对 <操作目标>,Saltstack 提供了多种方法对被控端主机(id)进行过滤。下面列举常用的具体参数。
-
-E, --pcre,通过正则表达式进行匹配。示例:控测 SN2013 字符开头的主机 id 名是否连通,命令:salt -E '^SN2013.*'test.ping,运行结果如图10-3所示。
Figure 2. 图10-3 正则匹配主机的连通性 -
-L, --list,以主机 id 名列表的形式进行过滤,格式与 Python 的列表相似,即不同主机 id 名称使用逗号分隔。示例:获取主机 id 名为 SN2013-08-021、SN2013-08-022;获取完整操作系统发行版名称,命令:salt -L 'SN2013-08-021,SN2013-08-022' grains.item osfullname,运行结果如图10-4所示。
Figure 3. 图10-4 列表形式匹配主机的操作系统类型 -
-G, --grain,根据被控主机的 grains(10.4节详解)信息进行匹配过滤,格式为 '<grain value>:<glob expression>',例如,过滤内核为 Linux 的主机可以写成 'kernel:Linux',如果同时需要正则表达式的支持可切换成 --grain-pcre 参数来执行。示例:获取主机发行版本号为 6.4的 Python 版本号,命令:salt -G 'osrelease:6.4' cmd.run 'python -V',运行结果如图10-5所示。
Figure 4. 图10-5 grain形式匹配主机的Python版本 -
-I, --pillar,根据被控主机的 pillar(10.5节详解)信息进行匹配过滤,格式为 “对象名称:对象值”,例如,过滤所有具备 'apache:httpd' pillar 值的主机。示例:探测具有 “nginx:root: /data” 信息的主机连通性,命令:salt -I 'nginx:root:/data' test.ping,运行结果如图10-6所示。
Figure 5. 图10-6 pillar形式匹配主机的连通性其中 pillar 属性配置文件如下(关于 pillar 后面 10.5 单独进行说明):
nginx: root: /data -
-N, --nodegroup,根据主控端 master 配置文件中的分组名称进行过滤。以笔者定义的组为例(主机信息支持正则表达式、grain、条件运算符等),通常根据业务类型划分,不同业务具备相同的特点,包括部署环境、应用平台、配置文件等。举例分组配置信息如下:
salt/masternodegroups: web1group: 'L@SN2012-07-010,SN2012-07-011,SN2012-07-012' web2group: 'L@SN2013-08-021,SN2013-08-022'其中,L@ 表示后面的主机 id 格式为列表,即主机 id 以逗号分隔;G@ 表示以 grain 格式描述;S@ 表示以 IP 子网或地址格式描述。
示例:探测 web2group 被控主机的连通性,其命令为:salt -N web2group test.ping,运行结果如图10-7所示。
Figure 6. 图10-7 分组形式(nodegroup)匹配主机的连通性 -
-C, --compound,根据条件运算符 not、and、or 去匹配不同规则的主机信息。示例:探测 SN2013 开头并且操作系统版本为 CentOS 的主机连通性,命令如下:
salt -C 'E@^SN2013.* and G@os:Centos' test.ping其中,not 语句不能作为第一个条件执行,不过可以通过以下方法来规避,示例:探测非 SN2013 开头的主机连通性,其命令为:salt -C '* and not E@^SN2013.*' test.ping。
-
-S, --ipcidr,根据被控主机的 IP 地址或 IP 子网进行匹配,示例如下:
salt -S 192.168.0.0/16 test.ping salt -S 192.168.1.10 test.ping