SaltStack学习笔记(三)详解Grain

什么是Grains

    Grains是服务器的一系列粒子信息,也就是服务器的一系列物理,软件环境信息。在执行salt的sls时候可以根据Grains信息的不同对服务器进行匹配分组,例如可以根据系统是centos服务器跟系统是redhat环境的安装不同的软件包。

Grains是什么样子

下面是一台自己做测试的虚拟机的粒子信息

列出Grains

可利用的grains信息可以通过'grains.ls'这个模块列出来

salt '*' grains.ls
kaibin.test3:
    - SSDs
    - biosreleasedate
    - biosversion
    - cpu_flags
    - cpu_model
    - cpuarch
    - domain
    - fqdn
    - fqdn_ip4
    - fqdn_ip6
    - gpus
    - host
    - hwaddr_interfaces
    - id
    - ip4_interfaces
    - ip6_interfaces
    - ip_interfaces
    - ipv4
    - ipv6
    - kernel
    - kernelrelease
    - locale_info
    - localhost
    - machine_id
    - manufacturer
    - master
    - mem_total
    - nodename
    - num_cpus
    - num_gpus
    - os
    - os_family
    - osarch
    - oscodename
    - osfinger
    - osfullname
    - osmajorrelease
    - osrelease
    - osrelease_info
    - path
    - productname
    - ps
    - pythonexecutable
    - pythonpath
    - pythonversion
    - saltpath
    - saltversion
    - saltversioninfo
    - selinux
    - serialnumber
    - server_id
    - shell
    - virtual
    - zmqversion

grains信息也可以通过'grains.modules'这个模块罗列出来

root@kaibin-test1 ~]# salt '*' grains.items
kaibin-test2:
    ----------
    SSDs:
    biosreleasedate:
        07/31/2013
    biosversion:
        6.00
    cpu_flags:
        - fpu
        - vme
        - de
        - pse
        - tsc
        - msr
        - pae
        - mce
        - cx8
        - apic
        - sep
        - mtrr
        - pge
        - mca
        - cmov
        - pat
        - pse36
        - clflush
        - dts
        - mmx
        - fxsr
        - sse
        - sse2
        - ss
        - syscall
        - nx
        - rdtscp
        - lm
        - constant_tsc
        - up
        - arch_perfmon
        - pebs
        - bts
        - xtopology
        - tsc_reliable
        - nonstop_tsc
        - aperfmperf
        - unfair_spinlock
        - pni
        - pclmulqdq
        - ssse3
        - cx16
        - pcid
        - sse4_1
        - sse4_2
        - x2apic
        - popcnt
        - aes
        - xsave
        - avx
        - f16c
        - rdrand
        - hypervisor
        - lahf_lm
        - ida
        - arat
        - epb
        - xsaveopt
        - pln
        - pts
        - dts
        - fsgsbase
        - smep
    cpu_model:
        Intel(R) Core(TM) i5-3230M CPU @ 2.60GHz
    cpuarch:
        x86_64
    domain:
        com
    fqdn:
        kaibin-test2.com
    fqdn_ip4:
        - 192.168.3.120
    fqdn_ip6:
    gpus:
        |_
          ----------
          model:
              SVGA II Adapter
          vendor:
              unknown
    host:
        kaibin-test2
    hwaddr_interfaces:
        ----------
        eth1:
            00:0c:29:fa:af:46
        lo:
            00:00:00:00:00:00
    id:
        kaibin-test2
    ip4_interfaces:
        ----------
        eth1:
            - 192.168.3.120
        lo:
            - 127.0.0.1
    ip6_interfaces:
        ----------
        eth1:
            - fe80::20c:29ff:fefa:af46
        lo:
            - ::1
    ip_interfaces:
        ----------
        eth1:
            - 192.168.3.120
        lo:
            - 127.0.0.1
    ipv4:
        - 127.0.0.1
        - 192.168.3.120
    ipv6:
        - ::1
        - fe80::20c:29ff:fefa:af46
    kernel:
        Linux
    kernelrelease:
        2.6.32-431.el6.x86_64
    locale_info:
        ----------
        defaultencoding:
            UTF8
        defaultlanguage:
            zh_CN
    localhost:
        kaibin-test2
    machine_id:
        0ecb13dd6ffa324198c2ad2500000010
    manufacturer:
        VMware, Inc.
    master:
        192.168.3.110
    mem_total:
        482
    nodename:
        kaibin-test2
    num_cpus:
        1
    num_gpus:
        1
    os:
        CentOS
    os_family:
        RedHat
    osarch:
        x86_64
    oscodename:
        Final
    osfinger:
        CentOS-6
    osfullname:
        CentOS
    osmajorrelease:
        6
    osrelease:
        6.5
    osrelease_info:
        - 6
        - 5
    path:
        /sbin:/usr/sbin:/bin:/usr/bin
    productname:
        VMware Virtual Platform
    ps:
        ps -efH
    pythonexecutable:
        /usr/bin/python
    pythonpath:
        - /usr/bin
        - /usr/lib64/python26.zip
        - /usr/lib64/python2.6
        - /usr/lib64/python2.6/plat-linux2
        - /usr/lib64/python2.6/lib-tk
        - /usr/lib64/python2.6/lib-old
        - /usr/lib64/python2.6/lib-dynload
        - /usr/lib64/python2.6/site-packages
        - /usr/lib64/python2.6/site-packages/gst-0.10
        - /usr/lib64/python2.6/site-packages/gtk-2.0
        - /usr/lib64/python2.6/site-packages/webkit-1.0
        - /usr/lib/python2.6/site-packages
    pythonversion:
        - 2
        - 6
        - 6
        - final
        - 0
    saltpath:
        /usr/lib/python2.6/site-packages/salt
    saltversion:
        2014.7.0
    saltversioninfo:
        - 2014
        - 7
        - 0
        - 0
    selinux:
        ----------
        enabled:
            True
        enforced:
            Enforcing
    serialnumber:
        VMware-56 4d aa 3f 5b e6 bb d1-2a e1 f3 53 79 fa af 3c
    server_id:
        421678949
    shell:
        /bin/bash
    virtual:
        VMware
    zmqversion:
        3.2.4

