公司好清静啊,楼主在这里默默的加班写博客。salt这玩意太牛逼了,相比于楼主几个月前的单机手动运维,这玩意太高上大了。好吧,楼主是乡下人进城,见笑。

OK。上一篇写了grains的概念,管理方式等方面的内容。这一篇谢谢grains的一些应用场景。

grains咋用呢?给谁用的呢?

其实有几种用法,咱们前面也用过。

第一种,命令行匹配minion。

root@salt-master:~# salt -G 'liss:lisisi' cmd.which  vim 
salt-minion:
    /usr/bin/vim
root@salt-master:~#

第二种,state的top.sls这个文件里面匹配minion

root@salt-master:~# cat  /srv/salt/top.sls 
base:
  'liss:lisisi':
    - match: grain
    - users
    - apache2
    - mysql.install
    - mysql.conf
root@salt-master:~#

第三种用在jinja模板里面。

root@salt-master:~# cat /srv/salt/top.sls
base:
{% set name = salt['grains.get']('liss', '') %}
{% if name %}
  'liss:`name`':
     - match: grain
     - apache2
{% endif %}
root@salt-master:~#

第四种,也可以这么用jinja模板

传个文件到minion上面玩玩,文件是用jinja定义的
root@salt-master:~# cat /srv/salt/test.sls    
/tmp/test:
  file.managed:
    - source: salt://test.jinja
    - user: lixc
    - group: lixc
    - mode: 644
    - template: jinja
jinja模板
root@salt-master:~# cat /srv/salt/test.jinja 
{%for key,value in grains.items()%}
{%if key|first == 'l'%}
{{key|title}}
{%endif%}
{%endfor%}
输出东西太多,楼主加了个--out=quiet,可以实现不输出
root@salt-master:~# salt  '*'  state.sls  test  --out=quiet
看看结果       
root@salt-master:~# salt '*' cmd.run 'cat /tmp/test|egrep -v "^$"'
salt-minion:
    Lixc
    Lsb_Distrib_Os
    Lsb_Distrib_Description
    Localhost
    Lsb_Distrib_Id
    Lsb_Distrib_Release
    Liss
    Lsb_Distrib_Codename
root@salt-master:~#

当然grains其实还可以用在pillar里面,还可以以__grains__字典的形式,用在module里面。这个等到写到pillar和module的时候,再写

OK了