zoukankan      html  css  js  c++  java
  • Saltstack_使用指南04_数据系统-Grains

    1. 主机规划

    Grains文档

    https://docs.saltstack.com/en/latest/topics/grains/index.html    

    注意事项

    修改了master或者minion的配置文件,那么必须重启对应的服务。

     

     

    2. Grains基本信息

    Saltstack 数据系统
        Grains (谷粒)
        Pillar  (柱子)
    
    Grains:静态数据    当Minion启动的时候收集的Minion本地的相关信息
                        如:操作系统版本,内核版本,CPU,内存,硬盘,设备型号,序列号
        1、信息查询  【资产管理】★★★★★
        2、用于目标选择    salt -G 'os:CentOS' test.ping    ★★★★★
        3、配置管理中使用
    
    刷新grains 【这样修改grains信息不用重启salt-minion 也能刷新】
    不然需要重启salt-minion
    salt '*' saltutil.sync_grains
    
    开发一个Grains:
        Python:写一个Python脚本,返回一个字典就可以了。
    可以通过
    
    salt 'salt01' saltutil.sync_grains   【推荐】
    或salt 'salt01' saltutil.sync_all   【范围太广,不推荐使用】
    或salt 'salt01' state.highstate     【执行高级状态时同步,不建议使用】
    或salt 'salt01' saltutil.refresh_modules   【只刷新客户端,服务端向客户端分发的不刷新,比如修改了grains的py脚本时,不会推送到minion端  不建议使用】
    或salt 'salt01' saltutil.refresh_grains    【只刷新客户端,服务端向客户端分发的不刷新,比如修改了grains的py脚本时,不会推送到minion端  不建议使用】
    
    将配置同步到minion端
    如果做了更改也可以使用
    salt 'salt01' sys.reload_modules

    3. Grains优先级信息

    经验证优先级如下:
    1、    salt系统自带信息  【优先级最低】
    2、    自编写Python脚本  备注:在指定目录下存放py脚本
    3、    /etc/salt/grains  备注:该文件不存在,需要自己创建
    4、    /etc/salt/minion  【优先级最高】

           推荐使用 自编写py脚本定义,这样自定义的grains只需要在master端维护即可,减少后期维护成本。

          下文内容就是根据优先级写的。

    4. Salt自带Grains 信息

    4.1. grains条目项信息

    1 [root@salt100 salt]# salt 'salt01' grains.ls  # 查看salt01机器有哪些grains条目项信息
    2 ………………

    4.2. grains全部信息

      1 [root@salt100 salt]# salt 'salt01' grains.items  # 查看salt01机器有哪些grains信息 
      2 salt01:
      3     ----------
      4     SSDs:
      5     biosreleasedate:
      6         05/19/2017
      7     biosversion:
      8         6.00
      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         - mmx
     29         - fxsr
     30         - sse
     31         - sse2
     32         - ss
     33         - ht
     34         - syscall
     35         - nx
     36         - pdpe1gb
     37         - rdtscp
     38         - lm
     39         - constant_tsc
     40         - arch_perfmon
     41         - nopl
     42         - xtopology
     43         - tsc_reliable
     44         - nonstop_tsc
     45         - eagerfpu
     46         - pni
     47         - pclmulqdq
     48         - ssse3
     49         - fma
     50         - cx16
     51         - pcid
     52         - sse4_1
     53         - sse4_2
     54         - x2apic
     55         - movbe
     56         - popcnt
     57         - tsc_deadline_timer
     58         - aes
     59         - xsave
     60         - avx
     61         - f16c
     62         - rdrand
     63         - hypervisor
     64         - lahf_lm
     65         - abm
     66         - 3dnowprefetch
     67         - fsgsbase
     68         - tsc_adjust
     69         - bmi1
     70         - avx2
     71         - smep
     72         - bmi2
     73         - invpcid
     74         - mpx
     75         - rdseed
     76         - adx
     77         - smap
     78         - clflushopt
     79         - xsaveopt
     80         - xsavec
     81         - arat
     82     cpu_model:
     83         Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
     84     cpuarch:
     85         x86_64
     86     disks:
     87         - sda
     88         - sr0
     89     dns:
     90         ----------
     91         domain:
     92         ip4_nameservers:
     93             - 10.0.0.2
     94             - 223.5.5.5
     95         ip6_nameservers:
     96         nameservers:
     97             - 10.0.0.2
     98             - 223.5.5.5
     99         options:
    100         search:
    101         sortlist:
    102     domain:
    103     fqdn:
    104         salt01
    105     fqdn_ip4:
    106         - 172.16.1.11
    107     fqdn_ip6:
    108         - fe80::20c:29ff:fe95:1b84
    109         - fe80::20c:29ff:fe95:1b7a
    110     gid:
    111         0
    112     gpus:
    113         |_
    114           ----------
    115           model:
    116               SVGA II Adapter
    117           vendor:
    118               unknown
    119     groupname:
    120         root
    121     host:
    122         salt01
    123     hwaddr_interfaces:
    124         ----------
    125         eth0:
    126             00:0c:29:95:1b:7a
    127         eth1:
    128             00:0c:29:95:1b:84
    129         lo:
    130             00:00:00:00:00:00
    131     id:
    132         salt01
    133     init:
    134         systemd
    135     ip4_gw:
    136         10.0.0.2
    137     ip4_interfaces:
    138         ----------
    139         eth0:
    140             - 172.16.1.11
    141         eth1:
    142             - 10.0.0.11
    143         lo:
    144             - 127.0.0.1
    145     ip6_gw:
    146         False
    147     ip6_interfaces:
    148         ----------
    149         eth0:
    150             - fe80::20c:29ff:fe95:1b7a
    151         eth1:
    152             - fe80::20c:29ff:fe95:1b84
    153         lo:
    154             - ::1
    155     ip_gw:
    156         True
    157     ip_interfaces:
    158         ----------
    159         eth0:
    160             - 172.16.1.11
    161             - fe80::20c:29ff:fe95:1b7a
    162         eth1:
    163             - 10.0.0.11
    164             - fe80::20c:29ff:fe95:1b84
    165         lo:
    166             - 127.0.0.1
    167             - ::1
    168     ipv4:
    169         - 10.0.0.11
    170         - 127.0.0.1
    171         - 172.16.1.11
    172     ipv6:
    173         - ::1
    174         - fe80::20c:29ff:fe95:1b7a
    175         - fe80::20c:29ff:fe95:1b84
    176     kernel:
    177         Linux
    178     kernelrelease:
    179         3.10.0-862.el7.x86_64
    180     kernelversion:
    181         #1 SMP Fri Apr 20 16:44:24 UTC 2018
    182     locale_info:
    183         ----------
    184         defaultencoding:
    185             UTF-8
    186         defaultlanguage:
    187             en_US
    188         detectedencoding:
    189             UTF-8
    190     localhost:
    191         salt01
    192     lsb_distrib_codename:
    193         CentOS Linux 7 (Core)
    194     lsb_distrib_id:
    195         CentOS Linux
    196     machine_id:
    197         5ae5f27014ee438780bf37ae68889471
    198     manufacturer:
    199         VMware, Inc.
    200     master:
    201         salt100
    202     mdadm:
    203     mem_total:
    204         1821
    205     nodename:
    206         salt01
    207     num_cpus:
    208         2
    209     num_gpus:
    210         1
    211     os:
    212         CentOS
    213     os_family:
    214         RedHat
    215     osarch:
    216         x86_64
    217     oscodename:
    218         CentOS Linux 7 (Core)
    219     osfinger:
    220         CentOS Linux-7
    221     osfullname:
    222         CentOS Linux
    223     osmajorrelease:
    224         7
    225     osrelease:
    226         7.5.1804
    227     osrelease_info:
    228         - 7
    229         - 5
    230         - 1804
    231     path:
    232         /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
    233     pid:
    234         1598
    235     productname:
    236         VMware Virtual Platform
    237     ps:
    238         ps -efHww
    239     pythonexecutable:
    240         /usr/bin/python
    241     pythonpath:
    242         - /usr/bin
    243         - /usr/lib64/python27.zip
    244         - /usr/lib64/python2.7
    245         - /usr/lib64/python2.7/plat-linux2
    246         - /usr/lib64/python2.7/lib-tk
    247         - /usr/lib64/python2.7/lib-old
    248         - /usr/lib64/python2.7/lib-dynload
    249         - /usr/lib64/python2.7/site-packages
    250         - /usr/lib64/python2.7/site-packages/gtk-2.0
    251         - /usr/lib/python2.7/site-packages
    252     pythonversion:
    253         - 2
    254         - 7
    255         - 5
    256         - final
    257         - 0
    258     saltpath:
    259         /usr/lib/python2.7/site-packages/salt
    260     saltversion:
    261         2018.3.3
    262     saltversioninfo:
    263         - 2018
    264         - 3
    265         - 3
    266         - 0
    267     selinux:
    268         ----------
    269         enabled:
    270             False
    271         enforced:
    272             Disabled
    273     serialnumber:
    274         VMware-56 4d 32 86 98 5c a8 3c-50 92 82 be 30 95 1b 7a
    275     server_id:
    276         2097601471
    277     shell:
    278         /bin/sh
    279     swap_total:
    280         2047
    281     systemd:
    282         ----------
    283         features:
    284             +PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN
    285         version:
    286             219
    287     uid:
    288         0
    289     username:
    290         root
    291     uuid:
    292         86324d56-5c98-3ca8-5092-82be30951b7a
    293     virtual:
    294         VMware
    295     zfs_feature_flags:
    296         False
    297     zfs_support:
    298         False
    299     zmqversion:
    300         4.1.4

    4.3. 查询grains指定信息

    1 [root@salt100 ~]# salt 'salt01' grains.item roles  # 没有该项信息,因此只显示key 不显示value
    2 salt01:
    3     ----------
    4     roles:
    5 [root@salt100 ~]# salt 'salt01' grains.item os
    6 salt01:
    7     ----------
    8     os:
    9         CentOS

    5. 自写grains的py脚本

           该脚本在salt master端,然后推送到minion端。

    5.1. master端编写py脚本

     1 [root@salt100 salt]# pwd
     2 /srv/salt
     3 [root@salt100 salt]# mkdir _grains  # salt指定的位置
     4 [root@salt100 salt]# cd _grains/
     5 [root@salt100 _grains]# vim my_grains.py 
     6 #!/usr/bin/env python
     7 # -*- coding:utf-8 -*-
     8 
     9 def grains_define():
    10     # initialize a grains dictionary
    11     grains = {}
    12     # 填充信息
    13 grains['roles'] = ["webserver01","memcache01"],
    14 grains['os'] = 'redhat01'
    15 
    16     # 返回这个字典
    17     return grains

    5.2. grains刷新并查看指定信息

    在master端执行,并查看grains信息

     1 [root@salt100 ~]# salt 'salt01' saltutil.sync_grains  # 会推送py脚本到minion端,并刷新grains信息
     2 salt01:
     3     - grains.my_grains
     4 [root@salt100 ~]# salt 'salt01' grains.item roles
     5 salt01:
     6     ----------
     7     roles:
     8         |_
     9           - webserver01
    10           - memcache01
    11 [root@salt100 ~]# salt 'salt01' grains.item os
    12 salt01:
    13     ----------
    14     os:
    15         redhat01

    5.3. 在minion端查看推送过来的文件位置

     1 [root@salt01 minion]# pwd
     2 /var/cache/salt/minion
     3 [root@salt01 minion]# tree
     4 .
     5 ├── accumulator
     6 ├── extmods
     7 │   └── grains  # 在这个目录下
     8 │       ├── my_grains.py
     9 │       └── my_grains.pyc
    10 ├── files
    11 │   └── base
    12 │       ├── _grains
    13 │       │   └── my_grains.py
    14 │       ├── top.sls
    15 │       └── web
    16 │           └── apache.sls
    17 ├── highstate.cache.p
    18 ├── module_refresh
    19 ├── pkg_refresh
    20 ├── proc
    21 └── sls.p
    22 
    23 8 directories, 9 files

    6. 在/etc/salt/grains 中定义grains

    注意:

           该文件默认不存在,需要自己创建。

    6.1. minion端配置修改

    在salt01上操作

    1 [root@salt01 salt]# cat /etc/salt/grains 
    2 roles:
    3   - webserver02
    4   - memcache02
    5 os: redhat02

    6.2. grains刷新并查看指定信息

    在salt100上操作

     1 [root@salt100 ~]# salt 'salt01' saltutil.sync_grains  # 刷新grains信息
     2 salt01:
     3 [root@salt100 ~]# salt 'salt01' grains.item roles
     4 salt01:
     5     ----------
     6     roles:
     7         - webserver02
     8         - memcache02
     9 [root@salt100 ~]# salt 'salt01' grains.item os
    10 salt01:
    11     ----------
    12     os:
    13         redhat02

    7. 在/etc/salt/minion 中定义grains

        生产中不建议使用,因为写在了默认的配置文件中,不利于后期维护。

    7.1. minion端配置修改

    minion端salt01机器上配置修改

     1 [root@salt01 salt]# pwd
     2 /etc/salt
     3 [root@salt01 salt]# vim minion
     4 ………………
     5 # Custom static grains for this minion can be specified here and used in SLS
     6 # files just like all other grains. This example sets 4 custom grains, with
     7 # the 'roles' grain having two values that can be matched against.
     8 grains:
     9   roles:
    10     - webserver03
    11     - memcache03
    12   os: redhat03
    13 #  deployment: datacenter4
    14 #  cabinet: 13
    15 #  cab_u: 14-15

    7.2. grains刷新并查看指定信息

    在master端刷新grains信息,并查看

     1 [root@salt100 ~]# salt 'salt01' saltutil.sync_grains  # 刷新指定minion的grains信息 
     2 salt01:
     3 [root@salt100 ~]# salt 'salt01' grains.item roles
     4 salt01:
     5     ----------
     6     roles:
     7         - webserver03
     8         - memcache03
     9 [root@salt100 ~]# salt 'salt01' grains.item os
    10 salt01:
    11     ----------
    12     os:
    13         redhat03

    8. Grains使用方式

    8.1. 查询grains的指定信息

     1 [root@salt100 salt]# salt 'salt0*' grains.item os  # 通过通配符匹配salt0*  minion端的操作系统信息 
     2 salt01:
     3     ----------
     4     os:
     5         CentOS
     6 salt03:
     7     ----------
     8     os:
     9         CentOS
    10 salt02:
    11     ----------
    12     os:
    13         CentOS 
    14 [root@salt100 salt]# salt 'salt0*' grains.item ip4_interfaces:eth0  # 多级查询 
    15 salt03:
    16     ----------
    17     ip4_interfaces:eth0:
    18         - 172.16.1.13
    19 salt01:
    20     ----------
    21     ip4_interfaces:eth0:
    22         - 172.16.1.11
    23 salt02:
    24     ----------
    25     ip4_interfaces:eth0:
    26         - 172.16.1.12
    27 [root@salt100 salt]# salt 'salt0*' grains.item ip4_interfaces:eth0:0  # 取列表中的第一个值★★★★★
    28 salt01:
    29     ----------
    30     ip4_interfaces:eth0:0:
    31         172.16.1.11
    32 salt03:
    33     ----------
    34     ip4_interfaces:eth0:0:
    35         172.16.1.13
    36 salt02:
    37     ----------
    38     ip4_interfaces:eth0:0:
    39         172.16.1.12

    8.2. 通过grains查询信息

    示例1

     1 [root@salt100 salt]# salt 'salt01' grains.item os  
     2 salt01:
     3     ----------
     4     os:
     5         CentOS
     6 [root@salt100 salt]# salt -G 'os:CentOS' cmd.run 'echo "zhangliang $(date +%Y)"' # 指定操作系统为CentOS的   
     7 salt03:
     8     zhangliang 2018
     9 salt02:
    10     zhangliang 2018
    11 salt01:
    12     zhangliang 2018
    13 salt100:
    14     zhangliang 2018

    示例2

     1 [root@salt100 salt]# salt 'salt01' grains.item ip_interfaces 
     2 salt01:
     3     ----------
     4     ip_interfaces:
     5         ----------
     6         eth0:
     7             - 172.16.1.11
     8             - fe80::20c:29ff:fe95:1b7a
     9         eth1:
    10             - 10.0.0.11
    11             - fe80::20c:29ff:fe95:1b84
    12         lo:
    13             - 127.0.0.1
    14             - ::1
    15 [root@salt100 salt]# salt -G 'ip_interfaces:eth0:172.16.1.11' cmd.run 'whoami'  
    16 salt01:
    17     root
    18 [root@salt100 salt]# salt -G 'ip_interfaces:eth1:10.0.0.11' cmd.run 'whoami'  
    19 salt01:
    20     root

    9. 在top file中使用grains

    9.1. top.sls编写

     1 [root@salt100 salt]# pwd
     2 /srv/salt
     3 [root@salt100 salt]# cat top.sls 
     4 base:
     5   # 使用通配符  暂时注释掉
     6   # 'salt0*':
     7   #   - web.apache
     8     # - web.nginx  # 可以有多个
     9   # 指定具体minion
    10   'salt03':
    11     - web.apache
    12   # 使用grains匹配,添加如下几行
    13   'roles:webserver03':
    14     - match: grain
    15     - web.apache

    9.2. state.highstate执行

    首先通过grains查看salt01和salt02 的roles信息

     1 [root@salt100 salt]# salt 'salt01' grains.item roles  
     2 salt01:
     3     ----------
     4     roles:
     5         - webserver03
     6         - memcache03
     7 [root@salt100 salt]# salt 'salt02' grains.item roles
     8 salt02:
     9     ----------
    10     roles:

    执行结果

     1 [root@salt100 salt]# salt 'salt01' state.highstate test=True # 执行正常
     2 ………………
     3 [root@salt100 salt]# salt 'salt01' state.highstate # 执行正常
     4 ………………
     5 [root@salt100 salt]# salt 'salt02' state.highstate test=True  # 执行异常【top.file 中没有该匹配】
     6 salt02:
     7 ----------
     8           ID: states
     9     Function: no.None
    10       Result: False
    11      Comment: No Top file or master_tops data matches found.
    12      Changes:   
    13 
    14 Summary for salt02
    15 ------------
    16 Succeeded: 0
    17 Failed:    1
    18 ------------
    19 Total states run:     1
    20 Total run time:   0.000 ms
  • 相关阅读:
    Android测试入门篇
    SQL的基本知识
    正则表达式
    ES5语法
    vscode
    继承小结
    工作遇到的问题
    后台程序员的HTTP缓存
    xhr下载图片/服务器向客户端推送消息
    HTTP2.0
  • 原文地址:https://www.cnblogs.com/zhanglianghhh/p/10623156.html
Copyright © 2011-2022 走看看