saltstack-pillar去掉總入口寫top.sls文件的限制,拆分top.sls爲多個top


Pillar是Salt用來分發全局變量到全部minions的一個接口。pillar只對匹配類型的minion有效。 這使它爲特定的minion存儲敏感數據很是有用.詳細的介紹見官網html

1.配置啓用pillarpython

Salt Master服務器維護了一個pillar_roots 設置 ,和在Salt 文件服務器上使用的file_roots結構對應。和Salt 文件服務器相似,master配置文件中的 pillar_roots 選項也是基於環境映射到目錄。Pillar數據被映射到基於top文件匹配到的Minion上,top 文件是和state top文件同樣的方式列出的。Salt pillar可使用和標準的top 文件一樣的匹配器類型。web

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

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.遇到的問題spa

每次有新的pillar數據就須要在/srv/pillar/top.sls中增長一個minion和pillar文件的映射,在高併發的狀況,容易形成寫衝突,致使數據丟失。code

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

參考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執行不一樣的命令。

相關文章
相關標籤/搜索