Grains是saltstack的一个组件,它存放着minion启动时收集到的系统底层的详细信息,每次minion启动时,就会进行Grains的采集并保存下来,在之后的生命周期里面,除非你再次重启minion,不然Grains是不会从新收集的。Grains的信息是静态信息。php
那么Grains会收集哪些信息呢?最好详细了解它的内容!grains与远程执行走的更近一些。node
Grains are collected for the operating system, domain name, IP address, kernel, OS type, memory, and many other system properties(属性).nginx
r Grains可以在state系统中使用,用于配置管理模块。web
r Grains可以在target中使用,再用来匹配minion,好比匹配操做系统,使用-G选项。apache
r Grains可以用于信息查询,Grains保存着收集到的客户端的详细信息。vim
~ Available grains can be listed by using the 'grains.ls' module安全
salt 'saltstack-node1*' grains.ls
~ Grains data can be listed by using the 'grains.items' module(超级详细)bash
salt 'saltstack-node1*' grains.items
~ 只显示item 里的os值,注意item后面没有s服务器
salt '*' grains.item os
~ fqdndom
salt 'saltstack-node1*' grains.get fqdn
~ domain
salt 'saltstack-node1*' grains.get domain
~ ip4_interfaces
salt 'saltstack-node1*' grains.get ip4_interfaces
有三种方式,建议使用第2种,自定义grains文件,而不是在minion的配置文件中修改。
在minion配置文件中,支持配置grains。好比说,给一台机器打一个标签,标签内容是webserver,这样之后在作管理时,好比说,重启全部的webserver服务时,那么咱们就可使用这个标签(即grains的值)来获取。
不建议在这里配置,由于会比较混乱,须要在每个minion端配置,工做量大而且很差统一。
~ 修改minion配置文件
[root@saltstack-node1 ~]# vim /etc/salt/minion#在minion配置文件中定义grains grains: role: webserver env: test # key: value # key是关键字,查询时输入key,返回的值是value。 # role表明机器扮演的角色是什么(key),webserver表明是一台webserver服务器(value) # env表明环境(key),test表明测试环境(value)
~ 验证命令:验证时,会有延时,要耐心等待,最好先用test.ping 来测试连通性。
salt 'saltstack-node1*' grains.get role salt 'saltstack-node1*' grains.get env
~ 官网案例
grains: roles:#第1个key - webserver#这样写表明列表形式,即这台机器扮演多个角色(value1) - memcache#这样写表明列表形式,即这台机器扮演多个角色(value2) deployment: datacenter4#第2个key,只有1个value cabinet: 13 cab_u: 14-15
~ 小结
r 会有延时,须要耐心等待与测试。
r 不建议使用这种方式定义grains。
第2种配置方式有个优势,能够把自定义的grains抽取出来,把配置写好后,再批量分发给不一样的minion端,这样就能够统一自定义的grains,并且配置还特别简单。
~ 建立并修改grains文件
#注意写法!test表明测试环境。 [root@saltstack-node1 ~]# vim /etc/salt/grains cloud: openstack roles: - nginx - php env: test #配置完成后,必需要重启minion服务。
~ 验证命令
salt 'saltstack-node1*' grains.get cloud salt 'saltstack-node1*' grains.get roles salt 'saltstack-node1*' grains.get env
若是出现下面的报错,可以先test.ping,看是否有问题。服务端推送的时候,常常会有延时。
第3种用法,是在top file里面编写。
~ 建立并编写top file
[root@saltstack-node1 ~]# vim /etc/salt/top.sls base: 'role:nginx' - match: grain - web.nginx # 必定要加上match关键字,匹配grain这个词。
~ 和原来写好的对比
[root@saltstack-node1 salt]# cat /srv/salt/top.sls base: '*':# 就是在这个地方,有改变,能够用grains来匹配minion端,还行下面一行有改变 - apache
用于信息查询,或执行命令均可以,在target中匹配minion,必须加 -G 选项。
salt -G cloud:openstack cmd.run 'df -h' salt -G env:test cmd.run 'ifconfig eth0|awk NR==2' salt -G roles:php cmd.run 'uname -r' salt -G os:CentOS cmd.run 'whoami'
Pilla也是saltstack的一个重要组件,在salt0.9.8版本增长了Pilla(动态数据)。
存储位置:存储在master端,存放须要提供给minion的信息。
应用场景:用来存储敏感的信息,每一个minion只能访问master分配给本身的Pilla。
它比较安全,grains比较不安全。
它的好处是,能够指定,只能在master端指定。
Pilla和配置管理,走的更近一些,而grains与远程执行走的更近一些。
~ Step1:指定pillar的根
[root@saltstack-node1 salt]# vim /etc/salt/master#去掉注释 pillar_roots: base: - /srv/pillar [root@saltstack-node1 salt]# mkdir -p /srv/pillar#建立pillar的根目录 [root@saltstack-node1 salt]# cd /srv/pillar [root@saltstack-node1 pillar]# /etc/init.d/salt-master restart#重启服务
~ Step2:自定义pillar的标签
[root@saltstack-node1 pillar]# vim zabbix.sls Zabbix_Server: 10.0.0.22 #第1个是key,第2个是value
~ Step3:配置top file
[root@saltstack-node1 pillar]# vim top.sls base: 'saltstack-node2.example.com': - zabbix
~ Step4:刷新
[root@saltstack-node1 pillar]# salt '*' saltutil.refresh_pillar saltstack-node2.example.com: True saltstack-node1.example.com: True
~ 验证
[root@saltstack-node1 pillar]# salt '*' pillar.item Zabbix_Server saltstack-node1.example.com: ---------- saltstack-node2.example.com: ---------- Zabbix_Server: 10.0.0.22
salt '*' pillar.items
salt '*' pillar.item Zabbix_Server salt '*' pillar.get Zabbix_Server
salt -I 'Zabbix_Server:10.0.0.22' test.ping salt -I 'Zabbix_Server:10.0.0.22' cmd.run 'getenforce'
名称,存储位置,数据类型,数据采集更新方式,应用
grains,minion端,静态数据,minion启动时收集,也可使用saltutil.sync_grains进行刷新。,存储minion基本数据。好比用于匹配minion,自身数据能够用来作资产管理等。
pillar,master端,动态数据,在master端定义,指定给对应的minion,也可使用saltutil.sync_pillar刷新。,存储master指定的数据,只有指定的minion可以看到,用于存储敏感数据。
命令:含义
salt '*' grains.ls#列出全部可用的grains(key) salt '*' grains.items#列出全部grains的数据(key && value) salt '*' grains.item os#只列出grains的os数据(key && value) salt '*' grains.get os#获取指定的grains值(value) salt -G cloud:openstack cmd.run 'df -h'#grains配合远程执行,匹配target #注意:key和value都要写,但中间没有空格 , salt '*' pillar.items#查看系统内置的pillar salt '*' pillar.item Zabbix_Server#只查看指定的pillar(key && value) salt '*' pillar.get Zabbix_Server#获取指定的pillar值(key) salt -I 'Zabbix_Server:10.0.0.22' test.ping#pillar配合远程执行,匹配target #注意:key和value都要写,但中间没有空格