【规则说明·基础】yaml

这篇文章是Ansible lint Advent Calendar 2022的第15篇。

本次我们将解释有关规则的YAML。

YAML的含义。

yaml是用于检查YAML文件语法的工具,它会执行yamllint来验证文件。

設定檔案的路徑

YAML文件用于配置Ansible lint和yamllint的配置文件。

yamllint的配置文件

    • カレントディレクトリの.yamllint、.yamllint.yaml 、.yamllint.ymlのいずれかのファイル

 

    • 環境変数YAMLLINT_CONFIG_FILEで定義されたパス

 

    ~/.config/yamllint/config

可以成为其中的任何一个选项。

应用规则的文件和应用规则的设置

如果要設置不適用於YAML的規則的文件,請在yamllint的配置文件中進行記述。例如,如果要禁用yaml[line-length],

---

yaml-files:
  - '*.yaml'
  - '*.yml'
  - '.yamllint'

rules:
  braces: enable
  brackets: enable
  colons: enable
  commas: enable
  comments:
    level: warning
  comments-indentation:
    level: warning
  document-end: disable
  document-start:
    level: warning
  empty-lines: enable
  empty-values: disable
  float-values: disable
  hyphens: enable
  indentation: enable
  key-duplicates: enable
  key-ordering: disable
  line-length:
    level: error
    ignore: |
      molecule/default/create.yml # <- ファイルのパスを指定する
  new-line-at-end-of-file: enable
  new-lines: enable
  octal-values: disable
  quoted-strings: disable
  trailing-spaces: enable
  truthy:
    level: warning

Ansible lint不能对每个规则进行验证,但可以设置不被Ansible lint验证的文件名。

如果要在YAML上启用或禁用特定规则,可以将其记录在yamllint的配置文件中。也可以将其记录在Ansible lint的配置文件中,但通过将其记录在yamllint的配置文件中,可以详细设置适用规则以及适用规则的文件。

其他

在使用CI等工具分别执行yamllint和Ansible lint时,最好将配置文件分开,以便yamllint和Ansible lint分别执行。

如果启用了yamllint的key-ordering,并将其应用于Ansible内容,则存在一种无法更改Ansible的key顺序的情况。如果更改了Ansible内容中的key顺序,则执行Ansible时可能会导致错误。因此,在应用于Ansible内容的yamllint配置文件中,需要将key-ordering禁用。

如果想在某些地方(例如.circleci/config.yml、.github/workflows/build.yml等)启用key-ordering并进行验证,可以单独准备另一个yamllint的配置文件,并在那个文件中启用key-ordering。

对于Ansible内容,采用严格的设置来运行yamllint并按照yamllint的指示修复错误,但这并不意味着该Ansible内容一定能正常工作。换句话说,对Ansible内容应用yamllint的所有规则并不明智。

用yamllint的ignore功能来控制文件?

如果想要在Ansible lint和yamllint中使用相同的配置文件,虽然不是不可能,但是写作量会增加,不太现实。

了解设置内容将变得困难。

---
yaml-files:
  - '*.yaml'
  - '*.yml'
  - '.yamllint'

rules:
  braces:
    level: error
    ignore: |
      defaults/main.yml
      meta/argument_specs.yml
      meta/main.yml
      molecule/default/molecule.yml
      tasks/main.yml
  brackets:
    level: error
  colons: enable
  commas: enable
  comments:
    level: error
  comments-indentation:
    level: error
  document-end: disable
  document-start:
    level: error
  empty-lines: enable
  empty-values: disable
  float-values: disable
  hyphens: enable
  indentation: enable
  key-duplicates:
    level: error
  key-ordering:
    level: error
    ignore: |
      defaults/main.yml
      meta/argument_specs.yml
      meta/main.yml
      molecule/default/molecule.yml
      tasks/main.yml
  line-length:
    level: error
    ignore: |
      defaults/main.yml
      meta/argument_specs.yml
      meta/main.yml
      molecule/default/molecule.yml
      tasks/main.yml
  new-line-at-end-of-file: enable
  new-lines: enable
  octal-values: disable
  quoted-strings: disable
  trailing-spaces: enable
  truthy:
    level: warning

请参考以下网站

    • yaml — Ansible Lint Documentation

 

    yamllint documentation — yamllint 1.28.0 documentation
广告
将在 10 秒后关闭
bannerAds