[root@node1 salt]# salt ‘node1‘ grains.item fqdn 获取某一个grains的item
node1:
----------
fqdn:
node1
或者使用get方法:
[root@node1 salt]# salt ‘node1‘ grains.get fqdn 获取某一个grains的值
node1:
node1
显示minion端的操作系统:
[root@node1 salt]# salt ‘node1‘ grains.get os 获取某一个grains的值
node1:
CentOS
在操作系统是CentOS上执行某命令:
[root@node1 salt]# salt -G os:CentOS cmd.run ‘w‘ -G:以grains类型作匹配
node1:
13:04:59 up 3:32, 2 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.44.1 11:42 0.00s 0.54s 0.35s /usr/bin/python
root pts/1 192.168.44.1 11:49 28:30 0.04s 0.04s -bash
node2:
13:04:59 up 1 day, 29 min, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.44.1 11:42 28:36 0.08s 0.08s -bash
[root@node1 salt]# salt "*" grains.item roles 获取roles这个item的grains信息
node1:
----------
roles:
- webserver
- memcache
node2:
----------
roles:
grains存在于minion端的配置文件中,可以使用配置grains进行将minion打一个标签,然后通过使用grains进行匹配,执行某操作:
[root@node1 salt]# egrep -v "^$|^#" /etc/salt/minion
master: 192.168.44.134
grains:
roles:
- webserver
- memcache
修改了配置文件,需要重启才能生效:
[root@node1 salt]# /etc/init.d/salt-minion restart
Stopping salt-minion:root:node1 daemon: OK
Starting salt-minion:root:node1 daemon: OK
执行操作:
[root@node1 salt]# salt -G "roles:memcache" cmd.run ‘echo "hello node1"‘
node1:
hello node1
-G "roles:memcache":匹配刚刚在minion端配置文件中的roles定义
当然如果不想将grains配置写在minion的配置文件中,那么可以将grains配置单独写在/etc/salt/grains中:匹配某一个minion端执行某一个命令
[root@node1 salt]# ll /etc/salt/grains,该grains需要事先进行创建
比如:
[root@node1 salt]# cat /etc/salt/grains
roles: nginx
[root@node1 salt]# /etc/init.d/salt-minion restart
Stopping salt-minion:root:node1 daemon: OK
Starting salt-minion:root:node1 daemon: OK
[root@node1 salt]# salt -G "roles:nginx" cmd.run ‘echo "node1 nginx"‘
No minions matched the target. No command was sent, no jid was assigned.
ERROR: No return received
报错原因:/etc/salt/grains 改配置文件中的key为roles与minion中的key值roles一致,导致冲突了,修改该key就可以解决
[root@node1 salt]# cat /etc/salt/grains
web: nginx
[root@node1 salt]# /etc/init.d/salt-minion restart
Stopping salt-minion:root:node1 daemon: OK
Starting salt-minion:root:node1 daemon: OK
[root@node1 salt]# salt -G "web:nginx" cmd.run ‘echo "node1 nginx"‘
node1:
node1 nginx
pillar:只有在master配置文件中才会用到设置pillar
默认pillar没有打开
[root@node1 salt]# salt "*" pillar.items
node1:
----------
node2:
----------
需要在master配置文件中开启:
[root@node1 ~]# egrep -v "^#|^$" /etc/salt/master
file_roots:
base:
- /srv/salt
pillar_opts: True
[root@node1 ~]# /etc/init.d/salt-master restart
Stopping salt-master daemon: [确定]
Starting salt-master daemon: [确定]
[root@node1 ~]# salt "*" pillar.items
node2:
----------
master:
----------
__role:
master
allow_minion_key_revoke:
pillar支持环境,base环境或其他,pillar也有一个入口目录,入口文件top file,top file必须放在base环境下面,打开base环境设置:
[root@node1 ~]# egrep -v "^#|^$" /etc/salt/master
pillar_roots:
base:
- /srv/pillar
创建该文件:[root@node1 ~]# mkdir /srv/pillar
重启master服务:[root@node1 ~]# /etc/init.d/salt-master restart
[root@node1 pillar]# cat apache.sls
{% if grains[‘os‘] == ‘CentOS‘ %}
apache: httpd
{% elif grains[‘os‘] == ‘Debian‘ %}
apache: apache2
{% endif %}
[root@node1 pillar]# cat top.sls
base:
‘*‘:
- apache
将pillar的True再次修改为False,重启master,查看上面编写的sls文件是否已经生效
[root@node1 pillar]# salt ‘*‘ pillar.items
node2:
----------
apache:
httpd
node1:
----------
apache:
httpd
设置完了pillar,需要进行刷新才能够使用:
[root@node1 pillar]# salt ‘*‘ saltutil.refresh_pillar
node2:
True
node1:
True
[root@node1 pillar]# salt -I ‘apache:httpd‘ test.ping 刷新了才能调用pillar的设置,-I表示使用pillar匹配
node2:
True
node1:
True