■ はじめに
Ansible Playbook の 書式をチェックする lint ツール ansilbe-lint のバージョン 4.0.0 が 2018/12/18 にリリースされました。
- 以下 changelog から引用
- New documentation site docs.ansible.com/ansible-lint
- Additional default rules for ansible-lint, listed in docsite default rules
- Fixed running with role path containing single or multiple dirs #390
- Fixed double sudo rule output #393
- Severity property added to rules to be used by Galaxy #379
- Packaging: consistency and automation #389
- Updated rule TrailingWhitespaceRule.py to remove carriage return char #323
- Allow snake_case module names for rules #82
- Suggest tempfile module instead of mktemp command #422
- Update tox to run with only supported ansible versions #406
- GitHub repository edits: move to ansible org, add CODE_OF_CONDUCT, add ROADMAP, label edits
インストールやアップグレードは、今までと同じく「pip install ansible-lint
」、「pip install --upgrade ansible-lint
」でできます。
この記事では、個人的にきになった、新しいドキュメントサイトと、追加されたデフォルトルールについてまとめます。
■ 新しいドキュメントは doc.ansible.com 配下に
https://docs.ansible.com/ansible-lint/ が新しいドキュメントのサイトです。
ansible-lint はいままで、willthames/ansible-lint
というリポジトリで開発されていましたが、2018年10月に ansilbe 配下の ansilbe/ansible-lint
に移動しました。これでドキュメントもコードも ansible 配下ということになりました。
なお、現在では ansible 本体のドキュメント上では、anislbe-lint は
the official, highly configurable best-practices linter for Ansible playbooks, by Ansible.
と記載されています。
■ デフォルトルールの追加
ansible-lint 4.0.0 で 14 個のデフォフォルトルールが追加されました
ここでは、今回追加されたデフォルトルールの中で、気になったルールをいくつか確認してみます。
Deprecated module は使わないこと
- [E105] Deprecated module
Ansible では、将来利用不可になるなどの利用で、利用が推奨されていないモジュールがあります。ドキュメント上では、Deprecated module
と表現されます。このルールでは、Deprecated module を使用を禁止します。
{{ var_name }} の変数名の前後にはスペースを入れること
- [E206] Variables should have spaces before and after: {{ var_name }}
Plaubok 内では、変数名を {{ }}
で囲いますが、その際、変数名の前にスペースを入れる、というルールです。たまに、スペースがない記載を見かけます。
ロール内の copy や template の src には ../templates
を指定しないこと
- [E404] Doesn’t need a relative path in role
(Playbookではなく)ロール内で使用する、copy や template モジュールの src
オプションで、../templates
を含む相対パスを使用しない、というルールです。
もともとロールの仕組みとして、明示的な指定をしなくてもロールから見て ../templates/
配下のファイルを参照する仕様なので、書き方を統一させるいみでのルール追加なのだと思います。
なお、コードを見る限り、copy
や templates
モジュールの他に、win_copy
や win_templates
モジュールも、このルールの対象のようです。
リテラルと True/False を比較しないこと
- [E601] Don’t compare to literal True/False
when: var == True
ではなく、when: var
で、
when: var == Flase
ではなく、when: not var
で、
というルールです。
空文字を比較しないこと
- [E602] Don’t compare to empty string
when: var != ""
ではなく、when: var
で、
when: var == ""
でなく、when: not var
で、
というルールです。
補足
もちろん、今まで通りデフォルトルールを除外したり(コンフィグファイル内の skip_list
)、逆に新しいルールを追加することもできます。
まとめ
これまで、複数の書き方が許容されていたものなどに対して、新たなルールが設けられました。 公式の linter である ansible-lint のデフォルトルールが追加されていくことで、一つの書き方に緩やかに収束していくのだと思います。