こちらの記事は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_var
がhoge_
から始まらないとエラーになります。
Ansibleのベストプラクティスとしては loopで変数を扱う場合はloop_var
へprefix
を付与すべし なのだと思われます。
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