saltstack(三) grains、pillar的使用

一,grains  

  grains: 这个跟puppet的facter功能一样。主要负责采集客户端一些基本信息, 这个也完全可以自定义,可以在客户端自定义,然后自动汇报上来;也可以从服务器端定义然后推下去,采集完后,再汇报上来grains信息是静态的;pillar  跟grains 比较的话 他的灵活性强点,怎么定义就这么定义,然后取值就行

grains的用法:

 1 [root@feed200 ~]# salt '*' grains.items    ##查询所有的grains信息
 2 test1:
 3     ----------
 4     SSDs:
 5     biosreleasedate:
 6         08/17/2015
 7     biosversion:
 8         A1TSA1A
 9     cpu_flags:
10         - fpu
11         - vme
12         - de
13         - pse
14         - tsc
15         - msr
16         - pae
17         - mce
18         - cx8
19         - apic
20         - sep
21         - mtrr
22         - pge
23         - mca
24         - cmov
25         - pat
26         - pse36
27         - clflush
28         - dts
29         - acpi
30         - mmx
31         - fxsr
32         - sse
33         - sse2
34         - ss
35         - ht
36         - tm
37         - pbe
38         - syscall
39         - nx
40         - pdpe1gb
41         - rdtscp
42         - lm
43         - constant_tsc
44         - arch_perfmon
45         - pebs
46         - bts
47         - rep_good
48         - xtopology
49         - nonstop_tsc
50 此处省略N行..................
1 [root@feed200 ~]# salt '10.13.41.21' grains.get ip_interfaces:eth0    ##查询eth0所用IP地址
2 10.13.41.21:
3     - 10.13.41.21
4     - fe80::72e2:84ff:fe12:7a05

使用grains添加自定义items

 第一种方法:

 

  在minion端:修改配置文件/etc/salt/minion  中 打开 default_include: minion.d/*.conf 

 

  在/etc/salt/minion.d/目录中添加需要增加的items,文件类型与配置项*.conf对应
 1 [root@feed200 minion.d]# cat push.conf 
 2 grains:
 3   ITEMS: 10
 4   TEST: yes
 5   OA:
 6     - a
 7     - b
  之后重启minion服务 /etc/init.d/salt-minion restart,在master端查看是否添加成功
 1 [root@feed200 ~]# salt '10.13.41.21' grains.items
 2 10.13.41.21:
 3     ----------
 4     ITEMS:
 5         10
 6     OA:
 7         - a
 8         - b
 9     SSDs:
10     TEST:
11         True          ##表示成功

 

 

  第二种方法:

 

  在master端添加,在/srv/salt/ 创建_grains目录,编写grains文件,需要返回一个字典
1 [root@feed200 _grains]# pwd
2 /srv/salt/_grains
3 [root@feed200 _grains]# cat nginx.py 
4 def nginx():
5   nginx={}
6   nginx['nginx']='1.5.5'    ##定义nginx的默认版本
7   return nginx
8 同步到minion端: salt '*' saltutil.sync_all
9 或者使用salt '*' state.highstate(这个貌似不好使)命令同步,然后刷新各minion端salt '*' sys.reload_modules,通过grains.items看到相关的信息了
 在执行salt '*' grains.item os  --summary    ##加上--summary可以显示执行结果
1 -------------------------------------------
2 Summary
3 -------------------------------------------
4 # of minions targeted: 254
5 # of minions returned: 254
6 # of minions that did not return: 0
7 -------------------------------------------

 

 

二,pillar  

  Pillar 是 Salt 非常重要的一个组件,它用于给特定的 minion 定义任何你需要的数据, 这些数据可以被 Salt 的其他组件使用。Salt 在 0.9.8 版本中引入了 Pillar。Pillar 在解析完成 后,是一个嵌套的 dict 结构;最上层的 key 是 minion ID,其 value 是该 minion 所拥有的 Pillar 数据;每一个 value 也都是 key/value。这里可以看出 Pillar 的一个特点,Pillar 数据是与特定 minion 关联的,也就是说每一个minion 都只能看到自己的数据, 所以 Pillar 可以用来传递敏感数据 (在 Salt 的设计中, Pillar 使用独立的加密 session,也是为了保证敏感数据的安全性) 。 Pillar 可以用在哪些地方?

  敏感信息:每个minion只能访问master分配给自己的pillar信息,例如ssh-key,加密证书
  变量:差异化的信息等,
  其他任何数据,可以在target及state中使用

  用在 Targetting 中,Pillar 可以用来选择 minion,使用-I 选项,默认情况下,master 配置文件中的所有数据都添加到 Pillar 中,且对所有 minion 可用。如果要禁用这一默认值,可以在 master 配置文件中添加如下数据,重启服务后生效,关于Pillar的配置见 /etc/salt/master

 pillar_roots:
 base:
   – /srv/pillar
 1     packages.sls
 2         {% if grains['os'] == 'RedHat' %}      ##判断系统时候是redhat,是的话Apache名是httpd
 3         apache: httpd
 4         git: git
 5         {% elif grains['os'] == 'Debian' %}
 6         apache: apache2
 7         git: git-core
 8         {% endif %}
 9     top.sls
10         base:
11             '*':
12               - packages
13   salt '*' saltutil.refresh_pillar       ## 定义好pillar后,执行下面命令进行同步 
14 salt '*' pillar.data             ## 命令查看pillar信息
15 salt '*' pillar.get schedule        ## pillar取某个值

 

 

posted @ 2016-04-21 11:59  邸海峰  阅读(900)  评论(0编辑  收藏  举报
doc