[关闭]
@cdmonkey 2016-07-08T09:18:06.000000Z 字数 2761 阅读 938

Saltstack-Grains

Saltstack


二、Grains

Grains and Pillar are two data systems of saltstack.
http://docs.saltstack.cn/topics/targeting/grains.html

每一个“Minion”节点自身的静态属性,以Python字典的形式存放于“Minion”端。

其作用是,当你的“minion”端节点启动时,它会把它的详细信息(处理器、内存、主机名、操作系统类型、网络地址等信息)记录下来,能够于匹配目标时使用,当然也有其他的用途。除非被控的节点重新启动服务或者是进行强制的刷新操作,否则“Grains”内保存的数据是不会改变的,因而从某种意义上来说它属于静态的数据。

其用来存放一些被控节点的基本数据,能够用来基于这些基本信息进行目标的匹配等操作。注意:“Grains”中的信息是被控节点的服务启动时进行收集并存储的,因而其生命周期为下次重启服务之前。

三个应用场景:

1. 显示信息

显示被控端节点的所有“Grains”信息:

  1. [root@salt-master ~]# salt 'node2.cdmonkey.com' grains.items
  2. node2.cdmonkey.com:
  3. ----------
  4. SSDs:
  5. biosreleasedate:
  6. 07/31/2013
  7. biosversion:
  8. 6.00
  9. cpu_flags:
  10. ...
  11. cpu_model:
  12. Intel(R) Core(TM) i3-3110M CPU @ 2.40GHz
  13. cpuarch:
  14. x86_64
  15. domain:
  16. fqdn:
  17. Node-A2
  18. fqdn_ip4:
  19. - 172.16.1.22
  20. ...
  21. host:
  22. Node-A2
  23. hwaddr_interfaces:
  24. ----------
  25. eth0:
  26. 00:0c:29:75:1c:c9
  27. lo:
  28. 00:00:00:00:00:00
  29. id:
  30. node2.cdmonkey.com
  31. ip4_interfaces:
  32. ...
  33. kernel:
  34. Linux
  35. kernelrelease:
  36. 2.6.32-504.el6.x86_64
  37. locale_info:
  38. ...
  39. localhost:
  40. Node-A2
  41. ...
  42. manufacturer:
  43. VMware, Inc.
  44. master:
  45. 172.16.1.21
  46. ...
  47. os:
  48. CentOS
  49. os_family:
  50. RedHat
  51. ...
  52. osrelease:
  53. 6.6
  54. path:
  55. /sbin:/usr/sbin:/bin:/usr/bin
  56. productname:
  57. VMware Virtual Platform
  58. ...
  59. saltpath:
  60. /usr/lib/python2.6/site-packages/salt
  61. saltversion:
  62. 2015.5.0
  63. ...
  64. shell:
  65. /bin/bash
  66. virtual:
  67. VMware
  68. zmqversion:
  69. 3.2.5

显示某一个方面的信息:

  1. [root@salt-master ~]# salt 'node2.cdmonkey.com' grains.item os
  2. node2.cdmonkey.com:
  3. ----------
  4. os:
  5. CentOS
  6. #也可以是这样,并且这个方法更为常用些:
  7. [root@salt-master ~]# salt 'node2.cdmonkey.com' grains.get os
  8. node2.cdmonkey.com:
  9. CentOS

2. 匹配目标

  1. [root@salt-master ~]# salt -G 'host:*2' test.ping
  2. node2.cdmonkey.com:
  3. True
  4. #如此看来,在通过Grains进行匹配时,也可以使用通配符。

除了于命令行中进行匹配外,当然也能够于状态文件中进行匹配。

  1. [root@salt-master ~]# vim /etc/salt/states/top.sls
  2. #增加如下内容:
  3. 'roles:nginx':
  4. - match: grain
  5. - init.pkg

3. 自定义

如果被控节点的主机名设定的合理且具体,那么我们很容匹配到我们需要的目标节点,例如匹配所有运行“Nginx”服务的节点。但如果我们无法通过主机名或标识匹配到目标,那么我们于很多时候需要自定义“Grains”信息,自定义的操作需要于被控节点进行。

  1. [root@Node-A2 ~]# vim /etc/salt/minion
  2. grains:
  3. roles: nginx
  4. env: prod
  5. # 定义完成后需要重启被控端服务进程:
  6. [root@Node-A2 ~]# /etc/init.d/salt-minion restart
  7. -------------------
  8. # 在控制端进行匹配操作:
  9. [root@salt-master ~]# salt -G 'roles:nginx' test.ping
  10. node2.cdmonkey.com:
  11. True

还有一种写法,可以将自定义的内容单独的写到被控端的grains文件(需要手动创建)内。

  1. [root@Node-A2 ~]# vim /etc/salt/grains
  2. cloud: openstack
  3. #仍旧需要重启被控端服务进程:
  4. [root@Node-A2 ~]# /etc/init.d/salt-minion restart
  5. -------------------
  6. #在控制端进行匹配操作:
  7. [root@salt-master ~]# salt -G 'cloud:openstack' test.ping
  8. node2.cdmonkey.com:
  9. True

4. 刷新

我们首先在被控端节点对自定义的“Grains”信息进行修改

  1. [root@Node-A2 ~]# vim /etc/salt/grains
  2. cloud: openstack
  3. model: R720
  4. #被控端节点不重启服务进程。
  5. -------------------
  6. #在控制端进行刷新操作:
  7. [root@salt-master ~]# salt '*' saltutil.sync_grains
  8. node2.cdmonkey.com:
  9. node3.cdmonkey.com:
  10. #然后进行匹配操作:
  11. [root@salt-master ~]# salt -G 'model:R720' test.ping
  12. node2.cdmonkey.com:
  13. True

很显然,在控制端节点进行刷新操作比在被控端重启服务进程而言要方便许多。

5. 状态文件

  1. [root@test-ngx ~]# vim /etc/salt/states/top.sls
  2. base:
  3. 'os:CentOS':
  4. - match: grain # Use Grains to match
  5. - init.pkg
  6. [root@test-ngx ~]# salt '*' state.highstate
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注