欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

Saltstack_使用指南06_远程执行-指定目标

程序员文章站 2022-05-08 17:34:09
1. 主机规划 Targeting Minions文档 另请参见:自动化运维神器之saltstack (三)节点组及复合匹配器 注意事项 修改了master或者minion的配置文件,那么必须重启对应的服务。 2. 目标指定方式 Letter Match Type Example Alt Delim ......

 

1. 主机规划

Saltstack_使用指南06_远程执行-指定目标

 

targeting minions文档

https://docs.saltstack.com/en/latest/contents.html

 

另请参见:

 

注意事项

修改了master或者minion的配置文件,那么必须重启对应的服务。

 

2. 目标指定方式

letter

match type

example

alt delimiter?

g

grains glob

g@os:ubuntu

yes

e

pcre minion id

e@web\d+\.(dev|qa|prod)\.loc

no

p

grains pcre

p@os:(redhat|fedora|centos)

yes

l

list of minions

l@minion1.example.com,minion3.domain.com or bl*.domain.com

no

i

pillar glob

i@pdata:foobar

yes

j

pillar pcre

j@pdata:^(foo|bar)$

yes

s

subnet/ip address

s@192.168.1.0/24 or s@192.168.1.100

no

r

range cluster

r@%foo.bar

no

matchers can be joined using boolean andor, and not operators.  【复合匹配的时候】

 

2.1. 当前有哪些minion

1 [root@salt100 ~]# salt '*' test.ping
2 salt02:
3     true
4 salt100:
5     true
6 salt03:
7     true
8 salt01:
9     true

 

3. 通过minion id匹配

3.1. 通配符匹配

在 top file 中也仍然适用。【推荐使用】

 1 # match all minions:
 2 salt '*' test.ping
 3 
 4 # match all minions in the example.net domain or any of the example domains:
 5 salt '*.example.net' test.ping
 6 salt '*.example.*' test.ping
 7 
 8 # match all the 「webn」 minions in the example.net domain (web1.example.net, web2.example.net … webn.example.net):
 9 salt 'web?.example.net' test.ping
10 
11 # match the 「web1」 through 「web5」 minions:
12 salt 'web[1-5]' test.ping
13 
14 # match the 「web1」 and 「web3」 minions:
15 salt 'web[1,3]' test.ping
16 
17 # match the 「web-x」, 「web-y」, and 「web-z」 minions:
18 salt 'web-[x-z]' test.ping

 

3.2. 正则表达式(-e)

使用较少,因为正则写错的几率会大些。

 

正则规则参见:

https://blog.csdn.net/woshizhangliang999/article/details/46859161

 

1 # match both 「web1-prod」 and 「web1-devel」 minions:
2 salt -e 'web1-(prod|devel)' test.ping

 

3.2.1. 在 top file 中的使用

1 base:
2   'web1-(prod|devel)':
3   - match: pcre  # 使用正则匹配
4   - webserver

 

3.3. 列表匹配(-l)

salt -l 'web1,web2,web3' test.ping  

 

4. 使用grains指定(-g)

1 # for example, the following matches all centos minions:
2 salt -g 'os:centos' test.ping
3 
4 # match all minions with 64-bit cpus, and return number of cpu cores for each matching minion:
5 salt -g 'cpuarch:x86_64' grains.item num_cpus

 

4.1. 嵌套匹配【细粒度匹配】

 1 [root@salt100 ~]# salt -g 'ip_interfaces:eth0' test.ping
 2 salt01:
 3     true
 4 salt02:
 5     true
 6 salt03:
 7     true
 8 salt100:
 9     true
10 [root@salt100 ~]# salt -g 'ip_interfaces:eth0:*11*' test.ping
11 salt01:
12     true

 

5. 使用pillar指定(-i)

像grains匹配一样,也支持嵌套匹配。

1 # 具体匹配
2 salt -i 'somekey:specialvalue' test.ping

 

5.1. 嵌套匹配【细粒度匹配】

1 [root@salt100 ~]# salt -i 'level1:level2:my_user:*zhang*' test.ping 
2 salt03:
3     true
4 salt02:
5     true

 

6. 子网/ip 地址匹配(-s)

1 # minions can easily be matched based on ip address, or by subnet
2 salt -s 172.16.1.11 test.ping     # 具体地址
3 salt -s 172.16.1.0/24 test.ping   # 网段
4 salt -s fe80::20c:29ff:fe95:1b7a test.ping  # ipv 6 具体配置
5 salt -s 2001:db8::/64 test.ping             # ipv 6 网段配置

 

6.1. 用于复合匹配

1 # ipcidr matching can also be used in compound matches
2 salt -c 's@10.0.0.0/24 and g@os:debian' test.ping

 

6.2. 用于pillar和状态的top file匹配

1 '172.16.0.0/12':
2    - match: ipcidr  # 匹配方式
3    - internal

 

7. 复合匹配(-c)

Saltstack_使用指南06_远程执行-指定目标

matchers can be joined using boolean andor, and not operators.  【复合匹配的时候】

 

 1 # the following string matches all 「debian minions」 with a hostname that begins with 「webserv」, as well as any minions that have a hostname which matches the regular expression 「web-dc1-srv.* 」:
 2 salt -c 'webserv* and g@os:debian or e@web-dc1-srv.*' test.ping
 3 
 4 # excluding a minion based on its id is also possible:
 5 salt -c 'not web-dc1-srv' test.ping
 6 
 7 # versions prior to 2015.8.0 a leading 「not」 was not supported in compound matches. instead, something like the following was required:
 8 salt -c '* and not g@kernel:darwin' test.ping
 9 
