Introduction
Ansible Lint est un outil en ligne de commande pour la lecture de playbooks. Utilisez-le pour détecter les comportements et les pratiques susceptibles d'être améliorés.
Le projet Ansible Galaxy utilise cet outil pour réduire et calculer les scores de qualité du contenu ajouté au Galaxy Hub.
Le projet a été lancé à l'origine par @willthames et a depuis été transféré à l'équipe du projet Ansible.
Installation
Cette rubrique explique comment installer Ansible Lint.
Utiliser Pip
# pip install ansible-lint
Utiliser brew (Mac OS X)
# brew install ansible-lint
Depuis les sources
# pip install git+https://github.com/ansible/ansible-lint.git
Utilisation
Cette rubrique explique comment utiliser la commande ansible-lint
Options ligne de commande
Voici le résultat de ansible-lint –help, qui donne un aperçu des options de base en ligne de commande :
# ansible-lint --help Usage: ansible-lint [options] playbook.yml [playbook2 ...] Options: --version show program's version number and exit -h, --help show this help message and exit -L list all the rules -q quieter, although not silent output -p parseable output in the format of pep8 --parseable-severity parseable output including severity of rule -r RULESDIR specify one or more rules directories using one or more -r arguments. Any -r flags override the default rules in /Library/Python/3.7/site- packages/ansiblelint/rules, unless -R is also used. -R Use default rules in /Library/Python/3.7/site- packages/ansiblelint/rules in addition to any extra rules directories specified with -r. There is no need to specify this if no -r flags are used -t TAGS only check rules whose id/tags match these values -T list all the tags -v Increase verbosity level -x SKIP_LIST only check rules whose id/tags do not match these values --nocolor disable colored output --force-color Try force colored output (relying on ansible's code) --exclude=EXCLUDE_PATHS path to directories or files to skip. This option is repeatable. -c C Specify configuration file to use. Defaults to ".ansible-lint"
Linting Playbooks and Roles
Il est important de noter que ansible-lint accepte une liste de playbooks Ansible ou une liste de rôles.
À partir d'un répertoire contenant les éléments suivants, le fichier playbook, playbook.yml, ou l'un des sous-répertoires de rôle, tels que geerlingguy.apache, peut être transmis :
playbook.yml roles/ geerlingguy.apache/ tasks/ handlers/ files/ templates/ vars/ defaults/ meta/ geerlingguy.elasticsearch/ tasks/ handlers/ files/ templates/ vars/ defaults/ meta/
Les éléments suivants indiquent le rôle geerlingguy.apache :
$ ansible-lint geerlingguy.apache [ANSIBLE0013] Use shell only when shell functionality is required /Users/chouseknecht/.ansible/roles/geerlingguy.apache/tasks/main.yml:19 Task/Handler: Get installed version of Apache. [ANSIBLE0011] All tasks should be named /Users/chouseknecht/.ansible/roles/geerlingguy.apache/tasks/main.yml:29 Task/Handler: include_vars apache-22.yml [ANSIBLE0011] All tasks should be named /Users/chouseknecht/.ansible/roles/geerlingguy.apache/tasks/main.yml:32 Task/Handler: include_vars apache-24.yml
Voici le contenu de playbook.yml, qui fait référence à plusieurs rôles:
- name: Lint multiple roles
hosts: all
tasks:
- include_role:
name: geerlingguy.apache
- include_role:
name: geerlingguy.elasticsearch
Les lints sur playbook.yml, évaluent le playbook et les rôles référencés :
$ ansible-lint playbook.yml [ANSIBLE0013] Use shell only when shell functionality is required /Users/chouseknecht/roles/geerlingguy.apache/tasks/main.yml:19 Task/Handler: Get installed version of Apache. [ANSIBLE0011] All tasks should be named /Users/chouseknecht/roles/geerlingguy.apache/tasks/main.yml:29 Task/Handler: include_vars apache-22.yml [ANSIBLE0011] All tasks should be named /Users/chouseknecht/roles/geerlingguy.apache/tasks/main.yml:32 Task/Handler: include_vars apache-24.yml [ANSIBLE0011] All tasks should be named /Users/chouseknecht/roles/geerlingguy.elasticsearch/tasks/main.yml:17 Task/Handler: service state=started name=elasticsearch enabled=yes
Ansible-lint acceptant une liste de rôles ou de playbooks, les opérations suivantes fonctionnent également et produisent le même résultat que dans l'exemple ci-dessus :
$ ansible-lint geerlingguy.apache geerlingguy.elasticsearch [ANSIBLE0013] Use shell only when shell functionality is required /Users/chouseknecht/roles/geerlingguy.apache/tasks/main.yml:19 Task/Handler: Get installed version of Apache. [ANSIBLE0011] All tasks should be named /Users/chouseknecht/roles/geerlingguy.apache/tasks/main.yml:29 Task/Handler: include_vars apache-22.yml [ANSIBLE0011] All tasks should be named /Users/chouseknecht/roles/geerlingguy.apache/tasks/main.yml:32 Task/Handler: include_vars apache-24.yml [ANSIBLE0011] All tasks should be named /Users/chouseknecht/roles/geerlingguy.elasticsearch/tasks/main.yml:17 Task/Handler: service state=started name=elasticsearch enabled=yes
Configuration
Cette rubrique explique comment configurer Ansible Lint.
Fichier de configuration
Ansible-lint prend en charge la configuration locale via un fichier de configuration .ansible-lint.
Ansible-lint vérifie la présence de ce fichier dans le répertoire de travail et applique toute configuration trouvée à cet emplacement. L'emplacement du fichier de configuration peut également être remplacé via l'indicateur CLI [ -c chemin/vers/fichier ].
Si une valeur est fournie à la fois sur la ligne de commande et via un fichier de configuration, les valeurs seront fusionnées (si une liste est telle que exclude_paths).
Les valeurs suivantes sont prises en charge et fonctionnent de manière identique à leurs équivalents CLI :
exclude_paths: - ./my/excluded/directory/ - ./my/other/excluded/directory/ - ./last/excluded/directory/ parseable: true quiet: true rulesdir: - ./rule/directory/ skip_list: - skip_this_tag - and_this_one_too - skip_this_id - '401' tags: - run_this_tag use_default_rules: true verbosity: 1
Configuration pré-validée
Pour utiliser ansible-lint avec `pre-commit`, ajoutez simplement ce qui suit au fichier .pre-commit-config.yaml de votre référentiel local.
Assurez-vous de changer sha : Celui-ci peut-être un git commit sha ou un TAG de ansible-lint contenant hooks.yaml.
- repo: https://github.com/ansible/ansible-lint.git sha: v3.3.1 hooks: - id: ansible-lint files: \.(yaml|yml)$
Annexe
| Nom | URL |
|---|---|
| Site web officiel | https://docs.ansible.com/ansible-lint/ |
| Site officiel - Code retour | https://docs.ansible.com/ansible-lint/rules/default_rules.html |