說明
yaml模塊類似xml的標(biāo)記語言狈涮,一般用在配置文件中,比如salt
實例
yaml文件(salt配置文件為例):
[root@salt-master ~]# cat master
file_roots:
base:
- /srv/salt/base
- /srv/salt/base1
prod:
- /srv/salt/prod
pillar_roots:
base:
- /srv/pillar/base
prod:
- /srv/pillar/prod
要在配置文件中添加主機組:
[root@salt-master ~]# cat salt-conf.py
#!/usr/bin/env python
#coding=utf8
import yaml
with open("master") as f:
salt_conf = yaml.load(f)
salt_conf["nodegroups"] = {'web-app':"L@salt-node1,salt-node2","db-mysql":"salt-node1","redis":"salt-node2"}
with open("salt.conf","w") as f:
yaml.dump(salt_conf,f,default_flow_style=False)
生成的salt.conf配置文件:
file_roots:
base:
- /srv/salt/base
- /srv/salt/base1
prod:
- /srv/salt/prod
nodegroups:
db-mysql: salt-node1
redis: salt-node2
web-app: L@salt-node1,salt-node2
pillar_roots:
base:
- /srv/pillar/base
prod:
- /srv/pillar/prod
代碼解釋
- yaml.load: 將yaml配置文件加載成一個字典對象
- salt_conf["nodegroups"] = xxxx:添加需要增加的配置項到生成的字典對象中
- yaml.dump(salt_conf,f,default_flow_style=False):將新增后的字典對象dump成配置文件
注意:yaml.dump方法中添加default_flow_style=False特姐,如果沒有該參數(shù),則dump成配置文件后黍氮,yaml文件不會解析列表唐含,如下:
file_roots:
base: [/srv/salt/base, /srv/salt/base1]
prod: [/srv/salt/prod]
pillar_roots:
base: [/srv/pillar/base]
prod: [/srv/pillar/prod]
擴展:在運維平臺中,salt rest api tgt參數(shù)只能指定一臺機器和salt主機組沫浆,不能指定具體主機列表捷枯,所以要使用salt,可以根據(jù)cmdb中的分組來獲取主機列表专执,然后渲染到salt配置文件