validate-modules

分析模块以查找代码和文档中的常见问题。

用法

cd /path/to/ansible/source
source hacking/env-setup
ansible-test sanity --test validate-modules

帮助

键入 ansible-test sanity --test validate-modules -h 以显示有关使用此健全性测试的帮助信息。

扩展 validate-modules

validate-modules 工具具有一个 schema.py,用于验证 YAML 块,例如 DOCUMENTATIONRETURNS

代码

错误代码

类型

级别

示例消息

ansible-deprecated-module

文档

错误

一个模块已弃用,应该在当前或更早的 Ansible 版本中删除

collection-deprecated-module

文档

错误

一个模块已弃用,应该在当前或更早的集合版本中删除

ansible-deprecated-version

文档

错误

一个功能已弃用,应该在当前或更早的 Ansible 版本中删除

ansible-module-not-initialized

语法

错误

执行模块未导致初始化 AnsibleModule

collection-deprecated-version

文档

错误

一个功能已弃用,应该在当前或更早的集合版本中删除

deprecated-date

文档

错误

今天之前的日期显示为 removed_at_date 或在 deprecated_aliases

deprecation-mismatch

文档

错误

模块被标记为已弃用或删除,至少出现在文件名、元数据或 DOCUMENTATION 中(在 DOCUMENTATION 中设置 DOCUMENTATION.deprecated 以弃用或删除所有 Documentation 以删除),但不是在所有三个地方。

doc-choices-do-not-match-spec

文档

错误

来自 argument_spec 的“choices”的值与文档不匹配

doc-choices-incompatible-type

文档

错误

来自文档的 Choices 值与 argument_spec 中定义的类型不兼容

doc-default-does-not-match-spec

文档

错误

来自 argument_spec 的“default”的值与文档不匹配

doc-default-incompatible-type

文档

错误

来自文档的默认值与 argument_spec 中定义的类型不兼容

doc-elements-invalid

文档

错误

文档为参数指定了元素,而“type”不是 list

doc-elements-mismatch

文档

错误

Argument_spec 定义的元素与文档不同

doc-missing-type

文档

错误

文档未指定类型,但 argument_spec 中的参数使用默认类型 (str)

doc-required-mismatch

文档

错误

argument_spec 中的参数是必需的,但文档说它不是,反之亦然

doc-type-does-not-match-spec

文档

错误

Argument_spec 定义的类型与文档不同

documentation-error

文档

错误

未知 DOCUMENTATION 错误

documentation-syntax-error

文档

错误

无效的 DOCUMENTATION 模式

import-before-documentation

导入

错误

导入出现在文档变量之前。所有导入必须出现在 DOCUMENTATION/EXAMPLES/RETURN 之后

import-error

文档

错误

Exception 尝试为 argument_spec 自省导入模块

attributes-check-mode

文档

错误

如果模块记录了 check_mode 属性,则其 support 值必须与 AnsibleModulesupports_check_mode 参数兼容

attributes-check-mode-details

文档

错误

如果模块以支持值 partialN/A 记录了 check_mode 属性,则它必须提供 details

import-placement

位置

警告

导入应直接位于 DOCUMENTATION/EXAMPLES/RETURN 之后

imports-improper-location

导入

错误

导入应直接位于 DOCUMENTATION/EXAMPLES/RETURN 之后

incompatible-choices

文档

错误

来自 argument_spec 的 Choices 值与 argument_spec 中定义的类型不兼容

incompatible-default-type

文档

错误

来自 argument_spec 的默认值与 argument_spec 中定义的类型不兼容

invalid-argument-name

文档

错误

argument_spec 中的参数不能是“message”、“syslog_facility”,因为它在 Ansible 核心引擎中被内部使用

invalid-argument-spec

文档

错误

argument_spec 中的参数在使用时必须是字典/哈希

invalid-argument-spec-options

文档

错误

argument_spec 中的子选项无效

invalid-documentation

文档

错误

DOCUMENTATION 不是有效的 YAML

invalid-documentation-markup

文档

错误

DOCUMENTATIONRETURN 包含无效的标记

invalid-documentation-options

文档

错误

DOCUMENTATION.options 在使用时必须是字典/哈希

invalid-examples

文档

错误

EXAMPLES 不是有效的 YAML

invalid-extension

命名

错误

官方 Ansible 模块必须具有 .py 扩展名(用于 Python 模块)或 .ps1 扩展名(用于 PowerShell 模块)

invalid-module-schema

文档

错误

AnsibleModule 模式验证错误

invalid-removal-version

文档

错误

