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

[经验分享] saltstack(四)grains(一)

[复制链接]

尚未签到

发表于 2018-8-1 10:26:48 | 显示全部楼层 |阅读模式
  grains是个啥呢?
  grains其实是一些静态data,对,是数据。这个数据是个啥结构呢?是key: value的结构
  这些数据是属于谁的?属于minion的,也就是说grains是minion私有的数据,和别人不搭嘎的
  当minion启动的时候,这些数据会被加载到内存里面,然后grains就保持不变了,即使你添加或者修改
  grains,数据也不会改变,除非你重启minion。
  当然万事总留一线,凡事总有个例外嘛,我们在master上面定义或者更新grains,执行同步后,可以修改grains,就可以不重启minion而达到改变grains的目的。
  其实还有一种方法来更新grains的,在master上执行salt '*' state.highstate或者在minion上执行,
  salt-call state.highstate也可以更新grains。
  从这一点来说,grains其实也具有动态的特性,待会会举个例子。
  好了,下面谈谈管理grains有哪几种方式呢?
  一共有五种方式,官网上写的是四种,楼主自己瞎捣腾又捣腾出来一种,哈哈!
  第一种方式,定义在这个里面的
root@salt-minion:~# ls /home/lixc/salt-2014.1.4/salt/grains/core.py  
/home/lixc/salt-2014.1.4/salt/grains/core.py
  core.py这个模块,主要返回一些系统相关的信息,比如下面这俩东西
root@salt-master:/srv/salt/_grains#  salt '*' grains.item    kernel  lsb_distrib_id  
salt-minion:
  
  kernel: Linux
  
  lsb_distrib_id: Debian
  
root@salt-master:/srv/salt/_grains#
  当然大伙也可以用,salt '*' grains.items去查看所有的grains
  注意:core.py里面定义的grains,只会在minion重启的或者在master上面执行同步的时候,才会重新加载,也就是说,你不重启minion或者在master不执行同步,你core.py里面的定义的grains就不会改变。下面看个例子。
  我把minion上debian_version由7.5改为7.4
先查看下minion上debian_version  
root@salt-master:~# salt 'salt-minion' cmd.run 'cat /etc/debian_version'
  
salt-minion:
  
    7.5
  
看一下grains里面的debian_version
  
root@salt-master:~# salt 'salt-minion' grains.item osrelease
  
salt-minion:
  
  osrelease: 7.5
  
把minion上的debian_version由7.5改为7.4
  
root@salt-master:~# salt 'salt-minion' cmd.run 'echo 7.4 >/etc/debian_version'
  
salt-minion:
  

  
手动查看一下mininon上的debian_version修改成功了没
  
root@salt-master:~# salt 'salt-minion' cmd.run 'cat /etc/debian_version'
  
salt-minion:
  
    7.4
  
再查看一下grains里面的debian_version,看到没,没改变吧,说明grains加载后就一直在内存里,
  
没改变过
  
root@salt-master:~# salt 'salt-minion' grains.item osrelease
  
salt-minion:
  
  osrelease: 7.5
  
好,我们在master执行一下同步
  
root@salt-master:~# salt  '*'   saltutil.sync_all
  
salt-minion:
  
    ----------
  
    grains:
  
    modules:
  
    outputters:
  
    renderers:
  
    returners:
  
    states:
  
看到了吧,骚年们,grains里的debian_version改变了,说明同步操作,重启加载了grains
  
root@salt-master:~# salt 'salt-minion' grains.item osrelease
  
salt-minion:
  
  osrelease: 7.4
  
好了,实验成功,我们再把7.5改回来吧
  
root@salt-master:~# salt 'salt-minion' cmd.run 'echo 7.5 >/etc/debian_version'
  
salt-minion:
  

  
手动查看一下mininon上的debian_version修改成功了没
  
root@salt-master:~# salt 'salt-minion' cmd.run 'cat /etc/debian_version'
  
salt-minion:
  
    7.5
  
好了,现在我们啥操作都没有,grains里的debian_version还保持在7.4呢,现在我们
  
重启下minion
  
root@salt-master:~# salt 'salt-minion' cmd.run '/etc/init.d/salt-minion restart'
  
salt-minion:
  
    Restarting salt minion control daemon: salt-minion.
  
看到没,重启minion后,又回到7.5了
  
root@salt-master:~# salt 'salt-minion' grains.item  osrelease
  
salt-minion:
  
  osrelease: 7.5
  
root@salt-master:~#
  好了,第一种管理grains的方式算是讲完了,下面第二种。
  第二种是啥呢,没错,直接把grains写在/etc/salt/minion里面就ok了
咱么首先把咱们要定义的grains定向到minion的/etc/salt/minion里面  
root@salt-master:~# salt '*' cmd.run 'echo  "grains:\n  lixc:\n    - chengge\n    - \
  
jiabanne">>/etc/salt/minion'
  
salt-minion:
  

  
查看一下,成功了没,哈哈,成功了
  
root@salt-master:~# salt '*' cmd.run 'tail -n 4 /etc/salt/minion'
  
salt-minion:
  
    grains:
  
      lixc:
  
        - chengge
  
        - jiabanne
  
好,master同步一下,或者重启一下minion,看到没我这次用的是saltutil.sync_grains,这个只同步
  
