zoukankan      html  css  js  c++  java
  • saltstack

    要维护好一个庞大的配置管理系统,首先得维护好管理对象。

    在saltStack中管理对象叫做target,在master上我们可以采用不同target去管理不同minion。

    target通过管理和匹配minion的id来做集合。

    匹配:列表匹配、正则匹配

    列表匹配      salt   -L   minion中id的名称   test.ping

    正则匹配      salt   -E    'min*'    test.ping                         #min是一个简单的正则表达式,也可以写出其他正则表达式去匹配minion中的id

    ================================================================================================================

    管理对象属性grains

    grains里记录着每台minion的一些常用属性:cpu、内存、磁盘,网络信息等等,可以通过grains.items查看某台minion的所有grains信息。

    minion的grains信息是minion启动时采集汇报给master的。

    自定义grains的几种方法:

    1.通过minion配置文件定义;

    2.通过grains相关文件定义;

    3.通过python脚本定义;

    grains相关命令用法:

    [root@localhost ~]# salt 'web01' sys.list_functions grains
    web01:
        - grains.append
        - grains.delval
        - grains.filter_by
        - grains.get
        - grains.get_or_set_hash
        - grains.has_value
        - grains.item
        - grains.items
        - grains.ls
        - grains.remove
        - grains.setval
        - grains.setvals

    [root@localhost ~]# salt 'web01' 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
        

    'grains.delval:'

        New in version 0.17.0

        Delete a grain from the grains config file

        :param destructive: Delete the key, too. Defaults to False.

        CLI Example:

            salt '*' grains.delval key

    自定义Grains

    在开头我们提到三种自定义Grains的方法,这里一一说明下。

    1、通过Minion配置文件配置

    在Minion端我们可以通过查看/etc/salt/minion配置文件中,查找grains可以查看到相关注释的示例。不过便于配置管理,我们不一般不会选择在该文件上进行修改,而在minion include的目录下/etc/salt/minion.d目录下单独创建grains.conf文件。就以官方给出的示例,将minion配置文件中配置示例复到/etc/salt/minion.d/grains.conf中,并将注释去掉,如下:

    1. [root@361way.com ~]# cat /etc/salt/minion.d/grains.conf
    2. grains:
    3. roles:
    4. - webserver
    5. - memcache
    6. deployment: datacenter4
    7. cabinet: 13
    8. cab_u: 14-15

    配置增加完成后重启salt-minion服务生效。通过saltmaster端查看结果如下:

    1. [root@saltmaster ~]# salt 'irora200' grains.item roles
    2. www.361way.com:
    3. ----------
    4. roles:
    5. - webserver
    6. - memcache

    这里有两点一定需要注意:1、grains.conf 里的配置需要是YAML格式;2、配置修改后需要重启salt-minion服务才能生效。

    2、通过Grains模块定义Grains

    上面使用list_functions 列出所有的函数时,对应的是有grains.append、grains.setval等方法,这里就是利用该方法进行的操作。示例如下:

    1. [root@saltmaster ~]# salt 'irora200' grains.append hosttype 'online'
    2. irora200:
    3. ----------
    4. hosttype:
    5. - online
    6. [root@saltmaster ~]# salt 'irora200' grains.item hosttype
    7. irora200:
    8. ----------
    9. hosttype:
    10. - online
    11. [root@saltmaster ~]# salt 'irora200' grains.setvals "{'idc':'ZJ','city':'hangzhou'}"
    12. irora200:
    13. ----------
    14. city:
    15. hangzhou
    16. idc:
    17. ZJ
    18. [root@saltmaster ~]# salt 'irora200' grains.item idc city
    19. irora200:
    20. ----------
    21. city:
    22. hangzhou
    23. idc:
    24. ZJ

    这样配置后,会在minion主机端生成配置文件grains ,如下:

    1. [root@irora200 salt]# cat /etc/salt/grains
    2. city: hangzhou
    3. hosttype:
    4. - online
    5. idc: ZJ                                              

      如下图所示,我们做了一个实验,如果/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中的重复值。即下例中deployment的值在/etc/salt/grains中的变化为datacenter1(setval操作后) --datacenter4(append操作后,并没有变成datacenter5)。

      saltstack grains

      所以会上例中不难看出,/etc/salt/minion.d/grains.conf (或/etc/salt/minion)  > /etc/salt/grains配置中的优先级。

      注:该处也适用通过分发文件到minion的/etc/salt/grains ,不过分发文件和命令执行的区别是,分发文件必须要minion端重启salt-minion服务后才能生效。而通过grains 命令执行是立即生效


       

  • 相关阅读:
    17.07.28 SQL 函数
    JavaScript 数组去重
    JavaScript 之 DOM
    JavaScript 之 BOM
    JavaScript之Math
    JavaScript之String
    JavaScript之数组
    JavaScript之作用域
    JavaScript之函数
    JavaScript之循环
  • 原文地址:https://www.cnblogs.com/linqiuhua/p/7941984.html
Copyright © 2011-2022 走看看