说明
yaml模块类似xml的标记语言,一般用在配置文件中,比如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,如果没有该参数,则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参数只能指定一台机器和salt主机组,不能指定具体主机列表,所以要使用salt,可以根据cmdb中的分组来获取主机列表,然后渲染到salt配置文件