设为首页 收藏本站
查看: 1780|回复: 0

[经验分享] (四)slatstack静态数据系统grains

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-12-21 09:39:23 | 显示全部楼层 |阅读模式
Grains:静态数据, 当minion启动的时候收集minion本地的相关信息
操作系统版本,内核版本,CPU,内存,硬盘,设备型号,序列号

应用场景:

  1)资产管理系统,信息查询
  2)用于目标选择(找到100台机器当中,内存是64G系统机器有哪些)
  3)配置管理中使用


salt的数据系统主要有两个方面,其中一个就是Grains,那么可能有人会说数据系统到底有什么用呢?我们设想这样一个例子?假如说领导让我们收集服务器的SN号,这时如果我们手动去收集可能。。。。。(后果太严重,不敢设想)。再比如假设我们的环境不统一,我们要在所有centos系统上执行操作,这时就需要我们的grains了。
    首先说Grains的数据是在minion端启动的时候进行加载的,所以如果自定义了Grains参数就必须要重启minion端才会进行获取。现在我们将正式开始Grains之旅。




总结:
简单的理解Grains的数据系统是通过key的名称和key的值去区分远程主机的。

列出Grains可用key

[iyunv@master salt]# salt 'salt-client.com' grains.ls
salt-client.com:
    - SSDs
    - biosreleasedate
    - biosversion
    - cpu_flags
    - cpu_model
    - cpuarch
    - domain

列出key下面的指标值可以这样子理解
[iyunv@master salt]# salt 'salt-client.com' grains.items
salt-client.com:
    ----------
    SSDs:
    biosreleasedate:
        07/31/2013
    biosversion:
        6.00


查看你想要的项
例如我要查询机器的快速服务代码

[iyunv@master salt]# salt 'salt-client.com' grains.item server_id
salt-client.com:
    ----------
    server_id:
        1644829902
#请注意,本次的item后面没有s


[iyunv@master salt]# salt 'salt-client.com' grains.get server_id
salt-client.com:
    1644829902
#也可以直接get,相比item的方式get返回显得更清爽些,直接返回所需的数值



要在所有centos上执行一个命令,可以通过grains的返回值进行匹配即可

[iyunv@master salt]# salt 'salt-client.com' grains.get os #获取所有主机的os信息,os是grains的一个key的值
salt-client.com:
    CentOS
[iyunv@master salt]# salt -G os:Centos cmd.run 'df -h'
salt-client.com:
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda2       7.9G  1.7G  5.9G  22% /
    tmpfs           242M   12K  242M   1% /dev/shm
    /dev/sda1       194M   29M  155M  16% /boot

#其中-G代表的方式就是以grains方式进行匹配,只看centos机器的信息,不是centos系统的不看,远程主机的操作系统可能不一样




grains自定义key

假设有一天nginx发现了一个严重bug,需要对所有nginx服务器进行升级,这时如果我们在之前定义grains就可能通过匹配到所有nginx主机,进而漏洞的修复。



grains的定义其实很简单,只需要修改client端的配置文件即可,
vim /etc/salt/minion    #进入之后我们搜索grains之后取出相应的注释

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

修改后
grains:
  roles:         #-->roles则代表角色
    - webserver  #这台机器的角色是webserver 如果要定义多个角色请在下方通过- 角色名的方式添加(注意前面的四个空格)
#    - memcache
#  deployment: datacenter4
#  cabinet: 13
#  cab_u: 14-15


/etc/init.d/salt-minion restart    #由于grains是在重启时收集的所以我们新增加的信息必须重启才会生效


进行验证
salt -G roles:webserver cmd.run "date"    #由于我们只在minion1上进行了修改因此只有minion1的结果进行了返回

[iyunv@master salt]# salt -G roles:webserver cmd.run "date"
salt-client.com:
    Thu Dec 15 07:16:04 CST 2016


把grains信息单独定义一个文件

vim /etc/salt/grains    #这个文件默认是没有的,用vim这种方式建立即可

[iyunv@client ~]# cat /etc/salt/grains
web:  #-->key的名称
    - nginx     #key的值

值得注意的是,如果在配置文件里minion里配置了grains同时又在/etc/salt/grains里配置了grains应确保key的名称不重复。如果重复那么只有minion里的配置才会生效


/etc/init.d/salt-minion restart


salt -G web:nginx cmd.run 'date'    #其中web是我们定义的key的名称而nginx是key的值,这条命令是指在所有nginx主机上执行date命令

[iyunv@master salt]# salt -G web:nginx cmd.run 'date'
salt-client.com:
    Thu Dec 15 07:24:39 CST 2016





开发python脚本来管理自定义grains,python脚本放置的路径一定是/srv/salt/_grains
例如:
[iyunv@master ~]# mkdir /srv/salt/_grains
[iyunv@master ~]# cd /srv/salt/_grains
vim my_grains.py
#!/usr/bin/env python
#-*- coding: utf-8 -*-
def my_grains():
  #初始化一个grains字典
  grains = {}
  #设置字典中的key-valaue
  grains['iaas'] = 'openstack'
  grains['www'] = 'bier'
  #返回这个字典
return grains
然后保存退出

然后把在master写的grains同步给给minion(同步master写的grains到minion端的/var/cache/salt)

#然后刷新配置文件具体命令:
[iyunv@master _grains]# salt '*' saltutil.sync_grains
salt-client.com:
    - grains.my_grains


查看一下
[iyunv@master _grains]# salt '*' grains.item iaas
salt-client.com:
    ----------
    iaas:

可以看看minion端的日志python脚本返回了什么


grains的优先级:
 1.系统自带
 2.grains文件写的
 3.minion配置文件写的
 4.自己写的


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-317216-1-1.html 上篇帖子: (三)slatstack配置管理 下篇帖子: (五)slatstack动态数据系统pillar
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表