Saltstack_使用指南04_數據系統-Grains

1. 主機規劃

服務器名稱 操作系統版本 內網IP 外網IP(模擬) Hostname 部署模塊
salt100 CentOS7.5 172.16.1.100 10.0.0.100 salt100 salt-master、salt-minion
salt01 CentOS7.5 172.16.1.11 10.0.0.11 salt01 salt-minion
salt02 CentOS7.5 172.16.1.12 10.0.0.12 salt02 salt-minion
salt03 CentOS7.5 172.16.1.13 10.0.0.13 salt03 salt-minion
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條目項信息

[root@salt100 salt]# salt 'salt01' grains.ls  # 查看salt01機器有哪些grains條目項信息
………………

4.2. grains全部信息

[root@salt100 salt]# salt 'salt01' grains.items  # 查看salt01機器有哪些grains信息 
salt01:
    ----------
    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
        - ht
        - 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
        - fsgsbase
        - tsc_adjust
        - bmi1
        - avx2
        - smep
        - bmi2
        - invpcid
        - mpx
        - rdseed
        - adx
        - smap
        - clflushopt
        - xsaveopt
        - xsavec
        - arat
    cpu_model:
        Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
    cpuarch:
        x86_64
    disks:
        - sda
        - sr0
    dns:
        ----------
        domain:
        ip4_nameservers:
            - 10.0.0.2
            - 223.5.5.5
        ip6_nameservers:
        nameservers:
            - 10.0.0.2
            - 223.5.5.5
        options:
        search:
        sortlist:
    domain:
    fqdn:
        salt01
    fqdn_ip4:
        - 172.16.1.11
    fqdn_ip6:
        - fe80::20c:29ff:fe95:1b84
        - fe80::20c:29ff:fe95:1b7a
    gid:
        0
    gpus:
        |_
          ----------
          model:
              SVGA II Adapter
          vendor:
              unknown
    groupname:
        root
    host:
        salt01
    hwaddr_interfaces:
        ----------
        eth0:
            00:0c:29:95:1b:7a
        eth1:
            00:0c:29:95:1b:84
        lo:
            00:00:00:00:00:00
    id:
        salt01
    init:
        systemd
    ip4_gw:
        10.0.0.2
    ip4_interfaces:
        ----------
        eth0:
            - 172.16.1.11
        eth1:
            - 10.0.0.11
        lo:
            - 127.0.0.1
    ip6_gw:
        False
    ip6_interfaces:
        ----------
        eth0:
            - fe80::20c:29ff:fe95:1b7a
        eth1:
            - fe80::20c:29ff:fe95:1b84
        lo:
            - ::1
    ip_gw:
        True
    ip_interfaces:
        ----------
        eth0:
            - 172.16.1.11
            - fe80::20c:29ff:fe95:1b7a
        eth1:
            - 10.0.0.11
            - fe80::20c:29ff:fe95:1b84
        lo:
            - 127.0.0.1
            - ::1
    ipv4:
        - 10.0.0.11
        - 127.0.0.1
        - 172.16.1.11
    ipv6:
        - ::1
        - fe80::20c:29ff:fe95:1b7a
        - fe80::20c:29ff:fe95:1b84
    kernel:
        Linux
    kernelrelease:
        3.10.0-862.el7.x86_64
    kernelversion:
        #1 SMP Fri Apr 20 16:44:24 UTC 2018
    locale_info:
        ----------
        defaultencoding:
            UTF-8
        defaultlanguage:
            en_US
        detectedencoding:
            UTF-8
    localhost:
        salt01
    lsb_distrib_codename:
        CentOS Linux 7 (Core)
    lsb_distrib_id:
        CentOS Linux
    machine_id:
        5ae5f27014ee438780bf37ae68889471
    manufacturer:
        VMware, Inc.
    master:
        salt100
    mdadm:
    mem_total:
        1821
    nodename:
        salt01
    num_cpus:
        2
    num_gpus:
        1
    os:
        CentOS
    os_family:
        RedHat
    osarch:
        x86_64
    oscodename:
        CentOS Linux 7 (Core)
    osfinger:
        CentOS Linux-7
    osfullname:
        CentOS Linux
    osmajorrelease:
        7
    osrelease:
        7.5.1804
    osrelease_info:
        - 7
        - 5
        - 1804
    path:
        /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
    pid:
        1598
    productname:
        VMware Virtual Platform
    ps:
        ps -efHww
    pythonexecutable:
        /usr/bin/python
    pythonpath:
        - /usr/bin
        - /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/lib64/python2.7/site-packages/gtk-2.0
        - /usr/lib/python2.7/site-packages
    pythonversion:
        - 2
        - 7
        - 5
        - final
        - 0
    saltpath:
        /usr/lib/python2.7/site-packages/salt
    saltversion:
        2018.3.3
    saltversioninfo:
        - 2018
        - 3
        - 3
        - 0
    selinux:
        ----------
        enabled:
            False
        enforced:
            Disabled
    serialnumber:
        VMware-56 4d 32 86 98 5c a8 3c-50 92 82 be 30 95 1b 7a
    server_id:
        2097601471
    shell:
        /bin/sh
    swap_total:
        2047
    systemd:
        ----------
        features:
            +PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN
        version:
            219
    uid:
        0
    username:
        root
    uuid:
        86324d56-5c98-3ca8-5092-82be30951b7a
    virtual:
        VMware
    zfs_feature_flags:
        False
    zfs_support:
        False
    zmqversion:
        4.1.4

