ansible-lint
ansible-lint documentation
- Version in MegaLinter: 6.16.2
 - Visit Official Web Site
 - See How to configure ansible-lint rules
 - See How to disable ansible-lint rules in files
 - See Index of problems detected by ansible-lint
 
Configuration in MegaLinter
- Enable ansible-lint by adding 
ANSIBLE_ANSIBLE_LINTin ENABLE_LINTERS variable - Disable ansible-lint by adding 
ANSIBLE_ANSIBLE_LINTin DISABLE_LINTERS variable 
| Variable | Description | Default value | 
|---|---|---|
| ANSIBLE_ANSIBLE_LINT_ARGUMENTS | User custom arguments to add in linter CLI call Ex: -s --foo "bar" | 
|
| ANSIBLE_ANSIBLE_LINT_FILE_EXTENSIONS | Allowed file extensions. "*" matches any extension, "" matches empty extension. Empty list excludes all filesEx: [".py", ""] | 
[".yml", ".yaml"] | 
| ANSIBLE_ANSIBLE_LINT_FILE_NAMES_REGEX | File name regex filters. Regular expression list for filtering files by their base names using regex full match. Empty list includes all files Ex: ["Dockerfile(-.+)?", "Jenkinsfile"] | 
Include every file | 
| ANSIBLE_ANSIBLE_LINT_PRE_COMMANDS | List of bash commands to run before the linter | None | 
| ANSIBLE_ANSIBLE_LINT_POST_COMMANDS | List of bash commands to run after the linter | None | 
| ANSIBLE_ANSIBLE_LINT_CONFIG_FILE | ansible-lint configuration file nameUse LINTER_DEFAULT to let the linter find it | 
.ansible-lint | 
| ANSIBLE_ANSIBLE_LINT_RULES_PATH | Path where to find linter configuration file | Workspace folder, then MegaLinter default rules | 
| ANSIBLE_ANSIBLE_LINT_DISABLE_ERRORS | Run linter but consider errors as warnings | false | 
| ANSIBLE_ANSIBLE_LINT_DISABLE_ERRORS_IF_LESS_THAN | Maximum number of errors allowed | 0 | 
| ANSIBLE_ANSIBLE_LINT_CLI_EXECUTABLE | Override CLI executable | ['ansible-lint'] | 
| ANSIBLE_DIRECTORY | Directory containing ANSIBLE files | ansible | 
MegaLinter Flavours
This linter is available in the following flavours
| Flavor | Description | Embedded linters | Info | |
|---|---|---|---|---|
![]()  | 
all | Default MegaLinter Flavor | 113 | |
| cupcake | MegaLinter for the most commonly used languages | 81 | ||
| documentation | MegaLinter for documentation projects | 47 | ||
| dotnet | Optimized for C, C++, C# or VB based projects | 59 | ||
| go | Optimized for GO based projects | 49 | ||
| java | Optimized for JAVA based projects | 51 | ||
| javascript | Optimized for JAVASCRIPT or TYPESCRIPT based projects | 56 | ||
| php | Optimized for PHP based projects | 50 | ||
| python | Optimized for PYTHON based projects | 58 | ||
| ruby | Optimized for RUBY based projects | 47 | ||
| rust | Optimized for RUST based projects | 47 | ||
| salesforce | Optimized for Salesforce based projects | 50 | ||
| security | Optimized for security | 21 | ||
| swift | Optimized for SWIFT based projects | 47 | ||
| terraform | Optimized for TERRAFORM based projects | 51 | 
Behind the scenes
How are identified applicable files
- Activated only if sub-directory 
ansibleis found. (directory name can be overridden withANSIBLE_DIRECTORY) - File extensions: 
.yml,.yaml - File name don't ends with: 
vault.yml,vault.yaml,galaxy.yml,galaxy.yaml 
How the linting is performed
ansible-lint is called once on the whole project directory (project CLI lint mode)
- filtering can not be done using MegaLinter configuration variables,it must be done using ansible-lint configuration or ignore file (if existing)
 VALIDATE_ALL_CODEBASE: falsedoesn't make ansible-lint analyze only updated files
