首页 > 代码库 > 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