前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >YAML格式校验的几种工具

YAML格式校验的几种工具

原创
作者头像
保持热爱奔赴山海
发布2024-01-13 15:02:53
2.5K0
发布2024-01-13 15:02:53

日常运维中,有遇到需要校验YAML是否有问题的场景(例如从数据库的内容渲染出来的yaml配置文件)

方法1、使用python的pyyaml模块

代码语言:python
复制
import yaml

def main():
    try:
        with open("demo1.yaml", "r") as f:
            config = yaml.load(f, Loader=yaml.SafeLoader)
        print("YAML格式正确")
    except Exception as e:
        print(str(e))
        print("YAML格式错误")

if __name__ == '__main__':
    main()

但是这种有局限性,只能检测格式是否存在问题(对齐问题,是否多了空格之类的),不能对里面的内容进行检测(例如重复项)

例如下面这种demo.yaml

代码语言:yaml
复制
rule1:
  - name: node
  - instance: 192.168.31.181:9100
rule2:
  name: mysql
  instance: 192.168.31.181:9104
  instance: 192.168.31.181:9104

可以看到 instance: 192.168.31.181:9104 重复出现,但是使用pyyaml这个模块无法检测出来。

方法2、使用yamllint工具

官方文档 https://yamllint.readthedocs.io/en/stable/quickstart.html

1 安装

代码语言:shell
复制
pip3 install yamllint

2 自定义配置文件 yamllint.config 内容如下

代码语言:shell
复制
yaml-files:
  - '*.yaml'
  - '*.yml'

extends: relaxed

rules:
  anchors: enable
  braces: enable
  brackets: enable
  colons: false
  commas: false
  comments: false
  comments-indentation: false
  document-end: disable
  document-start: false
  empty-lines: false
  empty-values: disable
  float-values: disable
  hyphens: enable
  indentation: enable
  key-duplicates: enable
  key-ordering: disable
  new-line-at-end-of-file: enable
  new-lines: enable
  octal-values: disable
  quoted-strings: disable
  truthy:
    level: warning
  trailing-spaces: false
  line-length:
    max: 2048

3 执行检测

代码语言:shell
复制
yamllint -c yamllint.config demo.yaml
error示例
error示例

例如下面是检测alertmanager.yml的结果

warn示例
warn示例

4、其它

1) yamllint.config 的内容,可以根据自己情况去修改(我这里disable掉了很多非要紧的检测,如果要求要可以设置为enable)

2) 一般关注error即可,warning的不影响使用,改不改自己决定

3) 规则文件 https://yamllint.readthedocs.io/en/stable/rules.html

方法3、使用python的ruamel.yaml模块

代码语言:shell
复制
具体见官方文档 https://yaml.readthedocs.io/en/latest/

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 方法1、使用python的pyyaml模块
  • 方法2、使用yamllint工具
  • 方法3、使用python的ruamel.yaml模块
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com