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
第一种方法:
1 [root@feed200 minion.d]# cat push.conf 2 grains: 3 ITEMS: 10 4 TEST: yes 5 OA: 6 - a 7 - b
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 ##表示成功
第二种方法:
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看到相关的信息了
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
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取某个值