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.

Cette rubrique explique comment installer Ansible Lint.

# pip install ansible-lint
# brew install ansible-lint
# pip install git+https://github.com/ansible/ansible-lint.git

Cette rubrique explique comment utiliser la commande ansible-lint

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"

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

Cette rubrique explique comment configurer Ansible Lint.

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

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)$
Ce site web utilise des cookies. En utilisant le site Web, vous acceptez le stockage de cookies sur votre ordinateur. Vous reconnaissez également que vous avez lu et compris notre politique de confidentialité. Si vous n'êtes pas d'accord, quittez le site.En savoir plus