Example calls
ansible-lint -v
ansible-lint -v -c .ansible-lint
Help content
WARNING: PATH altered to expand ~ in it. Read https://stackoverflow.com/a/44704799/99834 and correct your system configuration.
usage: ansible-lint [-h] [-P | -L | -T]
                    [-f {brief,full,md,json,codeclimate,quiet,pep8,sarif}]
                    [--sarif-file SARIF_FILE] [-q]
                    [--profile {min,basic,moderate,safety,shared,production}]
                    [-p] [--project-dir PROJECT_DIR] [-r RULESDIR] [-R] [-s]
                    [--write [WRITE_LIST]] [--show-relpath] [-t TAGS] [-v]
                    [-x SKIP_LIST] [--generate-ignore] [-w WARN_LIST]
                    [--enable-list ENABLE_LIST] [--nocolor] [--force-color]
                    [--exclude EXCLUDE_PATHS [EXCLUDE_PATHS ...]]
                    [-c CONFIG_FILE] [-i IGNORE_FILE] [--offline] [--version]
                    [lintables ...]
positional arguments:
  lintables             One or more files or paths. When missing it will
                        enable auto-detection mode.
options:
  -h, --help            show this help message and exit
  -P, --list-profiles   List all profiles, no formatting options available.
  -L, --list-rules      List all the rules. For listing rules only the
                        following formats for argument -f are supported:
                        {brief, full, md} with 'brief' as default.
  -T, --list-tags       List all the tags and the rules they cover. Increase
                        the verbosity level with `-v` to include 'opt-in' tag
                        and its rules.
  -f {brief,full,md,json,codeclimate,quiet,pep8,sarif}, --format {brief,full,md,json,codeclimate,quiet,pep8,sarif}
                        stdout formatting, json being an alias for
                        codeclimate. (default: None)
  --sarif-file SARIF_FILE
                        SARIF output file
  -q                    quieter, reduce verbosity, can be specified twice.
  --profile {min,basic,moderate,safety,shared,production}
                        Specify which rules profile to be used.
  -p, --parseable       parseable output, same as '-f pep8'
  --project-dir PROJECT_DIR
                        Location of project/repository, autodetected based on
                        location of configuration file.
  -r RULESDIR, --rules-dir RULESDIR
                        Specify custom rule directories. Add -R to keep using
                        embedded rules from /venvs/ansible-
                        lint/lib/python3.11/site-packages/ansiblelint/rules
  -R                    Keep default rules when using -r
  -s, --strict          Return non-zero exit code on warnings as well as
                        errors
  --write [WRITE_LIST]  Allow ansible-lint to reformat YAML files and run rule
                        transforms (Reformatting YAML files standardizes
                        spacing, quotes, etc. A rule transform can fix or
                        simplify fixing issues identified by that rule). You
                        can limit the effective rule transforms (the
                        'write_list') by passing a keywords 'all' or 'none' or
                        a comma separated list of rule ids or rule tags. YAML
                        reformatting happens whenever '--write' or '--write='
                        is used. '--write' and '--write=all' are equivalent:
                        they allow all transforms to run. The effective list
                        of transforms comes from 'write_list' in the config
                        file, followed whatever '--write' args are provided on
                        the commandline. '--write=none' resets the list of
                        transforms to allow reformatting YAML without running
                        any of the transforms (ie '--write=none,rule-id' will
                        ignore write_list in the config file and only run the
                        rule-id transform).
  --show-relpath        Display path relative to CWD
  -t TAGS, --tags TAGS  only check rules whose id/tags match these values
  -v                    Increase verbosity level (-vv for more)
  -x SKIP_LIST, --skip-list SKIP_LIST
                        only check rules whose id/tags do not match these
                        values. e.g: --skip-list=name,run-once
  --generate-ignore     Generate a text file '.ansible-lint-ignore' that
                        ignores all found violations. Each line contains
                        filename and rule id separated by a space.
  -w WARN_LIST, --warn-list WARN_LIST
                        only warn about these rules, unless overridden in
                        config file. Current version default value is:
                        experimental, jinja[spacing]
  --enable-list ENABLE_LIST
                        activate optional rules by their tag name
  --nocolor             disable colored output, same as NO_COLOR=1
  --force-color         Force colored output, same as FORCE_COLOR=1
  --exclude EXCLUDE_PATHS [EXCLUDE_PATHS ...]
                        path to directories or files to skip. This option is
                        repeatable.
  -c CONFIG_FILE, --config-file CONFIG_FILE
                        Specify configuration file to use. By default it will
                        look for '.ansible-lint' or '.config/ansible-lint.yml'
  -i IGNORE_FILE, --ignore-file IGNORE_FILE
                        Specify ignore file to use. By default it will look
                        for '.ansible-lint-ignore' or '.config/ansible-lint-
                        ignore.txt'
  --offline             Disable installation of requirements.yml and schema
                        refreshing
  --version
Installation on mega-linter Docker image
- PIP packages (Python):
 
