通过yaml渲染salt配置

说明

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配置文件

你可能感兴趣的:(通过yaml渲染salt配置)