自动化运维工具--SaltStack-分组(使用记录,groups)

Posted by Yancy on 2015-11-01

自动化运维工具–SaltStack-分组(使用记录,groups)

在使用 SaltStack 对主机进行批量管理的时候,因为不同的服务器组所做的业务功能不同,因此为了更加方便的管理,为了便于管理功能业务相似的minion,Saltstack提供了分组的模式,因为线上机器多,不可能每次都是“*”或者“ip主机名” 这样不现实的。

所以我们现在都是提供分组,哪里的机器分哪个组这样你操作起来就方便而且容易排查,因此就自己在分组使用的过程中有以下一点记录下。

官方文档:http://docs.saltstack.com/topics/targeting/nodegroups.html

参考 SaltStack 的官方文档 4.4 Compound matchers 和 4.3. Node groups 知道,对目标服务器分组有以下七种方式,这七种方式的标示符分别为:

  • 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
  • R – 针对客户端范围做匹配,例如: R@%foo.bar

然后我自己在做分组的时候,尝试了下 L 是否可以使用正则表达式

配置:

编辑配置文件 vi /etc/salt/master 这里大约706-714行:
原文:

1
2
3
4
5
6
7
8
##### Node Groups #####
##########################################
# 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'

绿色的是指定组名:可以定义自己好记的组名,应用服务器是需要同样配置的,可以放在同一个分组。
修改配置:
注意:这里组名前面:需要空格,每个用户key名称,都逗号隔开。

1
2
3
4
5
#nodegroups:
# group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com and bl*.domain.com'
# group2: 'G@os:Debian and foo.domain.com'
ihaozhuo1: ''L@d_104_article_1,d_108_account_1,d_109_comm_1,d_110_consumer_1‘
ihaozhuo2: 'L@api'

我们来测试下:

-N 是指定分组名称:

执行命令 sudo salt -N “ihaozhuo1” test.ping结果为:

1
2
3
4
5
6
7
8
9
10
11
12
[root@jumper ~]# salt -N 'ihaozhuo1' test.ping
d_104_article_1:
True
d_108_account_1:
True
d_109_comm_1:
True
d_110_consumer_1:
True
[root@jumper ~]# salt -N 'ihaozhuo2' test.ping
api:
True

分组分好几台一起,是可以获取的。匹配指定的key

修改配置尝试一:

1
2
3
4
#nodegroups:
# group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com and bl*.domain.com'
# group2: 'G@os:Debian and foo.domain.com'
ihaozhuo1: ‘ L@JF1-TEST1-001,JF1-TEST1-002 or JF-TEST1-0[0-9][0-9]'

执行命令 sudo salt -N TEST1 test.ping结果为:

1
2
3
4
5
6
7
8
9
10
11
12
JF1-TEST1-002:
True
JF1-TEST1-001:
True
JF1-TEST1-003:
True
JF1-TEST1-004:
True
JF1-TEST1-006:
True
JF1-TEST1-005:
True

匹配了所有指定的key.

使用 L 列表的方式,必须把 minion 列出来,或者是列出几台后,在后面接 or 或者 and 表达式, or 或者 and 后面接的表达式后面可以使用正则表达式。

注:想使用正则表达式,最好的方式就是使用E