SaltStack是一个开源的、新的基础平台管理工具,使用Python语言开发,同时提供Rest API方便二次开发以及和其他运维管理系统进行集成。相对于出道比较早的Puppet,SaltStack先天的优势就是简单、易用,可以非常快速的在团队中推广和使用,而且运行多平台。
SaltStack有以下几种方式来选择目标机器,灵活而又强大。大的来讲分为两大类:
1. 基于Minion ID
Minion ID是客户端(minion)的唯一标识符。可以在minion配置文件里面使用ID选项进行配置,如果不指定,其默认是主机的FQDN名。Minion ID是不能变动的,因为在进行key认证的时候,生成的文件名是以Minion ID命名的。如果Minion发生变动,就需要使用salt-key -d删除老的Minion ID,然后重新加入新的Minion ID。
2. 不基于Minion ID
指定Minion ID是最直接的选择目标的方法
查看所有minion节点
[root@salt ~]# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
128.docker.itnotebooks.com
Rejected Keys:
授权minion节点
可以修改/etc/salt/master的配置auto_accept:True自动认证
[root@salt ~]# salt-key -a 128.docker.itnotebooks.com
The following keys are going to be accepted:
Unaccepted Keys:
128.docker.itnotebooks.com
Proceed? [n/Y] y
Key for minion 128.docker.itnotebooks.com accepted.
Globbing是指在Minion ID的基础上,通过通配符来定位Minion。SaltStack默认使用Shell风格通配符(如“” “?” “[]”)来匹配Minion ID。不过需要注意的是,使用salt命令时必须将’’放在单引号中,或是用’\’转义,用来避免shell解析。
匹配所有itnotebooks.com域的所有minion
[root@salt ~]# salt '*.itnotebooks.com' test.ping
匹配docker后面单个任意字符的Minion
[root@salt ~]# salt 'docker?.itnotebooks.com' test.ping
匹配docker节点1到节点3的Minion
[root@salt ~]# salt 'docker[1-3].itnotebooks.com' test.ping
匹配docker不是节点1和节点3的Minion
[root@salt ~]# salt 'docker[!13].itnotebooks.com' test.ping
list和直接Minion ID都是最基本的模式,可以列出每一个Minion ID来指定多个目标机器,使用选项’-L’
[root@salt ~]# salt -L 'docker1.itnotebooks.com,docker2.itnotebooks.com' test.ping
Salt可以使用Perl风格的正则表达式来匹配Minion ID,使用选项-E
[root@salt ~]# salt -E 'linux-(node1|node2)*' test.ping
规范的Minion ID可以很好的反映出该服务器运行的相关服务及所在位置
redis-node1-redis03-idc04-soa.itnotebooks.com
也可以使用IP地址或CIDR子网来指定目标,目前仅支持IPv4的地址
[root@salt ~]# salt -S '192.168.18.33' test.ping
[root@salt ~]# salt -S '192.168.18.0/24' test.ping
也可以使用Grains对Trageting进行匹配,使用选项’-G’
匹配所有CentOS系统的Minion
[root@salt ~]# salt -G 'os:CentOS' test.ping
通过Grain匹配非常灵活,如果你想进行更复杂的基于Grains的匹配,SaltStack提供了Grain PCRE,可以在Grains的基础上使用正则表达式
[root@salt ~]# salt --grain-pcre 'os_family:Red(Hat|Flag)' test.ping
Pillar的数据可以用来定位Minion,为定位Minions提供了灵活性和终极控制
[root@salt ~]# salt -I 'apache:httpd' test.ping
Compound matchers(混合匹配)可以使用布尔操作符连接多个目标条件。混合匹配可以用前面讨论的多种方式实现精确的匹配。混合配匹配默认使用Globbing,如果要使用其它匹配方式,需要加上类型前缀字母如下表所示。
复合匹配中也可以使用and、or、not操作符,例如要匹配主机名以及webserv开始且运行Debain系统的Minion,还能匹配主机名满足正则表达式web-dc1-srv.*的Minion
[root@salt ~]# salt -C 'webserv* and G@os:Debian or E@web-dc1-srv.*' test.ping
需要注意的是not不能用于第一个条件,需要用时可以像下面这样写:
[root@salt ~]# salt -C '* and not G@kernel:Darwin' test.ping
Node group是在Master中nodegroup用复合条件字义的一组Minion
[root@salt ~]# vim /etc/salt/master
nodegroups:
group1: '[email protected],linux-node2.itnotebooks.com'
[root@salt ~]# systemctl restart salt-master
[root@salt ~]# salt -N group1 test.ping
linux-node2.itnotebooks.com
True
linux-node1.itnotebooks.com
True
远程执行命令-查看内存使用
[root@salt ~]# salt 'linux-node1.itnotebooks.com' cmd.run 'free -m'
total used free shared buff/cache available
Mem: 1838 749 119 0 969 887
Swap: 0 0 0
远程执行命令-查看操作系统类型
[root@salt ~]# salt 'linux-node1.itnotebooks.com' grains.item osfullname
linux-node1.itnotebooks.com:
osfullname: CentOS
远程执行命令-查看指定发行版本号为6.4的主机的python版本
[root@salt ~]# salt -G 'osrelease:6.4' cmd.run 'python -V'
linux-node1.itnotebooks.com:
Python 2.6.6
远程执行命令-解压文件
[root@salt ~]# salt 'linux-node1.itnotebooks.com' archive.gunzip /tmp/jdk-8.1.0.gz
远程执行命令-压缩文件
[root@salt ~]# salt 'linux-node1.itnotebooks.com' archive.gzip /tmp/test.txt
除了上面所提到的外,其它类似的模块还有很多很多
如cp、cron、file、iptables、network、dnsuti、service、pkg等等,详细的自己用过就知道了,当然你也可以在cmd.run里面去完成这一切