说明: 这里的 * 必须是在 master 上已经被接受过的客户端,可以通过 salt-key 查到,通常是我们已经设定的 id 值。关于这部分内容,它支持通配、列表以及正则。 比如两台客户端 client1、client2, 那我们可以写成 salt 'client*' salt 'client[2]' salt -L 'client1,client2' salt -E 'client(1|2)' 等形式,使用列表,即多个机器用逗号分隔,而且需要加-L,使用正则必须要带-E选项。 它还支持 grains 和 pillar,分别加 -G 和 -I 选项。
[root@saltstack ~]# salt -E 'client(1|2)' cmd.run 'ls' client1: anaconda-ks.cfg initial-setup-ks.cfg one-click-install-lnmp.sh client2: anaconda-ks.cfg initial-setup-ks.cfg one-click-install-lnmp.sh [root@saltstack ~]# salt -L 'client1,client2' cmd.run 'ls' client1: anaconda-ks.cfg initial-setup-ks.cfg one-click-install-lnmp.sh client2: anaconda-ks.cfg initial-setup-ks.cfg one-click-install-lnmp.sh [root@saltstack ~]# salt 'client[2]' cmd.run 'ls' client2: anaconda-ks.cfg initial-setup-ks.cfg one-click-install-lnmp.sh [root@saltstack ~]# salt 'client*' cmd.run 'ls' client2: anaconda-ks.cfg initial-setup-ks.cfg one-click-install-lnmp.sh client1: anaconda-ks.cfg initial-setup-ks.cfg one-click-install-lnmp.sh grains 和 pillar1、grains
grains 是在 minion(客户端)启动时收集到的一些信息,比如操作系统类型、网卡ip等。
使用命令:
grains的信息并不是动态的,并不会时时变更,它只是在 minion 启动时收集到的。grains 也可以做配置管理
自定义 grains的方法有两种(客户端自定义配置和服务端写脚本定义):
1.客户端配置(缺点:每台都得去配置,机器多了配置起来不方便)
或者
[root@client2 ~]# vi /etc/salt/minion +12 去掉这行内容的注释 default_include: minion.d/*.conf [root@client2 ~]# cd /etc/salt/minion.d/ [root@client2 minion.d]# vi custom_grains.conf // 添加下面内容 grains: role: nginx env: test myname: primum est重启minion服务
[root@client1 ~]# systemctl restart salt-minion [root@client2 ~]# systemctl restart salt-minion服务端获取 grains
[root@saltstack ~]# salt 'client*' grains.item role env myname // 列出多个 client1: ---------- env: test myname: primum est role: nginx client2: ---------- env: test myname: primum est role: nginx [root@saltstack ~]# salt 'client*' grains.get myname // 列出单个 client1: primum est client2: primum est [root@saltstack ~]# salt 'client*' grains.item myname client2: ---------- myname: primum est client1: ---------- myname: primum estgrains 在远程执行命令时很方便。我们可以按照 grains 的一些指标来操作。比如把所有的 web 服务器的 grains 的 role 设置为 nginx,那这样我们就可以批量对 nginx 的服务器进行操作了:
[root@saltstack ~]# salt -G role:nginx cmd.run 'hostname' client2: client2 client1: client1 [root@saltstack ~]# salt -G os:CentOs cmd.run 'hostname' client2: client2 client1: client12.服务端写Python脚本
[root@saltstack ~]# mkdir /srv/salt/_grains [root@saltstack ~]# cd /srv/salt/_grains/ [root@saltstack _grains]# vi mytest.py // 添加下面内容 #!/usr/bin/env python # _*_ coding:utf-8 _*_ import os def my_test(): grains = {} grains['say'] = 'hello world' return grains def my_test1(): grains = {} with os.popen('free -m') as f: grains['mem_usage'] = f.read() return grains同步到客户端
[root@saltstack _grains]# salt 'client*' saltutil.sync_all
客户端验证脚本是否同步过去
[root@client1 ~]# ll /var/cache/salt/minion/extmods/grains/ 总用量 8 -rw------- 1 root root 266 4月 27 11:13 mytest.py -rw------- 1 root root 613 4月 27 11:13 mytest.pyc服务端刷新模块
[root@saltstack _grains]# salt 'client*' sys.reload_modules client1: True client2: True服务端查看客户端自定义的两个监控项
[root@saltstack _grains]# salt 'client*' grains.item say client1: ---------- say: hello world client2: ---------- say: hello world [root@saltstack _grains]# salt 'client*' grains.item mem_usage client2: ---------- mem_usage: total used free shared buff/cache available Mem: 220 103 31 4 85 78 Swap: 2046 176 1870 client1: ---------- mem_usage: total used free shared buff/cache available Mem: 220 106 30 2 83 76 Swap: 2046 178 1868可以看到服务端写自定义监控项的脚本,可以一键同步到所有客户端上,快捷方便。