saltstack-pillar去掉总入口写top.sls文件的限制,拆分top.sls为多个top


Pillar是Salt用来分发全局变量到所有minions的一个接口。pillar只对匹配类型的minion有效。 这使它为特定的minion存储敏感数据非常有用.详细的介绍见官网

1.配置启用pillar

Salt Master服务器维护了一个pillar_roots 设置 ,和在Salt 文件服务器上使用的file_roots结构对应。和Salt 文件服务器类似,master配置文件中的 pillar_roots 选项也是基于环境映射到目录。Pillar数据被映射到基于top文件匹配到的Minion上,top 文件是和state top文件一样的方式列出的。Salt pillar可以使用和标准的top 文件同样的匹配器类型。

主配置文件中的 pillar_roots 和 file_roots 的功能是相同的。

pillar_roots:
  base:
    - /srv/pillar

使用pillar必须存在top文件,同file一致,他是所有pillar使用的入口,salt根据top.sls文件的映射对应到每个minion。

/srv/pillar/top.sls

base:
  '*':
    - comman

以上top文件的意思是,所有的minion都可使用/srv/pillar/comman.sls文件的内容

2.遇到的问题

每次有新的pillar数据就需要在/srv/pillar/top.sls中增加一个minion和pillar文件的映射,在高并发的情况,容易造成写冲突,导致数据丢失。

3.简化每次修改top文件的方法

参考saltstack应用之简化pillar配置步骤,每个minion所有的pillar数据都保存在一个文件中,若是存在相同的key的pillar数据,就不能并发的操作,所以想到给每个minion都指定一个"top"文件。

以下为修改配置步骤:

修改top.sls文件内容

#!py
#coding:utf-8
'''
返回minion对应的pillar信息
'''
import yaml
import os
import salt.master as pub
log = logging.getLogger(__name__)
def run():  #注意必须是run()方法,top只认可run

  config={}
  id=__opts__['id']
  #arg=__clear_load__['arg'][0]
  pillar_root=__opts__['pillar_roots']['base'][0]
  path='%s/pillar/%s'%(pillar_root,id)
  #path='%s/pillar/%s/%s'%(pillar_root,id,id)

  if os.path.isfile(path):
    s=open(path).read()
    config=yaml.load(s)
    log.info(config)
  return config

在/srv/pillar/pillar/目录下创建以minion_id命名的"top"文件,内容的格式同/srv/salt/top.sls文件格式一致,如下以minion-deletedevweb02为例:

vim deletedevweb02 

base:
  'deletedevweb02':
    - common
    - test.test_no_1

写pillar文件:

cat test_no_1.sls
hello: my test

执行命令查看该minion的pillar数据

salt \deletedevweb02 pillar.item hello
deletedevweb02:
    ----------
    hello:
        my test

这样每次有新的pillar数据都可在/srv/pillar/pillar/minion_id文件中追加pillar文件的相对路径,这样既减少冲突也可并发的对同一个minion执行不同的命令。


你可能感兴趣的:(saltstack,pillar)