xjq1986 发表于 2014-01-28 11:46

salt之grains,节点组,复合匹配,同时执行

本帖最后由 xjq1986 于 2014-01-28 11:59 编辑

   salt配备了一个接口,以获得关于底层的系统信息。这就是所谓的信息界面,因为它提供给salt一些信息。这种信息是minion启动时就会收集,所以这种信息是静态的,不会改变,就像操作系统名称,内核名称是不会变的。

使用方法:

1.匹配所有的centos客户端
   salt -G 'os:CentOS' test.ping2 .匹配客户端是否64位cpu,并返回cpu的核心数,这台虚拟机不是64位的,只是i386的机器


3.列出所有可以获取的信息条目
salt '*' grains.ls4.列出客户端所有的静态信息

salt '*' grains.items
5.获取客户端单条静态信息(例如:kernelrelease)

salt '*' grains.item kernelrelease
虽然grains的信息是静态的,但是也是可以配置的

编辑/etc/salt/minion

添加以下内容重启minion,再用salt '*' grains.items 就能看到自定义的信息,如果你不想把这些配置文件放入/etc/salt/minion,可以放到/etc/salt/grains (注意缩进)

grains:
    roles:
      - webserver
      - memcache
    deployment: datacenter4
    cabinet: 13
    cab_u: 14-15


当你获取到一台机的软硬件的静态信息了,一般就可以统计出所有机器资料,做出报表了,不用再费心思写shell去查找一些信息了



扩展
1.可以自己写一个grains模块

2.可以把这种匹配放在pillar,更好的匹配你想要的客户端

3.使用state.highstate或者saltutil.sync_grains或者saltutil.sync_all模块同步grains信息



(这些我也在研究中) ……


   
salt之复合匹配
在匹配类型前加个@,可以复合匹配



Ggraints匹配
Epcre正则表达式匹配
P使用正则表达式匹配gaints
L列出客户端
I   pallar匹配
S子网和IP匹配
R集群范围匹配


salt之节点组


编辑/etc/salt/master文件,添加以下信息

nodegroups:
group1: ’L@foo.domain.com,bar.domain.com,baz.domain.com or bl*.domain.com’
group2: ’G@os:Debian and foo.domain.com’

有了上面的多种匹配,就可以定义不同的客户端进入不同的组,方便管理和执行命令



salt 限制同时执行

使用 -b 或--batch-size 限制同时执行的客户端数
salt '*' -b 10 test.ping
salt -G 'os:RedHat' --batch-size 25% apache.signal restart

第一条命令的意思是,所有的主机执行test.ping,但是同时只有10台机在运行,其它机在等待,当有一台机执行返回,轮到下一台机执行,始终保持10台机在运行

第二条命令的意思是,匹配出客户端后,总数的25%的客户端在执行重启apache

这个命令还是挺有意思,不会大范围同时执行,而是分批执行



wenhq 发表于 2014-01-28 23:59

不错。加油。

ttt4011 发表于 2014-02-02 20:48

用grains匹配比较慢,估计是会搜索全部的minion的grains,而匹配id比较快。

夏尾鱼 发表于 2018-06-22 13:55

厉害了~学习学习:mrgreen:
页: [1]
查看完整版本: salt之grains,节点组,复合匹配,同时执行