首页 > 代码库 > Saltstack 学习之target minions(一)
Saltstack 学习之target minions(一)
本文总结saltstack如何定位目标主机,以及介绍一些常见使用样例。
> 为什么需要定位主机?
作为配置管理软件,首先要解决的是如何确定一次推送的主机,或者说特定配置的推送目标。试问如果无法很好的确定一次或多次推送的目标,又何谈实现大批主机的分类配置管理的自动化呢?
> saltstack的target机制?
saltstack 为此建立了一套很是完善的minion定位机制。官方术语叫“target
minions”,即通过多种途径,指定minion具有的属性(比如正则匹配minion
id,或是匹配minion的特定grains属性等)来区分出本次推送命令或状态的对应目标,以下是salt提供的匹配主机的方法:
globbing (默认的匹配方式,linux shell风格的通配)
Perl-compatible regular expressions (E,即正则匹配方式,对象同样是minion id)
Lists (L,直接是一串minion id 列表)
Grains (G/P,使用grains值匹配,P是使用正则匹配方式,G则是默认通配方式。)
NodeGroup (N,master配置文件里预定义好的组别信息)
Subnet(S,利用minion 的IP属性进行匹配)
Range cluster (R,设置range服务器反馈值匹配?暂时没搞懂)
Pillar(I,简单,用pillar数据匹配)
Compound(C,组合匹配方式,以上述一种或多种方式联合匹配)
一些常见的target例子:
salt ‘*‘ test.ping -v salt ‘Cloud[1-5]‘ test.ping -v salt ‘test*‘ test.ping -v salt -E ‘Test.*‘ test.ping -v salt -L ‘TestVM01,TestVM02‘ test.ping -v #中间不要有空格salt -G ‘os:CentOS‘ test.ping -v #同样的,不要有多余字符salt -N ‘group1‘ test.ping -v salt -S ‘127.0.0.1‘ test.ping -v #minion只要在这个子网就会匹配salt -C ‘E@TestVM0.* and G@os:CentOS‘ test.ping -v #允许逻辑运算#另外的,暂时没有应用过,留待以后补充……
> saltstack 源代码解读(0.17.5)
1、salt-master端
target相关代码均是零散分布于 /usr/lib/python2.6/site-packages/salt/client/__init__.py(1151行为pub方法),其实 在master端并没有完成太多解析任务,只是完成了诸如Range server的解析等简单工作。推送命令的原理即master 通过run_job方法统一发布job,然后该方法通过zmq发布pub,所有minion均会接收到该数据,并根据是否满足要求来完成后续工作。
2、salt-minion端
这里即完成主要的匹配工作,minion的代码位于 /usr/lib/python2.6/site-packages/salt/minion.py (主要代码为1485行开始的Matcher类,里面进一步调用了saltutil的比较方法,从而确认是否匹配),这里取其中一个简单的例子予以讲解。
def pcre_match(self, tgt): ‘‘‘ Returns true if the passed pcre regex matches ‘‘‘ #这里注意一下,使用re模块实现正则匹配,然后反馈的 #是boolean值,其他方法类似,即反馈minion是否match。 return bool(re.match(tgt, self.opts[‘id‘]))
> 使用Batch选项分批次运行
saltstack 提供了-b 选项,允许对target选中的所有主机进行分批次处理,每次只推送指定的数量或百分比,直至全部推送完毕。个人感觉这个比较鸡肋,分批次运行最好还是自 己定制一下,用salt的python client写个辅助脚本应该效果更好点,毕竟这个不能打断,也无法把握。
salt ‘*‘ -b 10 test.ping #一次10台,分批推送 salt -G ‘os:RedHat‘ --batch-size 25% test.ping #一次跑25%
参考: salt官网
本文出自 “爱博客” 博客,请务必保留此出处http://jackywu.blog.51cto.com/3011457/1434911