## 查看 salt 命令的帮助信息
# salt -h
Usage: salt [options] '<target>' <function> [arguments]
salt 远程执行命令由五部分组成
第一部分: salt 命令本身
第二部分: options 命令选项
第三部分: target 目标minion,也就是要操作的目标 minion
第四部分: function 远程执行的 salt函数
第五部分: 远程执行函数的参数
来一个例子:
# salt --summary "*" cmd.run "uptime"
m01:
22:45:22 up 54 min, 2 users, load average: 0.00, 0.01, 0.03
master:
22:45:22 up 54 min, 2 users, load average: 0.00, 0.01, 0.05
-------------------------------------------
Summary
-------------------------------------------
# of Minions Targeted: 2
# of Minions Returned: 2
# of Minions Did Not Return: 0
-------------------------------------------
options 命令选项
salt 命令的几个主要参数
-v, --verbose Turn on command verbosity, display jid and active job queries
开启命令的详细描述,详细描述运行命令后会发生什么
--summary Display summary information about a salt command
显示一条 salt 命令的概要信息
--out=OUTPUT, --output=OUTPUT
Print the output from the 'salt' command using the
specified outputter. The builtins are 'key', 'yaml',
'overstatestage', 'newline_values_only', 'pprint',
'txt', 'raw', 'virt_query', 'compact', 'json',
'highstate', 'nested', 'quiet', 'no_return'.
控制 salt 执行后输出结果的格式,可指定的格式有 'key', 'yaml','overstatestage', 'newline_values_only', 'pprint', 'txt', 'raw', 'virt_query', 'compact', 'json', 'highstate', 'nested', 'quiet', 'no_return'
target 目标minion
在实际环境中 salt 通常都是控制着成百上千的 minion,通过指定 target 可以灵活的定位所有的服务器并执行远程命令
a 全局匹配
和 linux 的通配符类似,
· * 表示任意字符,包括空字符串
· ? 表示一个字符,但不可以为空
· [] 表示字符集合,比如 [a-z] 表示任意一个小写字母
示例如下:
## 向所有以01结尾的 minion 发送命令
# salt "*01" test.ping
m01:
True
## 想所有是三个字符并且以01结果的 minion 发送命令
# salt "?01" test.ping
m01:
True
## 想所有第一个字符是小写字母,第二三个字符是01的三字符组成的 minion 发送命令
# salt "[a-z]01" test.ping
m01:
True
b 正则表达式匹配
salt 使用了 python 的 re 模块来做正则表达式匹配,这里不对正则表达式进行介绍。
简单的说就是使用正则表达式来描述 target,达到匹配指定minion 的效果。
使用正则表达式需要指定-E 或者 --pcre选项
示例如下
# salt -E "[mM]" test.ping
m01:
True
master:
True
# salt -E "[a-zA-z]+[0-9]+" test.ping
m01:
True
c 列表匹配
以主机id名列表的形式进行过滤,格式与Python的列表相似,即不同主机id名称使用逗号分隔,命令:
# salt -L "master,m01" test.ping
m01:
True
master:
True
d 分组管理
/etc/salt/master 配置文件中有如何内容,在这里我们可以配置分组
# Node groups allow for logical groupings of minion nodes. A group consists of a group
# name and a compound target.
#nodegroups:
# group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com and bl*.domain.com'
# group2: 'G@os:Debian and foo.domain.com'
目标服务器分组有以下七种方式,这七种方式的标示符分别为:
G -- 针对 Grains 做单个匹配,例如:G@os:Ubuntu
E -- 针对 minion 针对正则表达式做匹配,例如:E@web\d+.(dev|qa|prod).loc
P -- 针对 Grains 做正则表达式匹配,例如:P@os:(RedHat|Fedora|CentOS)
L -- 针对 minion 做列表匹配,例如:L@minion1.example.com,minion3.domain.com or bl*.domain.com
I -- 针对 Pillar 做单个匹配,例如:I@pdata:foobar
S -- 针对子网或是 IP 做匹配,例如:S@192.168.1.0/24 or S@192.168.1.100