saltstack有三种定义数据的方式,分别是grains,pillar,mine,每种方式的使用状况不同,在前期学习的时候各类蛋疼,不知道哪一种状况使用哪一种方式,很模糊。通过本身的学习,终于弄清楚了它们的不一样点。先不用急,咱们先学习下基础的用法,后期会总结下它们的不一样点和具体使用状况。app
salt有一个接口用来收集客户端的系统基础信息,这个接口就是grains,收集到的数据就称为grains数据。经过grains数据,咱们能够作不少事情,好比使用grains指定target,使用grains来定义不一样的值,在sls中使用grains使得sls更加灵活等等。
ide
可是grains数据是随着minion启动时就加载的数据,这些数据是静态的,不可修改的。除非你去重启minion或者刷新grains。可是这个代价是很高的。因此咱们在定义数据时尽可能不要使用grains。学习
说了这么多,咱们实际操做下。直接上图。
spa
这个操做显示了192.168.79.49这台机器的全部grains信息。blog
若是你只想显示某个信息,能够直接使用grains.item host就会显示host这个key对应的信息。
接口
具体用法可使用salt-call sys.doc grains查看帮助。get
如今咱们看看如何自定义grains数据。
it
第一种方式是在minion配置中定义,须要重启minion才能更新io
第二种方式是在minion配置同一目录增长文件grains,和上面相似,只是不须要grains开头,一样须要重启minionclass
以上两种方式,我基本不会使用,接下来介绍第三种方式,就是自定义模块返回grains数据,这个就要刷新grains数据,不须要重启minion。
在_grains目录下自定义模块,这个目录放哪里呢?记得file_roots定义的目录吗?对的,_grains目录须要放在file_roots定义的目录下才会起做用的。也就是/opt/app/salt/state/prod/_grains目录。
在_grains创建文件test.py,内容以下
操做以下,看看,神奇吧,很牛是吧。
grains的加载顺序以下:
一、加载核心grains
二、加载_grains目录下的grains信息
三、加载grains文件
四、加载minion配置中的grains
为了不覆盖以前的信息,咱们能够给grains添加名字空间,这样就不会覆盖了。
其实就是多加一层字典而已。
待续。