LoginSignup
0
0

More than 1 year has passed since last update.

【ルール説明・basic】yaml

Last updated at Posted at 2022-12-15

こちらの記事は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]を無効にしたい場合は

.yamllint
---

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で設定ファイルを分けた方が良い場合があります。

例えばyamllintkey-orderingが有効になっていてこれがAnsibleコンテンツへ適用された場合、Ansibleではkeyの順番は変更できないパターンがありAnsibleコンテンツのkeyの順番を変更してしまうとAnsibleを実行した時にエラーになる可能性があります。そのためAnsibleコンテンツへ実行するyamllintの設定ファイルではkey-orderingを無効にする必要があります。

一方、例えばCIツールの設定ファイル等で(.circleci/config.yml.github/workflows/build.yml、etc)でkey-orderingを有効にして検証したい場合は別のyamllintの設定ファイルを別に用意しそちらではkey-orderingを有効にします。

Ansibleコンテンツに対して厳しめの設定でyamllintを実行しyamllintの指示通りにエラーを修正してもそのAnsibleコンテンツは動作しない可能性があると言う事です。言い換えればAnsibleコンテンツに対してyamllintのすべてのルールを適用するのは悪手になります。

.yamllintのignoreでファイルを制御する?

Ansible lintとyamllintで同じ設定ファイルを利用しようと思えばできない事はないですが記述量が増えて現実的ではありません。

何が設定されているのか把握するのが困難になります。

.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

参考サイト

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0