Lint (englisch für „Fussel“) ist eine Software zur statischen Code-Analyse. Davon abgeleitet hat sich das Verb linten (englisch to lint) für das Durchführen der statischen Code-Analyse etabliert.
Quelle: de.wikipedia.org
Grundlagen
Das Tool ansible-lint prüft ein (oder mehrere) Ansible Playbooks auf die Einhaltung bestimmter Regeln.
Die entsprechenden Regeln findet man hier: Default Rules
Beispielsweise wird geprüft ob die richtige Dateiendung verwendet wird, unnötige Leerzeichen vorhanden sind oder auch ob jeder Task einen entsprechenden Namen hat.
Somit kann ein einheitlicher Stand bei den Playbooks erreicht werden.
Installation
Github: ansible-lint
pypi.org Projektseite: pypi.org
ansible-lint lässt sich per pip
-Paket installieren:
pip install ansible-lint
oder auch direkt vom Quellcode:
$ pip install git+https://github.com/ansible/ansible-lint.git
Collecting git+https://github.com/ansible/ansible-lint.git
Cloning https://github.com/ansible/ansible-lint.git to /tmp/pip-dw6cAL-build
Requirement already satisfied: ansible in /usr/local/lib/python2.7/dist-packages (from ansible-lint==4.1.0a1.dev9+ge44d2aa)
Requirement already satisfied: pyyaml in /usr/local/lib/python2.7/dist-packages (from ansible-lint==4.1.0a1.dev9+ge44d2aa)
...
Requirement already satisfied: cffi>=1.4.1 in /usr/local/lib/python2.7/dist-packages (from pynacl>=1.0.1->paramiko->ansible->ansible-lint==4.1.0a1.dev9+ge44d2aa)
Requirement already satisfied: pycparser in /usr/local/lib/python2.7/dist-packages (from cffi>=1.4.1->pynacl>=1.0.1->paramiko->ansible->ansible-lint==4.1.0a1.dev9+ge44d2aa)
Installing collected packages: ansible-lint
Found existing installation: ansible-lint 4.1.0
Uninstalling ansible-lint-4.1.0:
Successfully uninstalled ansible-lint-4.1.0
Running setup.py install for ansible-lint ... done
Successfully installed ansible-lint-4.1.0a1.dev9+ge44d2aa
Anschließend sollte ansible-lint aufzurufen sein:
$ ansible-lint --version
ansible-lint 4.1.0a1.dev9+ge44d2aa
Verwenden von ansible-lint
ansible-lint wird mit dem zu prüfenden Playbook(s) aufgerufen:
ansible-lint test.yml
Es können auch mehrere Playbooks angegeben werden.
Nun prüft ansible-lint das Playbook auf die Einhaltung der oben erwähnten Regeln und zeigt entsprechende Probleme anschließend an:
$ ansible-lint test.yml
...
ANSIBLE0010 Package installs should not use latest
test.yml:22
Task/Handler: mysql : install dependencies
ANSIBLE0016 Tasks that run when changed should likely be handlers
test.yml:59
Task/Handler: DB-Dump erzeugt
ANSIBLE0002 Trailing whitespace
test.yml:84
find:
Die angezeigten Unstimmigkeiten können anschließend korrigiert werden.
Regeln ausschließen
Möchte man, dass bestimmte Regeln bei der Prüfung mit ansible-lint ausgeschloßen sind, so kann man diese per -x <REGEL>
angeben.
Bsp.: ansible-lint -x ANSIBLE0011 playbook.yml
Man kann auch direkt im Playbook bestimmte Abschnitte entsprechend markieren, damit diese nicht von ansible-lint geprüft werden.
Dies ist z.B. sinnvoll wenn es sich um False Positives handelt.
Die entsprechende Markierung ist hierbei: # noqa <Regel>
Bsp.: # noqa 501 201
Dies sieht dann im Playbook beispielsweise so aus:
- name: this would typically fire GitHasVersionRule 401 and BecomeUserWithoutBecomeRule 501
become_user: alice # noqa 401 501
git: src=/path/to/git/repo dest=checkout
Man kann auch eigene Regel definieren, entsprechende Infos dazu findet man in der Dokumentation
weitere Infos
weiterführende Informationen findet man in der Ansible Lint Documentation