入れる機会があったのでメモしておく
dotfilesで使っているAnsibleに入れた
ansible/ansible-lint: Best practices checker for Ansible
インストール
pip install ansible-lint
設定
- .ansible-lint
parseable: true quiet: true use_default_rules: true verbosity: 1 skip_list: - '401'
他にも指定できるみたいだがいったんはデフォルトに近い形で設定する
parseable, quietは出力フォーマットに影響があるので好みの設定で使えば良さそう
各種設定はREADME読むのが良さそう
実行
実行してみる
playbook1つ指定するとそこで読み込んでいるroleなどもlintの対象にしてくれる
$ ansible-lint ubuntu.yml mac.yml development.yml Examining development.yml of type playbook Examining roles/common/tasks/debian.yml of type tasks Examining roles/common/tasks/main.yml of type tasks Examining roles/common/tasks/redhat.yml of type tasks Examining roles/git/tasks/main.yml of type tasks Examining roles/zsh/tasks/main.yml of type tasks Examining roles/zsh/tasks/source.yml of type tasks Examining roles/jo/tasks/main.yml of type tasks Examining roles/peco/tasks/main.yml of type tasks Examining roles/jq/tasks/main.yml of type tasks Examining roles/docker-compose/tasks/main.yml of type tasks Examining roles/terraform/tasks/main.yml of type tasks Examining roles/embulk/tasks/main.yml of type tasks Examining roles/sshrc/tasks/main.yml of type tasks Examining roles/vim8/tasks/main.yml of type tasks Examining roles/tmux/tasks/main.yml of type tasks Examining roles/docker/tasks/main.yml of type tasks Examining roles/samba/tasks/main.yml of type tasks Examining roles/q/tasks/main.yml of type tasks Examining roles/nginx/tasks/main.yml of type tasks Examining roles/notofont/tasks/main.yml of type tasks Examining roles/by_pip/tasks/main.yml of type tasks Examining roles/preconfig/tasks/main.yml of type tasks Examining roles/anyenv/tasks/main.yml of type tasks Examining roles/direnv/tasks/main.yml of type tasks Examining roles/powerline/tasks/main.yml of type tasks Examining roles/zsh_syntax_highlighting/tasks/main.yml of type tasks Examining roles/postconfig/tasks/main.yml of type tasks Examining mac.yml of type playbook Examining roles/brew/tasks/main.yml of type tasks Examining ubuntu.yml of type playbook roles/anyenv/tasks/main.yml:1: [E401] Git checkouts must contain explicit version roles/anyenv/tasks/main.yml:26: [E305] Use shell only when shell functionality is required roles/anyenv/tasks/main.yml:33: [E305] Use shell only when shell functionality is required roles/anyenv/tasks/main.yml:48: [E404] Doesn't need a relative path in role roles/anyenv/tasks/main.yml:60: [E305] Use shell only when shell functionality is required roles/anyenv/tasks/main.yml:67: [E305] Use shell only when shell functionality is required roles/anyenv/tasks/main.yml:75: [E305] Use shell only when shell functionality is required roles/direnv/tasks/main.yml:4: [E206] Variables should have spaces before and after: {{ var_name }} roles/direnv/tasks/main.yml:9: [E305] Use shell only when shell functionality is required roles/direnv/tasks/main.yml:12: [E206] Variables should have spaces before and after: {{ var_name }} roles/docker-compose/tasks/main.yml:4: [E206] Variables should have spaces before and after: {{ var_name }} roles/docker-compose/tasks/main.yml:9: [E305] Use shell only when shell functionality is required roles/docker-compose/tasks/main.yml:12: [E206] Variables should have spaces before and after: {{ var_name }} roles/docker/tasks/main.yml:4: [E206] Variables should have spaces before and after: {{ var_name }} roles/docker/tasks/main.yml:9: [E305] Use shell only when shell functionality is required roles/docker/tasks/main.yml:12: [E206] Variables should have spaces before and after: {{ var_name }} roles/docker/tasks/main.yml:20: [E305] Use shell only when shell functionality is required roles/embulk/tasks/main.yml:7: [E206] Variables should have spaces before and after: {{ var_name }} roles/embulk/tasks/main.yml:12: [E305] Use shell only when shell functionality is required roles/embulk/tasks/main.yml:15: [E206] Variables should have spaces before and after: {{ var_name }} roles/git/tasks/main.yml:12: [E206] Variables should have spaces before and after: {{ var_name }} roles/git/tasks/main.yml:17: [E303] git used in place of git module roles/git/tasks/main.yml:17: [E305] Use shell only when shell functionality is required roles/git/tasks/main.yml:20: [E206] Variables should have spaces before and after: {{ var_name }} roles/jo/tasks/main.yml:4: [E206] Variables should have spaces before and after: {{ var_name }} roles/jo/tasks/main.yml:9: [E305] Use shell only when shell functionality is required roles/jo/tasks/main.yml:12: [E206] Variables should have spaces before and after: {{ var_name }} roles/notofont/tasks/main.yml:2: [E206] Variables should have spaces before and after: {{ var_name }} roles/notofont/tasks/main.yml:38: [E301] Commands should not change things if nothing needs doing roles/postconfig/tasks/main.yml:70: [E401] Git checkouts must contain explicit version roles/postconfig/tasks/main.yml:78: [E301] Commands should not change things if nothing needs doing roles/powerline/tasks/main.yml:1: [E403] Package installs should not use latest roles/powerline/tasks/main.yml:4: [E301] Commands should not change things if nothing needs doing roles/powerline/tasks/main.yml:4: [E305] Use shell only when shell functionality is required roles/preconfig/tasks/main.yml:13: [E401] Git checkouts must contain explicit version roles/samba/tasks/main.yml:12: [E503] Tasks that run when changed should likely be handlers roles/terraform/tasks/main.yml:4: [E206] Variables should have spaces before and after: {{ var_name }} roles/terraform/tasks/main.yml:12: [E206] Variables should have spaces before and after: {{ var_name }} roles/tmux/tasks/main.yml:4: [E206] Variables should have spaces before and after: {{ var_name }} roles/tmux/tasks/main.yml:9: [E305] Use shell only when shell functionality is required roles/tmux/tasks/main.yml:12: [E206] Variables should have spaces before and after: {{ var_name }} roles/zsh/tasks/main.yml:27: [E401] Git checkouts must contain explicit version roles/zsh_syntax_highlighting/tasks/main.yml:1: [E401] Git checkouts must contain explicit version
めちゃくちゃ出てきた…
特定ルールの除外
- skip_list
Exxxの部分のコードを指定すると指摘をスキップできる
Gitのcheckoutバージョンの指定はまぁいいかなということで今回除外した
[E401] Git checkouts must contain explicit version
- .ansible-lint
skip_list: - '401'
特定行のlint除外
ansible/ansible-lint: Best practices checker for Ansible
対象行の末尾に # noqa 401
というようにコードを指定すると除外できる
「全体としては適用したいがこの場合はやむなし」のような事情がある場合などに使う
- 例
- name: get git version # noqa 303
- noqa
いきなり「noqa
を書くことで除外できます」といわれて「何の略なんだ?」が気になったので調べた
noqa
の元はno quality assurance
らしい
flake8,pep8などのツールもnoqa
+ コードで指定した気がするのでPython製のツールはこういう感じでやりますよっていう感じなのかな
What does '# noqa' mean in Python comments? - Stack Overflow
とりあえずコードで除外指定できるのはコメントがスッキリして個人的には好きです
※2022-02-28現在、ルール指定の方法にIDを使うのは非推奨になっていく模様(ansible-lintの特定ルール除外方法 | >> swfz[:memo])