• saltstack数据系统Grains


    Grains是什么?

      Grains是SaltStack收集的有关底层管理系统的静态信息。 SaltStack收集的Grains信息包括操作系统版本、域名、IP地址、内核、操作系统类型、内存以及许多其他系统属性。
      您可以将自定义的grains添加到Salt Minion的/etc/salt/grains文件中,或放置在Grains部分下的Salt Minion配置文件中。 例如,许多用户为每个Salt Minion添加一个称为角色的定制grain来描述系统的功能。

    Grains获取信息

    查看Grains函数:

    root@King: /home# salt 'salt-minion-1' sys.list_functions grains
    salt-minion-1:
        - grains.append        # 将grains的key和value添加到grains配置文件中以列表形式保存,类型  list
        - grains.delval        # 删除grains的value
        - grains.filter_by
        - grains.get           # 获取setvals插入的标签指定的值
        - grains.get_or_set_hash   # 在自定义配置文件中加入哈希加密值
        - grains.has_value   
        - grains.item      # 获取一个或者多个信息
        - grains.items       # 获取详细信息
        - grains.ls      # 获取主机信息
        - grains.remove      # 从grains配置文件中的列表中删除一个值(删除grains的key列表中的一个value值,如果grains的key和value不是列表不能删除)
        - grains.setval      # 批量添加grains信息
        - grains.setvals     # 添加多个grains的key和value到grains配置文件中,类型是key-value

    grains.append 是将value添加到key的列表中,如果key不存在将创建

    grains.setvals 添加多个grains的key和value到grains配置文件中,类型是key-value

    grains.delkey 会把key和value一起删掉,

    grains.delval只是把value删掉,key还在,key的值变为null

    每个命令的帮助信息又可以通过sys.doc查看,如下:

    root@King: /home# salt 'salt-minion-1'  sys.doc grains
    'grains.append:'
    
        New in version 0.17.0
    
        Append a value to a list in the grains config file. If the grain doesn't
        exist, the grain key is added and the value is appended to the new grain
        as a list item.
    
        key
            The grain key to be appended to
    
        val
            The value to append to the grain key
    
        :param convert: If convert is True, convert non-list contents into a list.
            If convert is False and the grain contains non-list contents, an error
            is given. Defaults to False.
    
        :param delimiter: The key can be a nested dict key. Use this parameter to
            specify the delimiter you use.
            You can now append values to a list in nested dictionnary grains. If the
            list doesn't exist at this level, it will be created.
            New in version 2014.7.6
    
        CLI Example:
    
            salt '*' grains.append key val
    .........此处省略

    获取主机item信息

    root@King: /home# salt 'salt-minion-1' grains.ls
    salt-minion-1:
        - SSDs
        - a
        - 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
    ......此处省略

    查看item详细信息

    root@King: /home# salt 'salt-minion-1' grains.items
    salt-minion-1:
        ----------
        SSDs:
        a:
            - 1
        cpu_flags:
            - fpu
            - vme
            - de
            - pse
            - tsc
            - msr
           ......此处省略

    查看一项或者多项item值

    root@King: /home# salt 'salt-minion-1' grains.item ipv4    # 查看ipv4的值
    salt-minion-1:
        ----------
        ipv4:
            - 127.0.0.1
            - 172.16.61.116
    root@King: /home# salt 'salt-minion-1' grains.item localhost ipv4  # 查看多个值
    salt-minion-1:
        ----------
        ipv4:
            - 127.0.0.1
            - 172.16.61.116
        localhost:
            King

    自定义Grains

    命令行操作:

    # 定义一个hosttype 值为redis-slave
    root@King: /home# salt 'salt-minion-1' grains.append hosttype 'redis-slave'
    salt-minion-1:
        ----------
        hosttype:
            - redis-slave
    
    # 查看自定义标签
    root@King: /home# salt 'salt-minion-1' grains.item hosttype
    salt-minion-1:
        ----------
        hosttype:
            - redis-slave
    
    # 自定义配置
    root@King: /home# salt 'salt-minion-1' grains.setvals "{'city':'beijing'}"
    salt-minion-1:
        ----------
        city:
            beijing
    
    # 查看新增的配置
    root@King: /home# salt 'salt-minion-1' grains.item city
    salt-minion-1:
        ----------
        city:
            beijing

    自定义后,会在minion主机端生成配置文件grains:

    root@King: ~# cat /etc/salt/grains    # 可以看到刚才自定义的标签和值
    city: beijing
    hosttype:
    - redis-slave

    配置文件修改(minion端)

      修改minion端后,要重启minion端服务才能生效

      修改minion端的配置文件:修改这三个文件中的配置都会生效 

      修改/etc/salt/grains不重启服务的方法,刷新命令如下:

    salt '*' saltutil.sync_grains

    配置文件:

    /etc/salt/minion.d/grains.conf
    /etc/salt/minion
    /etc/salt/grains

    总结:

    如果/etc/salt/minion.d/grains.conf中已经存在的自定义items, 再通过执行grains.append或grains.setval去执行时,发现会以 grains.conf中的为准,虽然在/etc/salt/grains中也有内容生成。

    而且执行grains.append操作后,/etc/salt/minion.d/grains.conf 中已存在的值会覆盖/etc/salt/grains中的重复值。

    /etc/salt/minion.d/grains.conf (或/etc/salt/minion) > /etc/salt/grains配置中的优先级。

    grains_module的方式设置(master端)

    在master上建立模块对应目录:

    root@King: ~#  mkdir -pv /srv/salt/_grains 

    写入一个简单的模块

    #vi /srv/salt/_grains/my_grain_mod.py 
    import time 
    def now():
        grains = {}
        grains['now'] = time.time() 
        return grains

    同步模块到minion

    root@King: ~# salt 'salt-minion-1' saltutil.sync_all
    salt-minion-1:
        ----------
        beacons:
        grains:
            - grains.my_grain_mod      # 新增的自定义
        modules:
        output:
        renderers:
        returners:
        sdb:
        states:
        utils:

    重新加载模块和查看新设置的Grains:

    root@King: ~# salt 'salt-minion-1' sys.reload_modules
    salt-minion-1:
        True
    root@King: ~# salt 'salt-minion-1' grains.item now
    salt-minion-1:
        ----------
        now:
            1611036019.0
  • 相关阅读:
    在JavaScript的数组中进行数组元素查找和替换(JS的indexOf等)
    GNU/Linux Distribution Timeline v12.10
    makefile编写差异
    java快速排序1000万无序数组JVM-Xmx=256M 耗时2s
    Quartz cron表达式
    hdu
    action中实现对批量文件上传的封装
    MyGui笔记(1)建立第一个工程
    Jenkins参数化构建
    最完美的xslt数值函数与字符串函数(转)
  • 原文地址:https://www.cnblogs.com/Tang-Yuan/p/14297635.html
Copyright © 2020-2023  润新知