grains。咱们上面用的那个saltutil.sync_all,是把所有东西都同步过去了,包括module,state等等
  
一大串的东西。
  
root@salt-master:~# salt  '*'   saltutil.sync_grains
  
salt-minion:
  
好了,同步好了,咱们在master上面,查看一下grains里面的lixc
  
root@salt-master:~# salt '*' grains.item lixc
  
salt-minion:
  
  lixc:
  
      chengge
  
      jiabanne
  
root@salt-master:~#
  
OK,成功了,然后咱们恢复原样吧,因为在/etc/salt/minion定义grains,实在不是一种好方法。
  
好,我们把刚才在/etc/salt/minion里面添加的grains,删掉吧
  
root@salt-master:~# salt '*' cmd.exec_code  bash  'for line in {1,2,3,4};do sed -i \
  
"$d" /etc/salt/minion;done'
  
salt-minion:
  

  
root@salt-master:~#
  OK,第三种方法也是在minion上面的,定义在/etc/salt/grains这个文件里面的,我们来看看
好,先添加一个grain到/etc/salt/grains  
root@salt-master:~# salt '*' cmd.run 'echo "chengge: 1002">>/etc/salt/grains'
  
salt-minion:
  
查看一下
  
root@salt-master:~# salt '*' cmd.run 'tail -n 1 /etc/salt/grains'
  
salt-minion:
  
    chengge: 1002
  
这一次,我们用执行state.highstate来更新grains
  
root@salt-master:~# salt '*' state.highstate --out=quite
  
salt-minion:
  
OK,成功了,看到没这样也可以更新grains
  
root@salt-master:~# salt '*' grains.item chengge
  
salt-minion:
  
  chengge: 1002
  
root@salt-master:~#
  OK,前三种方式讲完了,这三种方式都是在minion上面定义的。下面还有两种方式可以在master上面定义,然后推送到minion上面。
  第四种方式:请看
这种方式使用grains自带的一个模块来工作的,模块后面参数,以key value的形式出现就ok了  
root@salt-master:~# salt '*'  grains.setval liss 1003
  
salt-minion:
  
  liss: 1003
  
执行上面的命令执行,grains会被同步到minion的/etc/salt/grains,请看下面
  
root@salt-master:~# salt '*'  cmd.run  'tail -n 1 /etc/salt/grains'
  
salt-minion:
  
    liss: 1003
  
master上面同步一下
  
root@salt-master:~# salt '*' saltutil.sync_grains
  
salt-minion:
  
好,查看一下grains里的liss
  
root@salt-master:~# salt '*'  grains.item liss
  
salt-minion:
  
  liss: 1003
  
root@salt-master:~#
  还有最后一种自定义的方式,自己写模块。
  参考/home/lixc/salt-2014.1.4/salt/grains/core.py这个模块写就OK了,其实也没啥特殊的。就咱们
  平时写的python脚本拿过来就能用,唯一的区别是咱们的这个python脚本里面定义的是一个一个的函数,每个函数return一个字典回来,
  字典嘛,grains的数据结构就key: value字典
  下面咱看看
root@salt-master:/srv/salt/_grains# cat /srv/salt/_grains/chengge.py  
import time
  
def chengge():
  
  grains = {}
  
  grains['time'] = time.ctime()
  
  return grains
  
def sisi():
  
  grains = {}
  
  grains['liss'] = 'lisisi'
  
  return grains
  
root@salt-master:/srv/salt/_grains#
  楼主在chengge.py这个模块里面定义了俩函数,每个函数都有return一个字典。
  注意:_grains这个目录,子定义的grains是放在这个里面的
  好咱们同步一下
root@salt-master:~# salt '*'   saltutil.sync_grains  
salt-minion:
  
    - grains.chengge
  
咱们查看一下grains里面的time和lisisi,这俩东西就是我们子定义函数里面的
  
root@salt-master:~# salt '*' grains.item time liss
  
salt-minion:
  
  liss: lisisi
  
  time: Sat Jun 21 14:43:10 2014
  
再看一下,时间和上一次执行的一样
  
root@salt-master:~# salt '*' grains.item time liss
  
salt-minion:
  
  liss: lisisi
  
  time: Sat Jun 21 14:43:10 2014
  
再同步一下
  
root@salt-master:~# salt '*'   saltutil.sync_grains
  
salt-minion:
  
看到了没,时间变了,再次说明同步或者重启minion,grains才会刷新
  
root@salt-master:~# salt '*' grains.item time liss
  
salt-minion:
  
  liss: lisisi
  
  time: Sat Jun 21 14:44:07 2014
  
root@salt-master:~#
  OK,不知到大伙发现了没有,第五种方式里面的liss: lisisi把第四种方式里面的liss: 1003(那个我一直没删的哦)给覆盖了。
  这个说明,咱们这五种方式是有优先顺序的。也就是说grain的key同名的时候,优先级高的会覆盖掉优先级低的。
  好,直接把优先级给列出来了。
  第一种方式<第二种<第三<第四<第五。
  先到这里吧,想必大伙对grain是个啥玩意,应该有所了解了。

运维网声明 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-544616-1-1.html 上篇帖子: saltstack(四)grains(一) 下篇帖子: saltstack(五)grains(二)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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