4.3. 查詢grains指定信息

[root@salt100 ~]# salt 'salt01' grains.item roles  # 沒有該項信息,因此只顯示key 不顯示value
salt01:
    ----------
    roles:
[root@salt100 ~]# salt 'salt01' grains.item os
salt01:
    ----------
    os:
        CentOS

5. 自寫grains的py腳本

該腳本在salt master端,然後推送到minion端。

5.1. master端編寫py腳本

[root@salt100 salt]# pwd
/srv/salt
[root@salt100 salt]# mkdir _grains  # salt指定的位置
[root@salt100 salt]# cd _grains/
[root@salt100 _grains]# vim my_grains.py 
#!/usr/bin/env python
# -*- coding:utf-8 -*-

def grains_define():
    # initialize a grains dictionary
    grains = {}
    # 填充信息
grains['roles'] = ["webserver01","memcache01"],
grains['os'] = 'redhat01'

    # 返回這個字典
    return grains

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

在master端執行,並查看grains信息
[root@salt100 ~]# salt 'salt01' saltutil.sync_grains  # 會推送py腳本到minion端,並刷新grains信息
salt01:
    - grains.my_grains
[root@salt100 ~]# salt 'salt01' grains.item roles
salt01:
    ----------
    roles:
        |_
          - webserver01
          - memcache01
[root@salt100 ~]# salt 'salt01' grains.item os
salt01:
    ----------
    os:
        redhat01

5.3. 在minion端查看推送過來的文件位置

[root@salt01 minion]# pwd
/var/cache/salt/minion
[root@salt01 minion]# tree
.
├── accumulator
├── extmods
│   └── grains  # 在這個目錄下
│       ├── my_grains.py
│       └── my_grains.pyc
├── files
│   └── base
│       ├── _grains
│       │   └── my_grains.py
│       ├── top.sls
│       └── web
│           └── apache.sls
├── highstate.cache.p
├── module_refresh
├── pkg_refresh
├── proc
└── sls.p

8 directories, 9 files

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

注意:
該文件默認不存在,需要自己創建。

6.1. minion端配置修改

在salt01上操作

[root@salt01 salt]# cat /etc/salt/grains 
roles:
  - webserver02
  - memcache02
os: redhat02

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

在salt100上操作

[root@salt100 ~]# salt 'salt01' saltutil.sync_grains  # 刷新grains信息
salt01:
[root@salt100 ~]# salt 'salt01' grains.item roles
salt01:
    ----------
    roles:
        - webserver02
        - memcache02
[root@salt100 ~]# salt 'salt01' grains.item os
salt01:
    ----------
    os:
        redhat02

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

生產中不建議使用,因爲寫在了默認的配置文件中,不利於後期維護。

7.1. minion端配置修改

