ansible-lintのルールに関するメモ
ansible-lintを使ってみているのだが、ルールの一部がよくわからなかったりしたので調べて簡単にまとめてみた。
- ANSIBLE0002: Trailing whitespace
- ANSIBLE0004: Git checkouts must contain explicit version
- ANSIBLE0005: Mercurial checkouts must contain explicit revision
- ANSIBLE0006: Using command rather than module
- ANSIBLE0007: Using command rather than an argument to e.g. file
- ANSIBLE0008: Deprecated sudo
- ANSIBLE0009: Octal file permissions must contain leading zero
- ANSIBLE0010: Package installs should not use latest
- ANSIBLE0011: All tasks should be named
- ANSIBLE0012: Commands should not change things if nothing needs doing
- ANSIBLE0013: Use shell only when shell functionality is required
- ANSIBLE0014: Environment variables don't work as part of command
- ANSIBLE0015: Using bare variables is deprecated
- ANSIBLE0016: Tasks that run when changed should likely be handlers
- ANSIBLE0017: become_user requires become to work as expected
- ANSIBLE0018: Deprecated always_run
ANSIBLE0002: Trailing whitespace
これはほんとそのまんま。いずれかの行の末尾に空白があれば警告が出る。
ANSIBLE0004: Git checkouts must contain explicit version
git
モジュールでversion
を指定しなかったり、HEAD
に指定したりすると警告が出る。
ANSIBLE0005: Mercurial checkouts must contain explicit revision
ANSIBLE0004のhg
版。revision
を指定しなかったり、default
に指定したりすると警告が出る。
ANSIBLE0006: Using command rather than module
git
, curl
, service
その他、Ansibleモジュールが使えるところでcommand
, shell
を直接叩いてると警告が出る。
ANSIBLE0007: Using command rather than an argument to e.g. file
chmod
, mkdir
, rm
その他、file
モジュールの引数でできることでcommand
, shell
を直接叩いていると警告が出る。
ANSIBLE0008: Deprecated sudo
become
, become_user
でなくsudo
, sudo_user
を使っていると警告が出る。
ANSIBLE0009: Octal file permissions must contain leading zero
file
モジュールなどでmode
の指定時に0666
のような表記ではなく666
のような表記をしていると警告が出る。
ANSIBLE0010: Package installs should not use latest
ANSIBLE0004のパッケージ管理システム版。state
にlatest
を指定していると警告が出る。ANSIBLE0004などでは未指定の場合も警告が出るが、yum
などのstate
はデフォルトがlatest
ではなくpresent
なので、未指定の場合は警告が出ない。
ANSIBLE0011: All tasks should be named
すべてのタスクにname
をつけろというルール。そこは問題ないのだがこのルールバグってて、yum
のように引数にname
があるものだと、偽陰性になってしまう……。
ANSIBLE0012: Commands should not change things if nothing needs doing
command
, shell
などがwhen
, creates
などで条件つき実行になっていない場合警告される。
ANSIBLE0013: Use shell only when shell functionality is required
パイプやリダイレクトなどを使うわけでもないのにshell
を使ってると警告される。
ANSIBLE0014: Environment variables don't work as part of command
command
, shell
のコマンド内でPATH+=XXX command
みたいなのはできないよ、という警告だと思うのだが自信がない……。
ANSIBLE0015: Using bare variables is deprecated
{{ var }}
形式じゃない生の変数を使った場合に警告される。この「生の変数」を俺はそもそも知らなかったんだが、以下みたいな感じらしい。
--- - tasks: - name: example for "Using bare variables is deprecated" rule yum: name: item with_items: items
ANSIBLE0016: Tasks that run when changed should likely be handlers
when: result.changed
みたいなことやるなら普通にhandlers
使えば変更あった場合のタスク実行できるからそうしよう、みたいなルール。
ANSIBLE0017: become_user requires become to work as expected
become
なしでbecome_user
してると警告される。
ANSIBLE0018: Deprecated always_run
always_run
を使っていると警告される。check_mode
が代替とのこと。