设为首页收藏本站

追梦Linux

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 649|回复: 0

【Saltstack系列】4、SaltStack Grains使用

[复制链接]

482

主题

485

帖子

16万

积分

CEO

Rank: 9Rank: 9Rank: 9

积分
169037

最佳新人活跃会员热心会员推广达人宣传达人灌水之王突出贡献优秀版主荣誉管理论坛元老

QQ
发表于 2016-6-7 16:09:20 | 显示全部楼层 |阅读模式
Grains是服务器的一系列粒子信息,也就是服务器的一系列物理,软件环境信息。在执行salt的sls时候可以根据Grains信息的不同对服务器进行匹配分组,例如可以根据系统是centos服务器跟系统是redhat环境的安装不同的软件包。
Grains可以在state系统中使用,用于配置管理模块;
Grains可以在target中使用,在用来匹配Minion,如匹配操作系统,使用-G选项;
Grains可以用于信息查询,Grains保存着收集到的客户端的详细信息;

#salt 'minion-01' grains.ls    ##列出grains里面的所有名称
[AppleScript] 纯文本查看 复制代码
minion-01:

    - SSDs

    - biosreleasedate

    - biosversion

    - cpu_flags

    - cpu_model

    - cpuarch

    - domain

    - fqdn

    - fqdn_ip4

    - fqdn_ip6

    - gpus

    - host

    - hwaddr_interfaces

    - id

    - init

    - ip4_interfaces

    - ip6_interfaces

    - ip_interfaces

    - ipv4

    - ipv6

    - kernel

    - kernelrelease

    - locale_info

    - localhost

    - lsb_distrib_id

    - machine_id

    - manufacturer

    - master

    - mdadm

    - 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

    - systemd

    - virtual

    - zmqversion


#salt 'minion-01' grains.items  ##列出grains里面的所有名称和值
[AppleScript] 纯文本查看 复制代码
minion-01:

    ----------

    SSDs:

    biosreleasedate:

        05/19/2017

    biosversion:

        6.00

    cpu_flags:

        - fpu

        - vme

        - de

        - pse

        - tsc

        - msr

        - pae

        - mce

        - cx8

        - apic

        - sep

        - mtrr

        - pge

        - mca

        - cmov

        - pat

        - pse36

        - clflush

        - mmx

        - fxsr

        - sse

        - sse2

        - ss

        - syscall

        - nx

        - pdpe1gb

        - rdtscp

        - lm

        - constant_tsc

        - arch_perfmon

        - nopl

        - xtopology

        - tsc_reliable

        - nonstop_tsc

        - eagerfpu

        - pni

        - pclmulqdq

        - ssse3

        - fma

        - cx16

        - pcid

        - sse4_1

        - sse4_2

        - x2apic

        - movbe

        - popcnt

        - tsc_deadline_timer

        - aes

        - xsave

        - avx

        - f16c

        - rdrand

        - hypervisor

        - lahf_lm

        - abm

        - 3dnowprefetch

        - invpcid_single

        - fsgsbase

        - tsc_adjust

        - bmi1

        - avx2

        - smep

        - bmi2

        - invpcid

        - rdseed

        - adx

        - smap

        - xsaveopt

        - arat

    cpu_model:

        Intel(R) Core(TM) i7-5557U CPU @ 3.10GHz

    cpuarch:

        x86_64

    domain:

    fqdn:

        node2

    fqdn_ip4:

        - 192.168.2.192

        - 127.0.0.1

    fqdn_ip6:

        - fe80::4a0f:de95:9761:a31c

    gpus:

        |_

          ----------

          model:

              SVGA II Adapter

          vendor:

              unknown

    host:

        node2

    hwaddr_interfaces:

        ----------

        docker0:

            02:42:22:d2:1b:3c

        ens33:

            00:0c:29:98:2e:3c

        lo:

            00:00:00:00:00:00

    id:

        minion-01

    init:

        systemd

    ip4_interfaces:

        ----------

        docker0:

            - 172.17.0.1

        ens33:

            - 192.168.2.192

            - 192.168.2.196

        lo:

            - 127.0.0.1

    ip6_interfaces:

        ----------

        docker0:

        ens33:

            - fe80::4a0f:de95:9761:a31c

            - 192.168.2.196

        lo:

            - ::1

    ip_interfaces:

        ----------

        docker0:

            - 172.17.0.1

        ens33:

            - 192.168.2.192

            - fe80::4a0f:de95:9761:a31c

            - 192.168.2.196

        lo:

            - 127.0.0.1

            - ::1

    ipv4:

        - 127.0.0.1

        - 172.17.0.1

        - 192.168.2.192

        - 192.168.2.196

    ipv6:

        - ::1

        - fe80::4a0f:de95:9761:a31c

    kernel:

        Linux

    kernelrelease:

        3.10.0-693.21.1.el7.x86_64

    locale_info:

        ----------

        defaultencoding:

            UTF-8

        defaultlanguage:

            en_US

        detectedencoding:

            UTF-8

    localhost:

        node2

    lsb_distrib_id:

        CentOS Linux

    machine_id:

        bc5795dd237947428589baf51d4f9ef1

    manufacturer:

        VMware, Inc.

    master:

        192.168.2.192

    mdadm:

    mem_total:

        1822

    nodename:

        node2

    num_cpus:

        1

    num_gpus:

        1

    os:

        CentOS

    os_family:

        RedHat

    osarch:

        x86_64

    oscodename:

        Core

    osfinger:

        CentOS Linux-7

    osfullname:

        CentOS Linux

    osmajorrelease:

        7

    osrelease:

        7.4.1708

    osrelease_info:

        - 7

        - 4

        - 1708

    path:

        /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

    productname:

        VMware Virtual Platform

    ps:

        ps -efH

    pythonexecutable:

        /usr/bin/python

    pythonpath:

        - /usr/bin

        - /usr/lib/python2.7/site-packages/pip-10.0.1-py2.7.egg

        - /usr/lib64/python27.zip

        - /usr/lib64/python2.7

        - /usr/lib64/python2.7/plat-linux2

        - /usr/lib64/python2.7/lib-tk

        - /usr/lib64/python2.7/lib-old

        - /usr/lib64/python2.7/lib-dynload

        - /usr/lib64/python2.7/site-packages

        - /usr/lib/python2.7/site-packages

    pythonversion:

        - 2

        - 7

        - 5

        - final

        - 0

    saltpath:

        /usr/lib/python2.7/site-packages/salt

    saltversion:

        2015.5.10

    saltversioninfo:

        - 2015

        - 5

        - 10

        - 0

    selinux:

        ----------

        enabled:

            False

        enforced:

            Disabled

    serialnumber:

        VMware-56 4d de c1 3d 62 e6 94-0d 17 9a fd 77 98 2e 3c

    server_id:

        717427671

    shell:

        /bin/sh

    systemd:

        ----------

        features:

            +PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN

        version:

            219

    virtual:

        VMware

    zmqversion:

        3.2.5