无法解析应该删除功能的版本(对于集合,它必须是 语义版本

invalid-requires-extension

命名

错误

模块 #AnsibleRequires -CSharpUtil 不应以 .cs 结尾,模块 #Requires 不应以 .psm1 结尾

missing-doc-fragment

文档

错误

DOCUMENTATION 片段丢失

missing-existing-doc-fragment

文档

警告

预先存在的 DOCUMENTATION 片段丢失

missing-documentation

文档

错误

未提供 DOCUMENTATION

missing-examples

文档

错误

未提供 EXAMPLES

missing-gplv3-license

文档

错误

未找到 GPLv3 许可证头

missing-module-utils-basic-import

导入

警告

未找到 ansible.module_utils.basic 导入

missing-module-utils-import-csharp-requirements

导入

错误

未找到 Ansible.ModuleUtils 或 C# Ansible 实用程序要求/导入

missing-powershell-interpreter

语法

错误

解释器行不是 #!powershell

missing-python-interpreter

语法

错误

解释器行不是 #!/usr/bin/python

missing-return

文档

错误

未提供 RETURN 文档

missing-return-legacy

文档

警告

未为旧版模块提供 RETURN 文档

missing-suboption-docs

文档

错误

argument_spec 中的参数有子选项,但文档未定义子选项

module-incorrect-version-added

文档

错误

模块级 version_added 不正确

module-invalid-version-added

文档

错误

模块级 version_added 不是有效的版本号

module-utils-specific-import

导入

错误

module_utils 导入应导入特定组件,而不是 *

multiple-utils-per-requires

导入

错误

Ansible.ModuleUtils 要求不支持每个语句多个模块

multiple-csharp-utils-per-requires

导入

错误

Ansible C# util 要求不支持每个语句多个 util

no-default-for-required-parameter

文档

错误

选项标记为必需,但指定了默认值。带有默认值的参数不应标记为必需

no-log-needed

参数

错误

选项名称表明该选项包含一个秘密值,而 no_log 在参数规范中未为此选项指定。如果这是一个误报,请明确设置 no_log=False

nonexistent-parameter-documented

文档

错误

参数在 DOCUMENTATION.options 中列出,但模块不接受

option-incorrect-version-added

文档

错误

新选项的 version_added 不正确

option-invalid-version-added

文档

错误

选项的 version_added 不是有效的版本号

parameter-invalid

文档

错误

argument_spec 中的参数不是有效的 Python 标识符

parameter-invalid-elements

文档

错误

当 “type” 的值为 list 时, “elements” 的值才有效

implied-parameter-type-mismatch

文档

错误

Argument_spec 隐含 type="str" 但文档将其定义为不同的数据类型

parameter-type-not-in-doc

文档

错误

Type 值在 argument_spec 中定义,但文档未指定类型

parameter-alias-repeated

参数

错误

argument_spec 中的参数在 aliases 中至少指定了一个重复的别名

parameter-alias-self

参数

错误

argument_spec 中的参数被指定为其自身的别名

parameter-documented-multiple-times

文档

错误

argument_spec 中带有别名的参数被多次记录

parameter-list-no-elements

参数

错误

argument_spec 中的参数 “type” 被指定为 list,但没有定义 “elements”

parameter-state-invalid-choice

参数

错误

参数 state 包含 getlistinfo 作为选项。功能应该在 _info 或(如果适用进一步条件)_facts 模块中。

python-syntax-error

语法

错误

解析模块时出现 Python SyntaxError

removal-version-must-be-major

文档

错误

根据语义版本控制规范 (https://semver.org/),允许移除功能的唯一版本是主版本 (x.0.0)

return-syntax-error

文档

错误

RETURN 不是有效的 YAML,RETURN 片段丢失或无效

return-invalid-version-added

文档

错误

返回值的 version_added 不是有效的版本号

subdirectory-missing-init

命名

错误

Ansible 模块子目录必须包含 __init__.py

try-except-missing-has

导入

警告

Try/Except HAS_ 表达式丢失

undocumented-parameter

文档

错误

参数在 argument_spec 中列出,但在模块中没有记录

unidiomatic-typecheck

语法

错误

找到使用 type() 进行类型比较。请改用 isinstance()

unknown-doc-fragment

文档

警告

未知的预先存在的 DOCUMENTATION 错误

use-boto3

导入

错误

找到 boto 导入,新的模块应该使用 boto3

use-fail-json-not-sys-exit

导入

错误

找到 sys.exit() 调用。应该为 exit_json/fail_json

use-module-utils-urls

导入

错误

找到 requests 导入,应该使用 ansible.module_utils.urls 代替

use-run-command-not-os-call

导入

错误

使用 os.call 代替 module.run_command

use-run-command-not-popen

导入

错误

使用 subprocess.Popen 代替 module.run_command

use-short-gplv3-license

文档

错误

GPLv3 许可证头应该使用 简短形式 用于新模块

mutually_exclusive-type

文档

错误

mutually_exclusive 条目包含非字符串值

mutually_exclusive-collision

文档

错误

mutually_exclusive 条目包含重复的项

mutually_exclusive-unknown

文档

错误

mutually_exclusive 条目包含在 argument_spec 中未出现的选项(可能是选项的别名?)

required_one_of-type

文档

错误

required_one_of 条目包含非字符串值

required_one_of-collision

文档

错误

required_one_of 条目包含重复的项

required_one_of-unknown

文档

错误

required_one_of 条目包含在 argument_spec 中未出现的选项(可能是选项的别名?)

required_together-type

文档

错误

required_together 条目包含非字符串值

required_together-collision

文档

错误

required_together 条目包含重复的项

required_together-unknown

文档

错误

required_together 条目包含在 argument_spec 中未出现的选项(可能是选项的别名?)

required_if-is_one_of-type

文档

错误

required_if 条目包含第四个不是 bool 值的值

required_if-requirements-type

文档

错误

required_if 条目包含第三个值(要求),该值不是列表或元组

required_if-requirements-collision

文档

错误

required_if 条目在要求中包含重复的项

required_if-requirements-unknown

文档

错误

required_if 条目的要求包含在 argument_spec 中未出现的选项(可能是选项的别名?)

required_if-unknown-key

文档

错误

required_if 条目的键在 argument_spec 中未出现(可能是选项的别名?)

required_if-key-in-requirements

文档

错误

required_if 条目在其要求列表/元组中包含其键

required_if-value-type

文档

错误

required_if 条目的值为其键指定类型的类型

required_by-collision

文档

错误

required_by 条目包含重复的项

required_by-unknown

文档

错误

required_by 条目包含在 argument_spec 中未出现的选项(可能是选项的别名?)

version-added-must-be-major-or-minor

文档

错误

根据语义版本控制规范 (https://semver.org/),允许添加功能的唯一版本是主版本和次版本 (x.y.0)