标签:部分 内容 cat close web splay r文件 表达 集合
明确标记minion的角色,利用minion端的主机名或系统信息,被定义的特定角色组或是一个组合标记。
譬如,指令一个minion执行重启apache服务的命令:
salt web1 apache.signal restart
类似于top里面的sls文件
1 webserver.sls: 2 base: 3 ‘web1‘: 4 - webserver
匹配的方法可以是变量,正则表达式等
利用grains变量来标记minion
示例:
salt -G ‘os:Fedora‘ test.ping
-G指以组的方式执行
os:Fedora为minion端grains变量环境匹配
查看minion端的grains变量
salt ‘*‘ grains.items
使用复合的方法标记minion
salt -C ‘G@os:Debian and webser* or E@db.*‘ test.ping
使用salt --help查看salt命令选项的用法
-C 允许使用grains变量组合的方式执行模块
匹配的具体使用方法如下图:
匹配条件复合的方式可以添加and,or,not逻辑和优先的情况
示例:
salt -C ‘( ms-1 or G@id:ms-3 ) and G@id:ms-3‘ test.ping
关于复合条件的使用方法参考链接:
https://docs.saltstack.com/en/2016.11/topics/targeting/compound.html#targeting-compound
使用nidegroup进行分组
nodegroups:
group1: ‘L@foo.domain.com,bar.domain.com,baz.domain.com and bl*.domain.com‘
group2: ‘G@os:Debian and foo.domain.com‘
group3: ‘G@os:Debian and N@group1‘
#group3组可以包含group1定义的内容,让minion分类更简洁和灵活
######################################################################################################################################
更细致的了解minion匹配的方法
salt将minion ID作为minion的唯一标记,这个ID被用于和master生成公私钥,建立明确的关系,如果ID变化之后会被视为另一个minion并需要重新被认证。
GLOBBING
通配的方式:
示例:
1 salt ‘*‘ test.ping 2 salt ‘web?.example.net‘ test.ping 3 salt ‘web-[x-z]‘ test.ping
正则表达式的方式:
salt -E ‘web1-(prod|devel)‘ test.ping
sls文件中的使用示例:
1 base: 2 ‘web1-(prod|devel)‘: 3 - match: pcre 4 - webserver
注意:无论是在命令行还是在sls文件中都需要指定执行匹配的方法,至于匹配的对象则可以包括id,grains,pillar等
利用grains数据来匹配minion
示例:
salt -G ‘cpuarch:x86_64‘ grains.item num_cpus
利用pillar变量的方式匹配minion,前提是minion端需要定义好pillar变量
salt -I ‘somekey:specialvalue‘ test.ping
利用IP地址或网络的方式进行匹配
salt -S 192.168.40.20 test.ping
salt -S 2001:db8::/64 test.ping
#注意,即使指定单个IP执行,消息也会被扩散到整个salt集群中
1 ‘172.16.0.0/12‘: 2 - match: ipcidr 3 - internal
复合条件匹配,参考上图
定义node组进行匹配
默认目录在/etc/salt/master
1 nodegroups: 2 group1: ‘L@foo.domain.com,bar.domain.com,baz.domain.com or bl*.domain.com‘ 3 group2: ‘G@os:Debian and foo.domain.com‘ 4 group3: ‘G@os:Debian and N@group1‘ 5 group4: 6 - ‘G@foo:bar‘ 7 - ‘or‘ 8 - ‘G@foo:baz‘ 9 #在组合组里面and,or产生的是一种集合关系
使用示例:
salt -N group1 test.ping
1 base: 2 group1: 3 - match: nodegroup 4 - webserver
使用示例:
1 nodegroups: 2 group1: L@host1,host2,host3 3 4 nodegroups: 5 group1: 6 - host1 7 - host2 8 - host3
在sls文件(指的是state文件)中使用nodegroup分组信息进行匹配,nodegroup这个数据结构本身也属于pillar数据的一部分
首先需要让minion端收到服务器端定义的pillar变量,所以在master端打开pillar_opts选项:
pillar_opts: True
配置示例:
1 nodegroups: 2 webserver: ‘G@os:Debian and L@minion1,minion2‘ 3 4 {% if grains.id in salt[‘pillar.get‘](‘master:nodegroups:webserver‘, []) 5 and grains.os in salt[‘pillar.get‘](‘master:nodegroups:webserver‘, []) %} 6 ... 7 {% endif %}
解析:
和以往的配置方式不一样的是,以前使用的是sls文件里面引入pillar环境变量,pillar变量在master端已经被处理好了,只剩下grains变量在minion端处理,而上面的示例则是在sls文件中将pillar变量放在minion端处理,里面包装的grains也在minion端被处理。
看点与槽点:
使用上面示例的配置看似可以让配置变得更加灵活,但也会感觉有些困惑
a)将master端的敏感数据开放到minion端是否合适
b)这样的配置会被扩散到整个salt集群,如果nodegroup被清晰的定义为ID,就会减少不必要的匹配和额外的消息负担
c)我觉得这样的配置方式适用于角色清晰,但是成员变动较为频繁的环境中,尤其在多环境优势比较明显,因为pillar变量在mminion端就是一个大字典。
d)将部署环境设计成角色与任务分离,还是将任务与角色彻底融合的问题,我感觉这是一个分久必合合久必分的命题,还是根据实际情况进行综合考虑吧。
分批次执行,支持百分比和绝对数量
示例如下:
salt ‘*‘ -b 10 test.ping
salt -G ‘os:RedHat‘ --batch-size 25% apache.signal restart
执行逻辑是将整个任务分解成批次进行,完全理解为一批也不准确,确切的说应该是相当于一个任务池,一边出一边进,使用--batch-wait可以控制递补的自减间隔。
支持range的方式配置
步骤:
(1)master导入模块
python -c ‘import seco.range‘
(2)配置master文件,需要重启生效
range_server: my.range.server.com:80
(3)配置定义分组的yaml文件
$ cat /etc/range/test.yaml
CLUSTER: host1..100.test.com
APPS:
- frontend
- backend
- mysql
(4)使用示例
salt --range %test:CLUSTER test.ping
salt --range %test:APPS test.ping
TARGETING MINIONS (minion标记与匹配)
标签:部分 内容 cat close web splay r文件 表达 集合
原文地址:http://www.cnblogs.com/solitarywares/p/7465507.html