#salt 'minion-01' grains.get fqdn #获取主机名
[AppleScript] 纯文本查看 复制代码
minion-01:

    node2

        

配置grains两种方式
第一种方式:
支持在minion配置文件中定义grains,需要给某机器打标签为nginx
node1上: vim /etc/salt/minion
搜索grains,打开配置为
[AppleScript] 纯文本查看 复制代码
grains:

  role: nginx

  env: test

重启minion
[AppleScript] 纯文本查看 复制代码
salt  'minion-01' grains.get role   返回 nginx

salt 'minion-01' grains.get env     返回 test


第二种方式:
vim /etc/salt/grains写入相关内容(key: value)
[AppleScript] 纯文本查看 复制代码
cloud: openstack

county: CN

重启minion

salt  'minion-01' grains.get cloud    返回 openstack

salt  'minion-01' grains.get county   返回 CN

建议使用第二种,简洁明了        
[AppleScript] 纯文本查看 复制代码
salt -G role:nginx cmd.run 'df -h'  ##只在一台机器上执行,在nginx机器上执行

salt -G os:CentOS cmd.run 'df -h'  ##在centos机器上执行

修改/etc/salt/grains不重启服务的方法,刷新命令如下(备注:方式一和方式二修改配置文件,通过此命令都可以不用重启服务)
[AppleScript] 纯文本查看 复制代码
salt '*' saltutil.sync_grains


grains在topfile中使用,编写一个top.sls文件
vim /srv/salt/top.sls
[AppleScript] 纯文本查看 复制代码
base:

  'role:nginx':

    - match: grain

    - web.nginx

###需要在所有nginx机器执行web.nginx
grains脚本目录,必须是base下创建_grains目录(如:/srv/salt/_grains)
创建一个python脚本在/srv/salt/_grains目录下test.py
[AppleScript] 纯文本查看 复制代码
def my_grains():

    # 初始化grains字典

    grains = {}

    # 设置字典中的key-value

    grains['iaas'] = 'openstack'

    grains['edu'] = 'shhnwangjian'

    # 返回字典

    return grains

通过master同步脚本文件至每台minion
[AppleScript] 纯文本查看 复制代码
salt '*' saltutil.sync_grains

文件放在minion主机的/var/cache/salt/minion/extmods/grains目录下
[AppleScript] 纯文本查看 复制代码
# tree /var/cache/salt/minion
/var/cache/salt/minion
├── accumulator
├── extmods
│   └── grains
│       └── test.py
├── files
│   └── base
│       ├── apache.sls
│       ├── _grains
│       │   └── test.py
│       └── top.sls
├── highstate.cache.p
├── module_refresh
├── pkg_refresh
└── proc
[AppleScript] 纯文本查看 复制代码
salt '*' saltutil.sync_grains
minion-01:
    - grains.test
# salt  '*' grains.get iaas
minion-01:
    openstack
# salt  '*' grains.get edu
minion-01:
    shhnwangjian

grains更大的用在配置管理中,应用在keepalived中使用,通过grains判断时间对于不同服务器不同变量设置不同的值
grains优先级(item名称相同的情况下): 1. 系统自带 2. grains文件写到 3. minion配置文件写的 4. 自己写的脚本               

小黑屋|手机版|Archiver|追梦Linux    点击这里给我发消息

GMT+8, 2021-6-15 19:54 , Processed in 16.016075 second(s), 31 queries .

Powered by 追梦Linux! X3.3 Licensed

© 2015-2017 追梦Linux!.

快速回复 返回顶部 返回列表