minion端salt01機器上配置修改

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

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

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

[root@salt100 ~]# salt 'salt01' saltutil.sync_grains  # 刷新指定minion的grains信息 
salt01:
[root@salt100 ~]# salt 'salt01' grains.item roles
salt01:
    ----------
    roles:
        - webserver03
        - memcache03
[root@salt100 ~]# salt 'salt01' grains.item os
salt01:
    ----------
    os:
        redhat03

8. Grains使用方式

8.1. 查詢grains的指定信息

[root@salt100 salt]# salt 'salt0*' grains.item os  # 通過通配符匹配salt0*  minion端的操作系統信息 
salt01:
    ----------
    os:
        CentOS
salt03:
    ----------
    os:
        CentOS
salt02:
    ----------
    os:
        CentOS 
[root@salt100 salt]# salt 'salt0*' grains.item ip4_interfaces:eth0  # 多級查詢 
salt03:
    ----------
    ip4_interfaces:eth0:
        - 172.16.1.13
salt01:
    ----------
    ip4_interfaces:eth0:
        - 172.16.1.11
salt02:
    ----------
    ip4_interfaces:eth0:
        - 172.16.1.12
[root@salt100 salt]# salt 'salt0*' grains.item ip4_interfaces:eth0:0  # 取列表中的第一個值★★★★★
salt01:
    ----------
    ip4_interfaces:eth0:0:
        172.16.1.11
salt03:
    ----------
    ip4_interfaces:eth0:0:
        172.16.1.13
salt02:
    ----------
    ip4_interfaces:eth0:0:
        172.16.1.12

8.2. 通過grains查詢信息

示例1
[root@salt100 salt]# salt 'salt01' grains.item os  
salt01:
    ----------
    os:
        CentOS
[root@salt100 salt]# salt -G 'os:CentOS' cmd.run 'echo "zhangliang $(date +%Y)"' # 指定操作系統爲CentOS的   
salt03:
    zhangliang 2018
salt02:
    zhangliang 2018
salt01:
    zhangliang 2018
salt100:
    zhangliang 2018
示例2
[root@salt100 salt]# salt 'salt01' grains.item ip_interfaces 
salt01:
    ----------
    ip_interfaces:
        ----------
        eth0:
            - 172.16.1.11
            - fe80::20c:29ff:fe95:1b7a
        eth1:
            - 10.0.0.11
            - fe80::20c:29ff:fe95:1b84
        lo:
            - 127.0.0.1
            - ::1
[root@salt100 salt]# salt -G 'ip_interfaces:eth0:172.16.1.11' cmd.run 'whoami'  
salt01:
    root
[root@salt100 salt]# salt -G 'ip_interfaces:eth1:10.0.0.11' cmd.run 'whoami'  
salt01:
    root

9. 在top file中使用grains

9.1. top.sls編寫

[root@salt100 salt]# pwd
/srv/salt
[root@salt100 salt]# cat top.sls 
base:
  # 使用通配符  暫時註釋掉
  # 'salt0*':
  #   - web.apache
    # - web.nginx  # 可以有多個
  # 指定具體minion
  'salt03':
    - web.apache
  # 使用grains匹配,添加如下幾行
  'roles:webserver03':
    - match: grain
    - web.apache

9.2. state.highstate執行

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

[root@salt100 salt]# salt 'salt01' grains.item roles  
salt01:
    ----------
    roles:
        - webserver03
        - memcache03
[root@salt100 salt]# salt 'salt02' grains.item roles
salt02:
    ----------
    roles:
執行結果
[root@salt100 salt]# salt 'salt01' state.highstate test=True # 執行正常
………………
[root@salt100 salt]# salt 'salt01' state.highstate # 執行正常
………………
[root@salt100 salt]# salt 'salt02' state.highstate test=True  # 執行異常【top.file 中沒有該匹配】
salt02:
----------
          ID: states
    Function: no.None
      Result: False
     Comment: No Top file or master_tops data matches found.
     Changes:   

Summary for salt02
------------
Succeeded: 0
Failed:    1
------------
Total states run:     1
Total run time:   0.000 ms
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章