Ansible lint标签

这篇文章是 Ansible 严格检查规则的附属文,属于 2022 年《Ansible 之旅》第三篇。

在Ansible lint的规则中,有两种主要分类,即标签和配置文件(Profile)。本次将对标签进行解释说明。

标签列表

可以使用 ansible-lint –list-tags 命令查看标签。

    • command-shell

 

    • core

 

    • deprecations

 

    • experimental

 

    • formatting

 

    • idempotency

 

    • idiom

 

    • metadata

 

    • opt-in

 

    • risk

 

    • security

 

    • syntax

 

    • unpredictability

 

    • unskippable

 

    yaml
ansible-lint --list-tags

# List of tags and rules they cover
command-shell:  # Specific to use of command and shell modules
  - command-instead-of-module
  - command-instead-of-shell
  - deprecated-command-syntax
  - inline-env-var
  - no-changed-when
  - risky-shell-pipe
core:  # Related to internal implementation of the linter
  - internal-error
  - load-failure
  - parser-error
  - syntax-check
  - warning
  - schema
deprecations:  # Indicate use of features that are removed from Ansible
  - deprecated-bare-vars
  - deprecated-command-syntax
  - deprecated-local-action
  - deprecated-module
  - no-jinja-when
  - role-name
experimental:  # Newly introduced rules, by default triggering only warnings
  - warning
  - avoid-implicit
  - galaxy
  - ignore-errors
  - key-order
  - no-free-form
  - no-log-password
  - no-prompting
  - only-builtins
  - risky-file-permissions
  - run-once
  - schema
  - var-naming
formatting:  # Related to code-style
  - yaml
  - fqcn
  - jinja
  - key-order
  - no-tabs
  - playbook-extension
  - risky-octal
idempotency:  # Possible indication that consequent runs would produce different results
  - latest
  - no-changed-when
  - package-latest
idiom:  # Anti-pattern detected, likely to cause undesired behavior
  - command-instead-of-module
  - command-instead-of-shell
  - empty-string-compare
  - inline-env-var
  - literal-compare
  - loop-var-prefix
  - name
  - no-handler
  - no-relative-paths
  - run-once
  - var-naming
metadata:  # Invalid metadata, likely related to galaxy, collections or roles
  - galaxy
  - meta-incorrect
  - meta-no-info
  - meta-no-tags
  - meta-video-links
  - role-name
opt-in:  # Rules that are not used unless manually added to `enable_list`
  - empty-string-compare
  - galaxy
  - no-log-password
  - no-prompting
  - no-same-owner
  - only-builtins
risk:
  - no-free-form
security:  # Rules related o potentially security issues, like exposing credentials
  - no-log-password
syntax:
  - no-free-form
unpredictability:  # Warn about code that might not work in a predictable way
  - avoid-implicit
  - ignore-errors
  - partial-become
  - risky-file-permissions
unskippable:  # Indicate a fatal error that cannot be ignored or disabled
  - load-failure
yaml:  # External linter which will also produce its own rule codes
  - yaml

命令行

检查是否按照最佳实践编写了处理ansible.builtin.shell模块和ansible.builtin.command模块的代码。

    • command-instead-of-module

 

    • command-instead-of-shell

 

    • deprecated-command-syntax

 

    • inline-env-var

 

    • no-changed-when

 

    risky-shell-pipe

核心

这是用于Ansible lint的内部处理的规则。

    • internal-error

 

    • load-failure

 

    • parser-error

 

    • syntax-check

 

    • warning

 

    schema

警告

检查Playbook和Role的书写方式是否为过时的格式,以及是否使用了Ansible core或Ansible community中被弃用的模块。

    • deprecated-bare-vars

 

    • deprecated-command-syntax

 

    • deprecated-local-action

 

    • deprecated-module

 

    • no-jinja-when

 

    role-name

实验性的

这些规则是相对较新的导入规则。如果在这些规则中发现违反,初始设定下将输出警告而非错误提示。

    • warning

 

    • avoid-implicit

 

    • galaxy

 

    • ignore-errors

 

    • key-order

 

    • no-free-form

 

    • no-log-password

 

    • no-prompting

 

    • only-builtins

 

    • risky-file-permissions

 

    • run-once

 

    • schema

 

    var-naming

格式化

检查代码是否符合Ansible Lint所定义的编码规范。

    • yaml

 

    • fqcn

 

    • jinja

 

    • key-order

 

    • no-tabs

 

    • playbook-extension

 

    risky-octal

幂等性

检查是否存在在执行Playbook或Role时无法保证幂等性的描述。

    • latest

 

    • no-changed-when

 

    package-latest

改变态度说话方法、写作方式或做事的方法。

改变态度在工作、学习或生活中的用处是很大的。

积极改变态度有利于提高工作效率。

改变态度也可以帮助我们更好地与他人沟通。

在困难面前改变态度能够增强我们的应对能力。

只要我们能积极改变态度,就能够战胜困难。

我们将检查是否存在不可预料的操作或副作用的描述。

    • command-instead-of-module

 

    • command-instead-of-shell

 

    • empty-string-compare

 

    • inline-env-var

 

    • literal-compare

 

    • loop-var-prefix

 

    • name

 

    • no-handler

 

    • no-relative-paths

 

    • run-once

 

    var-naming

元数据

检查 Galaxy Collection 和角色的元数据文件的描述是否违反规定。

    • galaxy

 

    • meta-incorrect

 

    • meta-no-info

 

    • meta-no-tags

 

    • meta-video-links

 

    role-name

选择加入

在初始设定中,这是一个被禁用的规则。通过Ansible lint的配置文件中的enable_list进行设置后,它将变为有效。

    • empty-string-compare

 

    • galaxy

 

    • no-log-password

 

    • no-prompting

 

    • no-same-owner

 

    only-builtins

风险

使用ansible.builtin.command模块或ansible.builtin.raw模块时,检查是否存在可能引发副作用的描述。

    no-free-form

安全

执行Ansible时,将检查密码等秘密信息是否被输出到日志中。有关Ansible日志,请参考“Ansible 出力のロギング — Ansible Documentation”。

    no-log-password

语法

无需说明

    no-free-form

不可预测性

如果描述的操作可能无法按照意图执行,将发出警告。

    • avoid-implicit

 

    • ignore-errors

 

    • partial-become

 

    risky-file-permissions

无法跳过 这个选项 无法略过

当Ansible lint无法检查文件时,会产生该输出。无法检查的主要原因有

    • ファイルのエンコーディングエラー(Ansible lintはUTF-8のみ扱える)

 

    • Ansibleがサポートする形式のファイルではない

 

    • YAMLファイルではない

 

    ファイルにAnsible vaultで解読できない記述が含まれている

可能会考虑等等。

    load-failure

YAML

使用yamllint检查Playbook,角色等是否按照设定的格式进行了描述。

    yaml
广告
将在 10 秒后关闭
bannerAds