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 命令执行是立即生效


   

原文地址:https://www.cnblogs.com/linqiuhua/p/7941984.html