【问题标题】:How do I validate my YAML file from command line?如何从命令行验证我的 YAML 文件?
【发布时间】:2011-04-27 16:11:40
【问题描述】:

我在提取 YAML 配置文件时遇到问题:

致命错误:解析块映射时;预期 ,但找到了 block entry

虽然有很多在线 YAML 验证器,我已经尝试过并提供了帮助,但我想从命令行验证我的 YAML 文件并将其集成到我的持续集成管道中。

如何在命令行上验证 YAML 文件的语法?

【问题讨论】:

  • 试试:travis lint .travis.yml
  • python -c "from yaml import load, Loader; load(open('.travis.yml'), Loader=Loader)"
  • 这个问题不应该被关闭。也许将其重新命名为“如何从命令行验证我的 YAML 文件”。这是一个有效且有用的问题
  • Seconded @hanxue - 这是搜索主题时的第一个结果,当谷歌将我们带到这里时应该是一个有用的参考。
  • 是的,这个问题不应该被关闭。我不认为答案是固执己见或垃圾邮件。

标签: yaml


【解决方案1】:

通过基本的 Ruby 安装,这应该可以工作:

ruby -ryaml -e "p YAML.load(STDIN.read)" < data.yaml

Python 版本(感谢 @Murphy):

pip install pyyaml
python -c 'import yaml, sys; print(yaml.safe_load(sys.stdin))' < data.yaml

【讨论】:

  • 如果你从结尾删除puts y,那么你会得到一个更标准的 UNIX 行为:如果文件是有效的,那么什么都不会被打印,如果它是无效的,那么你会看到一个异常和堆栈跟踪。
  • 如果您真的只是将它用作 ci 测试管道的一部分,那么根本不需要 puts。如果有效,返回码就是0,否则非零,你会得到一个异常堆栈跟踪。即使您正在查看它,也可以减少 CLI 输出上的噪音。
  • 如果您使用以下内容:ruby -e "require 'yaml';puts YAML.load_file(ARGV[0])" 然后您可以在之后传递文件名,而无需直接编辑 sn-p。
  • python -c 'import yaml, sys; yaml.safe_load(sys.stdin)' &lt; data.yaml python 爱好者..
  • python3 -c 'import yaml, sys, pprint; pprint.pprint(yaml.safe_load(sys.stdin))' &lt; data.yaml 漂亮的版画
【解决方案2】:

您可以使用yamllint。它在 Homebrew 等中可用。它可用于语法验证以及 linting。

【讨论】:

    【解决方案3】:

    鉴于您在正在使用的服务器上安装了 perl,并且它具有一些基本的 YAML 工具,您可以使用...

    perl -MYAML -e 'use YAML;YAML::LoadFile("./file.yaml")'
    

    需要注意的是,这对文件的解释会很严格,但是很有用。

    【讨论】:

    • 找不到 YAML.pm
    • /usr/bin/perl -MCPAN -e '安装 YAML'
    • 可能是 CPAN 安装的问题,但是:Can't locate object method "install" via package "YAML" at -e line 1.
    • 如果上述方法不起作用,您可以随时尝试:perl -MCPAN -e 'shell',然后在命令行执行install YAML
    【解决方案4】:

    要更正您的 .yaml 文件,我推荐使用 yamllint 工具。它可以从本地控制台轻松启动。

    yamllint 适用于所有主要操作系统。

    它可以从系统的包源安装。 (例如sudo apt-get install yamllint)。 See documentation for quick start and installation.

    【讨论】:

    • yamllint 默认情况下会调用很多实际上完全可以接受的“错误”。例如行太长,或“错误”的缩进。我确信修复这些问题是可定制的,但对于许多常见用例来说太挑剔了。
    【解决方案5】:

    如果您的环境中没有安装解释器但仍然有 curl,那么您可以使用在线 linter 项目,例如 Lint-Trilogy:

    curl -X POST  --data "data=$(cat myfile.yml)" https://www.lint-trilogy.com/lint/yaml/json
    

    它提供验证结果,包括。错误描述(如果有)为 json 或 csv,或者在足够的情况下,作为纯文本 truefalse

    它也可以作为 docker 文件使用。因此,如果您经常需要基于 REST 的 linter,可能在 CI/CD 管道中,那么在您的站点上托管自己的实例可能会很方便。

    【讨论】:

    • 将您的 yaml 导出给第三方需要对该第三方非常信任
    • 没错,这就是为什么 linter 是开源的并且可以作为 docker 容器在您自己的笔记本上运行的原因。 Github 仓库:github.com/berndkuennen/lint_trilogy
    • 它对我有用。这是如何在 netplan 配置中处理空格和制表符的简单方法
    【解决方案6】:

    或者交替安装(免费)Eclipse IDE 和 YEdit yaml 编辑器,查看带有语法突出显示、错误标志和大纲视图的 yaml。一次性设置成本对我来说非常有效。

    【讨论】:

    • OP 专门要求提供 CLI 解决方案。
    猜你喜欢
    • 2017-05-01
    • 1970-01-01
    • 2021-01-03
    • 2012-11-05
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    • 2021-03-31
    • 2016-04-16
    相关资源
    最近更新 更多