0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Ansible lintAdvent Calendar 2022

Day 5

Ansible lintの設定ファイルについて

Last updated at Posted at 2022-12-04

こちらの記事はAnsible lint Advent Calendar 2022 5日目の記事になります。

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

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

Galaxy 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_prefixにhoge_を設定した場合、loop_varhoge_から始まらないとエラーになります。

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

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

mock_modules・mock_roles

モックを明示的に記述します。Mockに指定された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

参考サイト

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?