ansible-lintのルールに関するメモ

ansible-lintを使ってみているのだが、ルールの一部がよくわからなかったりしたので調べて簡単にまとめてみた。

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のパッケージ管理システム版。statelatestを指定していると警告が出る。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が代替とのこと。