得到各个minion端单一粒子信息

1、得到key/value

[root@master ~]# salt '*' grains.item os
master:
    ----------
    os:
        CentOS
kaibin.test2:
    ----------
    os:
        CentOS

2.只得到value

[root@master ~]# salt '*' grains.get os
master:
    CentOS
kaibin.test2:
    CentOS

从上面的信息可以看出,grains其实是一系列的服务器信息,从信息里可以看到服务器是一台VMware 虚拟机,系统是centos6.5,cpu是酷睿I5。通常我们进行采购都是一批次的产品,所以使用grains可以轻易的进行批量管理。当然,也可以通过自定义grains来分组管理我们的服务器。

怎么运用Grains

第一种,命令行中使用,salt 命令中使用grains

#对系统是CentOS的服务器进行ping测试操作
#os:CentOS ; 就是对应上面grains.items显示出来的os值是CentOs的对象进行匹配
[root@kaibin-test1 ~]# salt -G 'os:CentOS' test.ping
kaibin-test3:
    True
kaibin-test2:
    True

#对cpu架构是x86_64的服务器显示CPU的个数
[root@kaibin-test1 ~]# salt -G 'cpuarch:x86_64' grains.item num_cpus
kaibin-test2:
    ----------
    num_cpus:
        1
kaibin-test3:
    ----------
    num_cpus:
        1

#根据主机名进行ping测试
[root@kaibin-test1 ~]# salt -G 'host:kaibin-test*' test.ping
kaibin-test3:
    True
kaibin-test2:
    True

第二种,在SLS中使用grains

# 在top.sls中使用grais
 
'os:CentOS':
    - match: grain
    - webserver

上面是在top.sls中定义对系统是CentOs的服务器执行webserver.sls定义的状态信息.

进阶,自定义Grains

自定义grains信息:

静态数据存放在slave端(定义在minion端)

方法一:

wKiom1XHjjzg2n1cAAFxm8X_VTU011.jpg

生效方式:

1.重启minion端

2.master端刷新grains信息

[root@master ~]# salt '*' saltutil.sync_grains
master:
kaibin.test2:

查看grains信息

[root@master ~]# salt 'kaibin.test2' grains.items
kaibin.test2:
    ----------
    SSDs:
    biosreleasedate:
        07/31/2013
    biosversion:
        6.00
    cpu_flags:
    ........
        shell:
        /bin/bash
    virtual:
        VMware
    web:
        nginx
    zmqversion:
        3.2.4
[root@master ~]# salt 'kaibin.test2' grains.item web
kaibin.test2:
    ----------
    web:
        nginx

方案二: minion端创建单独配置文件

minion端:

[root@kaibin-test2 ~]# cat >> /etc/salt/grains << EOF
> database: mysql
> EOF

master端:

[root@master ~]# salt '*' saltutil.sync_grains
master:
kaibin.test2:
[root@master ~]# salt 'kaibin.test2' grains.item database
kaibin.test2:
    ----------
    database:
        mysql

Grains的四种存在形式

Core grains.
在 /etc/salt/grains 自定义grains.
在 /etc/salt/minion 自定义grains.
在 _grains 目录自定义grain,同步到minions.

自定义的grains编写格式参考上面grains.items显示出来的格式

  1. 直接值对应

os:CentOS

2.  字典格式

ip_interfaces: {'lo': ['127.0.0.1'], 'em1': ['192.168.0.100'], 'em2': []}

 3. 分多行值的列表格式

osmajorrelease:
      6
      5
  • Core Grains : 是salt定义好的grains,后面三种自定义的grains,如果名称跟Core grains定义的一样,将会覆盖掉Core grains定义的值.

  • /etc/salt/grains  : 单独的grains来放置自定义的grains可以更加好的独立***。

roles:
  - webserver
  - memcache
deployment: datacenter4
cabinet: 13
cab_u: 14-15

* 上面的内容定义了四个grain。 roles是一个列表,还有deployment,cabinet,cab_u三个值

*  需要重启minion才能生效

  • /etc/salt/minion : 这个的定义跟在/etc/salt/grains中的定义一样,只不过要多个grains的声明

grains : 
  roles:
    - webserver
    - memcache
  deployment: datacenter4
  cabinet: 13
  cab_u: 14-15

*  需要重启minion才能生效

  • _grains 目录自定义grain :

假设使用默认的master 的file_roots配置路径 /srv/salt ,那么_grains的位置是/srv/salt/_grains

# mkdir /srv/salt/_grains
# vim /srv/salt/_grains/my_grain.py
## 添加下面内容
    def my_grains():
        grains = {'roles' : ['phpserver','webserver']}
        return grains
         
# salt '192.168.0.100' saltutil.sync_grains
# salt '192.168.0.100' grains.item roles

这里是通过定以一个grains模块注入给minion一个roles信息。

如果查询grains.items roles无法查出相关信息,可以重启下master,再重新测试

下面给给出一个Core grains定义的一个例子,使用了比较复杂的方式来定义grains,更多的信息点击这里

saltutil.sync_grainsdef _windows_cpudata():
    '''
    Return some CPU information on Windows minions
    '''
    # Provides:
    # num_cpus
    # cpu_model
    grains = {}
    if 'NUMBER_OF_PROCESSORS' in os.environ:
        # Cast to int so that the logic isn't broken when used as a
        # conditional in templating. Also follows _linux_cpudata()
        try:
            grains['num_cpus'] = int(os.environ['NUMBER_OF_PROCESSORS'])
        except ValueError:
            grains['num_cpus'] = 1
    grains['cpu_model'] = platform.processor()
    return grains
  • 分发自定义的grains到客户端

### 下面的三个操作均会将自定义的grains分发到192.168.0.100上
#salt '192.168.0.100' state.highstate
#salt '192.168.0.100' saltutil.sync_all
#salt '192.168.0.100' saltutil.sync_grains

本文转自:http://arlen.blog.51cto.com/7175583/1424444

你可能感兴趣的:(虚拟机,服务器,信息,软件包)