Chapter 05

設定ファイルについて

mamono210
mamono210
2022.12.23に更新

Ansible lint は設定ファイルにより挙動を変更できます。例えば適用するルールを skip したり検査をしないファイルを設定したり独自のルールを導入したり等のことができます。

設定ファイルはプロジェクトディレクトリの.ansible-lint.config/ansible-lint.ymlに配置します。

このチャプターでは以下のようなディレクトリ構成を持つ Role を前提に話を進めていきます。

.
├── .ansible-lint
├── .cache/
├── .github/
├── .yamllint
├── README.md
├── defaults
│   └── main.yml
├── meta
│   └── main.yml
└── tasks
    └── main.yml

以下は設定できる項目です。

enable_list

Ansible lint ではopt-inタグに分類されているルールは初期設定では実行されません。enable_listへ加えることで実行されるようになります。

enable_list:
  - empty-string-compare # opt-in
  - no-log-password # opt-in
  - no-same-owner # opt-in
  - name[prefix] # opt-in

exclude_paths

Ansible lint適用しないファイルを設定します。ファイルは.ansible-lintからの相対パスで記述します。

exclude_paths:
  - .cache/
  - .github/
  - test/fixtures/formatting-before/
  - test/fixtures/formatting-prettier/

extra_vars

シンタックスチェック時に変数の設定が必要な場合 Ansible lint の設定ファイルで変数の設定ができます。

extra_vars:
  foo: bar
  multiline_string_variable: |
    line1
    line2
  complex_variable: ":{;\t$()"

kinds

検査対象のファイルを追記します。Ansible lint は自動でコンテンツファイルを探しますが全てのコンテンツを見つけられるわけではありません。コンテンツとして扱いたいファイルのパスをkindsへ記述する事で Ansible lint がコンテンツを確実に見つけます。

  - playbook: "**/examples/*.{yml,yaml}"
  - galaxy: "**/folder/galaxy.yml"
  - tasks: "**/tasks/*.yml"
  - vars: "**/vars/*.yml"
  - meta: "**/meta/main.yml"
  - yaml: "**/*.yaml-too"

loop_var_prefix

変数を loop して利用する際に prefix を付与するように強制します。例えばloop_var_prefixhoge_を設定した場合、loop_varhoge_から始まらないとエラーになります。

Ansible のベストプラクティスとしては loopで変数を扱う場合はloop_varprefixを付与すべし なのだと思われます。

command: echo {{ zj_number }}
loop:
  - one
  - two
  - three
loop_control:
  loop_var: hoge_number

mock_modules・mock_roles

モックを明示的に記述します。モックに指定された Role や Module にも Ansible lint は適用されます。

mock_modules:
  - zuul_return
  # note the foo.bar is invalid as being neither a module or a collection
  - fake_namespace.fake_collection.fake_module
  - fake_namespace.fake_collection.fake_module.fake_submodule
mock_roles:
  - mocked_role
  - author.role_name # old standalone galaxy role
  - fake_namespace.fake_collection.fake_role

offline

インターネット接続がない環境下でrequirements.ymlの role をインストールする挙動を制御します。初期値はfalseでオンラインモードなので Ansible lint 実行時にrequirements.ymlの Role を自動でインストールします。

offline: false

profile

Ansible lint のプロファルを設定します。初期値は null ですが実際はproductionが設定されています。

profile: null # min, basic, moderate,safety, shared, production

progressive

Git での開発が前提です。前回の commit 時と内容を比べ1つでもルール違反が少なくなっていれば success を返します。初期値はこの機能は無効になっています。

progressive: false

skip_list

適用しないルールもしくはタグを設定します。ここに指定されたルールもしくはタグは実行されません。

skip_list:
  - var-naming

use_default_rules および rulesdir

初期設定では Ansible lint が提供するルールのみ利用する設定になっています。

use_default_rules: true

独自ルールを利用する場合はrulesdirでルールのファイルが置いてあるディレクトリを指定します。

rulesdir:
  - ./rule/directory/

var_naming_pattern

変数名のパターンを指定します。パターンには正規表現が利用できます。

Ansible lint の変数名は数字アルファベットの小文字アンダーバーが利用でき、最初の文字はアルファベットの小文字およびアンダーバーとなっています。これはvar_naming_patternの定義によるものです。

この設定を無効化するには設定ファイルのskip_listの項目にvar-namingを加えます。

var_naming_pattern: "^[a-z_][a-z0-9_]*$"

warn_list

warn_listに設定されたルールおよびタグは検査は実行されますが結果がエラーでも警告になります。

warn_list:
  - skip_this_tag
  - yaml[document-start]  # you can also use sub-rule matches

write_list

ansible-lint --writeコマンドの挙動を制御します。初期設定ではallです。write_list: ["none"]に設定するとansible-lint --writeコマンドが無効化されます。

write_list:
  - all

参考サイト