10 # excluding a minion based on its id was also possible:
11 salt -c '* and not web-dc1-srv' test.ping

 

7.1. 在 top file 中的使用

1 base:
2   'webserv* and g@os:debian or e@web-dc1-srv.*':
3     - match: compound  # 复合匹配
4     - webserver

 

7.2. 优先匹配

1 # 可以使用括号实现优先匹配
2 # 一定要注意括号和目标之间需要「空格」。不遵守此规则可能导致错误的目标!
3 salt -c '( ms-1 or g@id:ms-3 ) and g@id:ms-3' test.ping

 

7.3. 替换分隔符

1 # 默认为 「:」 改为其他字符分割
2 salt -c 'j|@foo|bar|^foo:bar$ or j!@gitrepo!https://github.com:example/project.git' test.ping

 

案例1

 1 [root@salt100 ~]# salt -c 'g@os:redhat03' test.ping
 2 salt01:
 3     true
 4 [root@salt100 ~]# 
 5 [root@salt100 ~]# salt -c 'g|@os|redhat03' test.ping  # 将分隔符从「:」 改为「|」
 6 salt01:
 7     true
 8 [root@salt100 ~]# salt -c 'g!@os!redhat03' test.ping  #将分隔符从「:」 改为「!」
 9 salt01:
10     true
11 [root@salt100 ~]# salt -c 'g!@os!redhat03 or salt02' test.ping 
12 salt02:
13     true
14 salt01:
15     true

 

案例2

 1 [root@salt-master-7 ~]# salt '*' pillar.item getos
 2 10.0.0.112:
 3     ----------
 4     getos:
 5         ----------
 6         apache:
 7             httpd
 8         git:
 9             git
10 172.16.1.111:
11     ----------
12     getos:
13         ----------
14         apache:
15             apache2:kkk
16         git:
17             git-core
18 salt-master-7:
19     ----------
20     getos:
21         ----------
22         apache:
23             httpd
24         git:
25             git
26 [root@salt-master-7 ~]# salt -i 'getos:apache:apache2:kkk' test.ping
27 172.16.1.111:
28     true
29 [root@salt-master-7 ~]# salt -c 'i@getos:apache:apache2:kkk' test.ping    # 因为有 apache2:kkk ,所以在某些情况下会出现错误 
30 172.16.1.111:
31     true
32 [root@salt-master-7 ~]# 
33 [root@salt-master-7 ~]# salt -c 'i#@getos#apache#apache2:kkk' test.ping   # 表示使用 # 作为分隔符,而不是 : 
34 172.16.1.111:
35     true

 

8. 节点组(-n)

备注:

1 1、当向主配置文件添加或修改节点组时,必须重新启动master,以便完全识别这些更改。
2 2、在不重启的情况下,可以使用命令行中 -n 作为目标的有限功能。

 

8.1. /etc/salt/master 配置

 1 # the nodegroups master config file parameter is used to define nodegroups. here's an example nodegroup configuration within 「/etc/salt/master」:
 2 nodegroups:
 3   group1: 'l@foo.domain.com,bar.domain.com,baz.domain.com or bl*.domain.com'
 4   group2: 'g@os:debian and foo.domain.com'
 5   group3: 'g@os:debian and n@group1'
 6   group4:
 7     - 'g@foo:bar'
 8     - 'or'
 9     - 'g@foo:baz'
10 
11 # as of the 2017.7.0 release of salt, group names can also be prepended with a dash【破折号】. this brings the usage in line with many other areas of salt. for example:
12 # 组节点也可以使用 如下方式。  组名前面到破折号「-」
13 nodegroups:
14   - group1: 'l@foo.domain.com,bar.domain.com,baz.domain.com or bl*.domain.com'
15 
16 注意:
17 nodegroups可以参考group3中看到的其他nodegroups,确保没有循环引用。循环引用将被检测到,并导致部分扩展产生日志错误消息。
18 注意:
19     「n@」 不能在命令行和top file中使用,只能在master config 中使用

 

8.2. 命令行匹配

salt -n group1 test.ping

 

8.3. 在 top file 中的使用

1 base:
2   group1:
3     - match: nodegroup  # 使用节点组匹配
4     - webserver

 

8.4. 根据列表的minion ids定义为节点组

 1 # 常规的定义方式
 2 nodegroups:
 3   group1: l@host1,host2,host3
 4 
 5 # yaml 定义方式
 6 nodegroups:
 7   group1:
 8     - host1
 9     - host2
10     - host3

 

9. 批量大小(-b)

1 # the 「-b」 (or 「--batch-size」) option allows commands to be executed on only a specified number of minions at a time.
2 # 同一时间执行多少 minion,支持百分比和数字。  
3 salt '*' -b 10 test.ping  # 同一时间执行 10 台,完毕后执行另外 10 台,依次执行下去
4 salt '*' -b 80% test.ping  # 同一时间执行 80% 的minion 端,完毕后执行另外 80%【实际是最后的 20%】。
5 salt -g 'os:redhat' --batch-size 25% apache.signal restart  # 
6 
7 # --batch-wait minion返回后,等待多少秒在发送命令给新的minion
8 salt '*' -b 25% --batch-wait 5 test.ping   # 第一批minion反馈后,等待 5 秒后,在发送命令给下一批的minion。

 

Saltstack_使用指南06_远程执行-指定目标