zoukankan      html  css  js  c++  java
  • saltstack 之grains (一)

    参考:http://www.cnblogs.com/shhnwangjian/p/5985868.html

    salt 的grains主要是存储静态的数据,主要是minion端的一些数据,比如,hostname,内存大小、IP,CPU等一些数据,主要是存储在minion端的。

    minion在启动时会读取grains数据,如果有新的grains数据需要重启minion服务,或者在master端使用salt的命令进行刷新。

    自定义grains数据的优先顺序

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

    1. Core grains.
    2. Custom grains in /etc/salt/grains.
    3. Custom grains in /etc/salt/minion.
    4. Custom grain modules in _grains directory, synced to minions.

     后面的grains信息会覆盖前面的信息。

    _grains会覆盖前面所有的

    先来查看一下有哪些grains数据

    查看获取grains信息

    在master端查看

    使用grains.ls 列出有效的grains

    [root@cong-33 ~]# salt 'cong-55' grains.ls  ##列出grains的key信息
    cong-55:
        - GameType
        - SSDs
        - cloud
        - cpu_flags
        - cpu_model
        - cpuarch
        - disks
        - dns
        - domain
        - fqdn
        - fqdn_ip4
        - fqdn_ip6
    。。。。。。。
    。。。。。。。

    grains.items列出所有grains的信息

    [root@cong-33 ~]# salt 'cong-55' grains.items
    cong-55:
        ----------
        GameType:
            3D
        SSDs:
        cloud:
            qc
        cpu_flags:
            - fpu
            - vme
    ............
    ............

    获取指定的grains的key的信息

    [root@cong-33 ~]# salt 'cong-55' grains.get shell  ##获取shell环境
    cong-55:
        /bin/bash
    
    [root@cong-33 ~]# salt 'cong-55' grains.item mem_total  ##获取内存总大小
    cong-55:
        ----------
        mem_total:
            2517
    [root@cong-33 ~]#

    在minion端使用salt-call来获取

    [root@cong-55 ~]# salt-call grains.ls
    local:
        - GameType
        - SSDs
        - cloud
        - cpu_flags
        - cpu_model
        - cpuarch
        - disks
        - dns
    。。。。。。。。
    
    [root@cong-55 ~]# salt-call grains.items
    local:
        ----------
        GameType:
            3D
        SSDs:
        cloud:
            qc
        cpu_flags:
            - fpu
    。。。。。。。
    。。。。。。
    
    [root@cong-55 ~]# salt-call grains.get shell
    local:
        /bin/bash
    [root@cong-55 ~]# salt-call grains.item mem_total
    local:
        ----------
        mem_total:
            2517
    [root@cong-55 ~]#

    自定义配置grains信息

    这些都是默认的grains信息,我们可以自定义添加指定的grains信息。

    在minion端的配置grains

    minion添加grains信息

       为了方便管理我们在/etc/salt/minon的主配置文件中另增一个配置文件专门用来配置grains信息的,这样好管理。

    [root@cong-55 ~]# grep -v ^$ /etc/salt/minion|grep -v ^#
    default_include: minion.d/*.conf  ##相对路径,我们在这个目录下创建以.conf结尾的文件就可被salt-minion读取了
    master: 192.168.1.33
    id: cong-55
    [root@cong-55 ~]#

    配置grains文件

    [root@cong-55 ~]# cat /etc/salt/minion.d/grains.conf 
    grains:
      roles:
        - gameserver
        - mysql
        - redis
      GameType: 3D
      cloud: qc
      
    [root@cong-55 ~]# 

    配置完成,重启minion服务

    [root@cong-55 ~]# /etc/init.d/salt-minion restart

    查看指定的grains的key是否可以获取

    [root@cong-33 ~]# salt 'cong-55' grains.item GameType
    cong-55:
        ----------
        GameType:
            3D
    
    [root@cong-33 ~]# salt 'cong-55' grains.item roles
    cong-55:
        ----------
        roles:
            - gameserver
            - mysql
            - redis
    [root@cong-33 ~]#

    自定义的grains的信息都可以配置好了。

    不重启minion让grains也可以生效

    上面在minion端配置好后需要重启服务才可以生效,也可以不重启minion服务生效的。直接在master端刷新grains的数据就可以了

    minion端配置grains

    [root@cong-55 ~]# cat /etc/salt/minion.d/grains.conf 
    grains:
      roles:
        - gameserver
        - mysql
        - redis
      GameType: 3D
      cloud: qc
      GameName: TestGame
      
    [root@cong-55 ~]#

    在master刷新数据,并获取新的grains key的值

    [root@cong-33 ~]# salt 'cong-55' saltutil.sync_grains  ##saltutil.refresh_grains 命令也可以刷新
    cong-55:
        - grains.my_grains  ##这个是我在master配置的grains信息,下面再说
    [root@cong-33 ~]# salt 'cong-55' grains.item GameName  ##刷新后可以获取指定的grains信息
    cong-55:
        ----------
        GameName:
            TestGame
    [root@cong-33 ~]# 

    在master配置grains信息

    参考:http://www.cnblogs.com/shhnwangjian/p/5985868.html

    在master配置grains信息需要在指定的file_roots目录下的_grains目录中创建grains的信息文件才可以.

    file_roots目录默认是 /src/salt/   而grains的信息是在file_roots目录下的_grains目录里面。

    file_roots的值可以通过配置文件/etc/salt/master来配置指定。还可以配置多个环境的file_roots的值

    file_roots配置:

     然后我们在file_roots目录下创建一个_grains目录,然后在创建grains的信息文件

    [root@cong-33 ~]# mkdir /srv/salt/_grains/ -p

    配置grains信息

    [root@cong-33 ~]# cd /srv/salt/_grains/
    [root@cong-33 _grains]# ls
    my_grains.py
    [root@cong-33 _grains]# cat my_grains.py 
    #!/usr/bin/env python
    #_*_ coding: utf-8 _*_
    
    def my_grains():
        grains = {}
        grains['name'] = 'cong'
        grains['edu'] = 'shhnwangjian'
    
        return grains
    
    #my_grains
    
    #print  my_grains()
    [root@cong-33 _grains]#

    上面的grains文件使用python编写的,

    然后我们在master通过命令来刷新grains就可以了

    [root@cong-33 _grains]# salt 'cong-55' saltutil.refresh_grains
    cong-55:
        True
    [root@cong-33 _grains]# salt 'cong-55' grains.get name
    cong-55:
        cong
    [root@cong-33 _grains]# salt 'cong-55' grains.get edu
    cong-55:
        shhnwangjian
    [root@cong-33 _grains]# 

    下面说一下grains的简单使用吧。

    我们可以根据grains的信息来做sls文件的编写,比如grains得出OS是redhat类型的系统就执相对应的操作,类似apache在redhat平台和debin平台的名称就不一样,我们就可以根据grains的OS信息来获取系统的平台,再做处理。

    -G 使用grains信息,匹配内存为2517的minion ,执行ls /tmp 命令

    [root@cong-33 _grains]# salt -G 'mem_total:2517' cmd.run 'ls /tmp'  
    cong-55:
        mysql.sock
        yum.log
        yum_save_tx-2017-11-21-11-24msqElI.yumtx
    [root@cong-33 _grains]# 

    匹配内存为2517的minion,获取匹配minion的系统类型

    [root@cong-33 _grains]# salt -G 'mem_total:2517' grains.get os
    cong-55:
        CentOS

     pillar也是salt存储信息的,下面pillar例子根据minion的os系统类型来设置pillar的参数的值。

    centos系统的apache key 的值就是httpd

    debin系统的apache key的值就是 apache2

    这样我们能在安装apache时可以根据这个来获取名称,在使用安装命令来安装软件

    [root@cong-33 _grains]# cat /srv/salt/pillar/httpd.sls 
    {% if grains['os'] == 'CentOS' %}
    apache: httpd
    {% elif grains['os'] == 'Debian' %}
    apache: apache2
    {% endif %}
    [root@cong-33 _grains]# 
  • 相关阅读:
    初探webpack4--根据模版自动生成HTML
    初探webpack4---简介与常用loader使用方法
    axios请求五种方法
    iview实现国际化
    解决vuex页面刷新导致数据丢失问题
    一步一步搞懂支持向量机——从牧场物语到SVM(下)
    一步一步搞懂支持向量机——从牧场物语到SVM(上)
    set 利用lower_bound实现key索引
    unique & lower_bound C++
    逆元
  • 原文地址:https://www.cnblogs.com/LYCong/p/7872585.html
Copyright © 2011-2022 走看看