Ansible 参考:模块实用程序
此页面记录了在 Python 中编写 Ansible 模块时旨在提供帮助的实用程序。
AnsibleModule
要使用此功能,请在您的模块中包含 from ansible.module_utils.basic import AnsibleModule
。
- class ansible.module_utils.basic.AnsibleModule(argument_spec, bypass_checks=False, no_log=False, mutually_exclusive=None, required_together=None, required_one_of=None, add_file_common_args=False, supports_check_mode=False, required_if=None, required_by=None)
用于在 Python 中快速构建 Ansible 模块的通用代码(尽管您可以使用任何可以返回 JSON 的内容编写模块)。
有关一般介绍,请参阅 开发模块,有关更详细的说明,请参阅 Ansible 模块架构。
- add_path_info(kwargs)
对于作为文件的结果,请在返回路径中补充有关文件的信息,其中包含有关文件路径的统计信息。
- atomic_move(src, dest, unsafe_writes=False, keep_dest_attrs=True)
将 src 原子地移动到 dest,从 dest 复制属性,成功时返回 true,它使用 os.rename 以确保这是原子操作,该函数的其余部分是为了解决限制、极端情况并确保尽可能保存 selinux 上下文
- backup_local(fn)
创建指定文件的带有日期标记的备份,成功或失败时返回 True 或 False
- boolean(arg)
将参数转换为布尔值
- digest_from_file(filename, algorithm)
返回本地文件的十六进制摘要,该摘要由名称指定的 digest_method 指定,如果文件不存在,则返回 None。
- exit_json(**kwargs) NoReturn
从模块返回,没有错误
- fail_json(msg, **kwargs) NoReturn
从模块返回,并带有错误消息
- find_mount_point(path)
获取路径并返回其挂载点
- 参数:
path – 具有文件系统路径的字符串类型
- 返回值:
挂载点的路径(文本类型)
- get_bin_path(arg, required=False, opt_dirs=None)
在 PATH 中查找系统可执行文件。
- 参数:
arg – 要查找的可执行文件。
required – 如果未找到可执行文件并且 required 为
True
,则 fail_jsonopt_dirs – 除了
PATH
之外,还可以搜索的可选目录列表
- 返回值:
如果找到,则返回完整路径;否则返回原始参数,除非是“警告”,否则返回 None
- 引发:
Sysexit:如果未找到参数且 required=True(通过 fail_json)
- is_executable(path)
给定的路径是否可执行?
- 参数:
path – 要检查的文件的路径。
局限性
不考虑 FSACL。
大多数时候,我们真正想知道的是“当前用户是否可以执行此文件”。此函数不会告诉我们这一点,只告诉我们是否设置了任何执行位。
- is_special_selinux_path(path)
如果给定的路径位于 NFS 或其他“特殊”的 fs 挂载点上,则返回一个包含 (True, selinux_context) 的元组,否则返回 (False, None)。
- load_file_common_arguments(params, path=None)
许多模块处理文件,此函数封装了文件模块接受的常用选项,以便所有模块都可以直接使用并共享代码。
允许通过提供 path 来覆盖 path/dest 模块参数。
- md5(filename)
使用 digest_from_file() 返回本地文件的 MD5 十六进制摘要。
- 除非您别无选择,否则请勿使用此函数:
可选的向后兼容性
与第三方协议兼容
此函数不适用于符合 FIPS-140-2 的系统。
此函数的大多数用途可以使用 module.sha1 函数代替。
- preserved_copy(src, dest)
复制文件,同时保留所有权、权限和上下文
- run_command(args, check_rc=False, close_fds=True, executable=None, data=None, binary_data=False, path_prefix=None, cwd=None, use_unsafe_shell=False, prompt_regex=None, environ_update=None, umask=None, encoding='utf-8', errors='surrogate_or_strict', expand_user_and_vars=True, pass_fds=None, before_communicate_callback=None, ignore_invalid_cwd=True, handle_exceptions=True)
执行命令,返回 rc、stdout 和 stderr。
此方法读取 stdout 和 stderr 的机制与 CPython subprocess.Popen.communicate 的机制不同,此方法会在生成的命令退出并使用完 stdout 和 stderr 后停止读取,而不是等到 stdout/stderr 关闭。当考虑到 fork 或后台进程可能保持 stdout 或 stderr 打开的时间比生成的命令更长时,这可能是一个重要的区别。
- 参数:
args – 是要运行的命令 * 如果 args 是列表,则该命令将使用 shell=False 运行。* 如果 args 是字符串且 use_unsafe_shell=False,它将把 args 分割为列表并使用 shell=False 运行 * 如果 args 是字符串且 use_unsafe_shell=True,则使用 shell=True 运行。
- Kw check_rc:
在非零 RC 的情况下是否调用 fail_json。默认为 False
- Kw close_fds:
请参阅 subprocess.Popen() 的文档。默认为 True
- Kw executable:
请参阅 subprocess.Popen() 的文档。默认为 None
- Kw data:
如果给定,则将信息写入命令的标准输入
- Kw binary_data:
如果为 False,则在数据末尾附加一个换行符。默认为 False
- Kw path_prefix:
如果给定,则在其中查找命令的附加路径。这会添加到 PATH 环境变量中,以便也可以找到同一目录中的辅助命令
- Kw cwd:
如果给定,则在其中运行命令的工作目录
- Kw use_unsafe_shell:
请参阅 args 参数。默认为 False
- Kw prompt_regex:
正则表达式字符串(不是已编译的正则表达式),可用于检测 stdout 中的提示,否则会导致执行挂起(尤其是在未指定任何输入数据的情况下)
- Kw environ_update:
用于更新环境变量的字典
- Kw umask:
运行命令时要使用的 Umask。默认为 None
- Kw encoding:
由于我们返回本机字符串,因此在 python3 上,我们需要知道要使用哪种编码才能从字节转换为文本。如果您始终想返回字节,请使用 encoding=None。默认值为“utf-8”。这不影响将字符串转换为 args。
- Kw errors:
由于我们返回本机字符串,因此在 python3 上,我们需要将 stdout 和 stderr 从字节转换为文本。如果字节无法在指定的
encoding
中解码,则使用此错误处理程序来处理它们。默认值为surrogate_or_strict
,这意味着如果可用(在我们支持的所有 python3 版本上可用),则将使用 surrogateescape 错误处理程序解码字节,否则将引发 UnicodeError 回溯。这不会影响作为 args 给定的字符串的转换。- Kw expand_user_and_vars:
当
use_unsafe_shell=False
时,此参数决定是否在路径中展开~
并在运行命令之前展开环境变量。当True
时,诸如$SHELL
之类的字符串将被展开,而无需转义。当False
且use_unsafe_shell=False
时,将不会进行路径或变量展开。- Kw pass_fds:
在 Python 3 上运行时,此参数决定应将哪些文件描述符传递给底层
Popen
构造函数。在 Python 2 上,这将设置close_fds
为 False。- Kw before_communicate_callback:
将在创建
Popen
对象之后但在与进程通信之前调用此函数。(Popen
对象将作为第一个参数传递给回调)- Kw ignore_invalid_cwd:
此标志指示是否应忽略无效的
cwd
(不存在或不是目录),或者是否应引发异常。- Kw handle_exceptions:
此标志指示是否将内联处理异常并发出 failed_json,或者是否应由调用方处理。
- 返回值:
一个包含返回码(整数)、stdout(本机字符串)和 stderr(本机字符串)的 3 元组。在 python2 上,stdout 和 stderr 都是字节字符串。在 python3 上,stdout 和 stderr 是根据 encoding 和 errors 参数转换的文本字符串。如果您想要 python3 上的字节字符串,请使用 encoding=None 关闭文本解码。
- sha1(filename)
使用 digest_from_file() 返回本地文件的 SHA1 十六进制摘要。
- sha256(filename)
使用 digest_from_file() 返回本地文件的 SHA-256 十六进制摘要。
基本
要使用此功能,请在模块中包含 import ansible.module_utils.basic
。
- ansible.module_utils.basic.get_all_subclasses(cls)
已弃用:请改用 ansible.module_utils.common._utils.get_all_subclasses
- ansible.module_utils.basic.get_platform()
已弃用 请直接使用
platform.system()
。- 返回值:
模块在其上运行的平台的名称(以本机字符串表示)
返回一个本机字符串,用于标记平台(“Linux”、“Solaris”等)。目前,这是调用
platform.system()
的结果。
- ansible.module_utils.basic.heuristic_log_sanitize(data, no_log_values=None)
从日志消息中删除看起来像密码的字符串
- ansible.module_utils.basic.load_platform_subclass(cls, *args, **kwargs)
已弃用:请改用 ansible.module_utils.common.sys_info.get_platform_subclass
参数规范
用于根据参数规范验证参数的类和函数。
ArgumentSpecValidator
- class ansible.module_utils.common.arg_spec.ArgumentSpecValidator(argument_spec, mutually_exclusive=None, required_together=None, required_one_of=None, required_if=None, required_by=None)
参数规范验证类
基于
argument_spec
创建一个验证器,该验证器可用于使用validate()
方法验证多个参数。- 参数:
argument_spec (dict[str, dict]) – 有效参数及其类型的规范。可能包含嵌套的参数规范。
mutually_exclusive (list[str] 或 list[list[str]]) – 不应同时提供的术语的列表或列表的列表。
required_together (list[list[str]]) – 需要一起提供的术语的列表的列表。
required_one_of (list[list[str]]) – 术语的列表的列表,每个列表中需要其中一个术语。
required_if (list) –
[parameter, value, [parameters]]
列表的列表,如果parameter == value
,则需要其中一个[parameters]
。required_by (dict[str, list[str]]) – 包含每个键在字典中所需的参数列表的参数名称字典。
- validate(parameters, *args, **kwargs)
根据参数规范验证
parameters
。ValidationResult
中的错误消息可能包含 no_log 值,并且在记录或显示之前应使用sanitize_keys()
进行清理。- 参数:
parameters (dict[str, dict]) – 要根据参数规范验证的参数
- 返回值:
ValidationResult
,包含已验证的参数。- 简单示例:
argument_spec = { 'name': {'type': 'str'}, 'age': {'type': 'int'}, } parameters = { 'name': 'bo', 'age': '42', } validator = ArgumentSpecValidator(argument_spec) result = validator.validate(parameters) if result.error_messages: sys.exit("Validation failed: {0}".format(", ".join(result.error_messages)) valid_params = result.validated_parameters
ValidationResult
- class ansible.module_utils.common.arg_spec.ValidationResult(parameters)
参数规范验证的结果。
这是
ArgumentSpecValidator.validate()
返回的对象,其中包含已验证的参数和任何错误。- 参数:
parameters (dict) – 要验证并强制转换为正确类型的术语。
- errors
AnsibleValidationErrorMultiple
,其中包含在验证期间发生任何失败时的所有AnsibleValidationError
对象。
- property validated_parameters
已验证和强制转换的参数。
参数
- ansible.module_utils.common.parameters.DEFAULT_TYPE_VALIDATORS
类型名称(例如
'str'
)的dict
,以及用于检查该类型的默认函数,在本例中为check_type_str()
。
- ansible.module_utils.common.parameters.env_fallback(*args, **kwargs)
从环境变量加载值
- ansible.module_utils.common.parameters.remove_values(value, no_log_strings)
从值中删除
no_log_strings
中的字符串。如果值是容器类型,则删除更多内容。
使用
deferred_removals
而不是纯粹的递归解决方案,是因为在处理大量数据时可能会达到最大递归深度(请参阅 问题 #24560)。
- ansible.module_utils.common.parameters.sanitize_keys(obj, no_log_strings, ignore_keys=frozenset({}))
通过从键名称中删除
no_log
值来清理容器对象中的键。这是
remove_values()
函数的配套函数。与该函数类似,我们使用deferred_removals
来避免在大型数据结构的情况下达到最大递归深度。- 参数:
obj – 要清理的容器对象。非容器对象将保持原样返回。
no_log_strings – 一个字符串值集合,这些值不希望被记录。
ignore_keys – 一个字符串值集合,这些值是需要忽略不清理的键。
- 返回值:
一个具有清理过的键的对象。
验证
用于验证各种参数类型的独立函数。
- ansible.module_utils.common.validation.check_missing_parameters(parameters, required_parameters=None)
此函数用于检查必需的参数,当我们需要比 argspec 中给出的更多信息时,我们无法通过 argspec 进行检查。
如果缺少任何必需的参数,则引发
TypeError
错误- 参数:
parameters – 参数字典
required_parameters – 要在给定的参数中查找的参数列表。
- 返回值:
空列表或如果检查失败,则引发
TypeError
错误。
- ansible.module_utils.common.validation.check_mutually_exclusive(terms, parameters, options_context=None)
根据参数检查互斥的术语
接受一个列表或列表的列表,这些列表是彼此互斥的术语组
- 参数:
terms – 互斥参数的列表
parameters – 参数字典
options_context – 如果
terms
位于子规范中,则为父键名称的字符串列表。
- 返回值:
空列表或如果检查失败,则引发
TypeError
错误。
- ansible.module_utils.common.validation.check_required_arguments(argument_spec, parameters, options_context=None)
检查 argument_spec 中的所有参数,并返回在参数中是必需但不存在的参数列表。
如果检查失败,则引发
TypeError
错误- 参数:
argument_spec – 参数规范字典,其中包含所有参数及其规范
parameters – 参数字典
options_context – 如果
argument_spec
位于子规范中,则为父键名称的字符串列表。
- 返回值:
空列表或如果检查失败,则引发
TypeError
错误。
- ansible.module_utils.common.validation.check_required_by(requirements, parameters, options_context=None)
对于 requirements 中的每个键,检查相应的列表以查看它们是否存在于 parameters 中。
接受每个键的单个字符串或值列表。
- 参数:
requirements – 需求字典
parameters – 参数字典
options_context – 如果
requirements
位于子规范中,则为父键名称的字符串列表。
- 返回值:
空字典,或如果检查失败,则引发
TypeError
错误。
- ansible.module_utils.common.validation.check_required_if(requirements, parameters, options_context=None)
检查有条件需要的参数
如果检查失败,则引发
TypeError
错误- 参数:
requirements – 指定参数、值、当给定参数为指定值时需要的参数的列表,以及可选的布尔值,指示需要任何或所有参数。
- 示例:
required_if=[ ['state', 'present', ('path',), True], ['someint', 99, ('bool_param', 'string_param')], ]
- 参数:
parameters – 参数字典
options_context – 如果
requirements
位于子规范中,则为父键名称的字符串列表。
- 返回值:
空列表或如果检查失败,则引发
TypeError
错误。异常的结果属性包含一个字典列表。每个字典是评估 requirements 中每个项目的结果。每个返回的字典包含以下键- key missing:
需要但缺失的参数列表
- key requires:
“any” 或 “all”
- key parameter:
具有要求的参数名称
- key value:
参数的原始值
- key requirements:
原始必需参数
- 示例:
[ { 'parameter': 'someint', 'value': 99 'requirements': ('bool_param', 'string_param'), 'missing': ['string_param'], 'requires': 'all', } ]
- ansible.module_utils.common.validation.check_required_one_of(terms, parameters, options_context=None)
检查每个术语列表,以确保给定的模块参数中至少存在一个
接受列表的列表或元组
- 参数:
terms – 要检查的术语列表的列表。对于每个术语列表,至少需要一个。
parameters – 参数字典
options_context – 如果
terms
位于子规范中,则为父键名称的字符串列表。
- 返回值:
空列表或如果检查失败,则引发
TypeError
错误。
- ansible.module_utils.common.validation.check_required_together(terms, parameters, options_context=None)
检查每个术语列表,以确保每个列表中的每个参数都存在于给定参数中。
接受列表的列表或元组。
- 参数:
terms – 要检查的术语列表的列表。每个列表应包含当在参数中指定至少一个时都需要的所有参数。
parameters – 参数字典
options_context – 如果
terms
位于子规范中,则为父键名称的字符串列表。
- 返回值:
空列表或如果检查失败,则引发
TypeError
错误。
- ansible.module_utils.common.validation.check_type_bits(value)
将人类可读的字符串位值转换为整数位。
示例:
check_type_bits('1Mb')
返回整数 1048576。如果无法转换该值,则引发
TypeError
错误。
- ansible.module_utils.common.validation.check_type_bool(value)
验证该值是否为布尔值或将其转换为布尔值并返回。
如果无法转换为布尔值,则引发
TypeError
错误- 参数:
value – 要转换为布尔值的字符串、整数或浮点数。有效的布尔值包括:“1”、“on”、1、“0”、0、“n”、“f”、“false”、“true”、“y”、“t”、“yes”、“no”、“off”
- 返回值:
布尔值 True 或 False
- ansible.module_utils.common.validation.check_type_bytes(value)
将人类可读的字符串值转换为字节
如果无法转换该值,则引发
TypeError
错误
- ansible.module_utils.common.validation.check_type_dict(value)
验证值是否为字典或将其转换为字典并返回。
如果无法转换为字典,则引发
TypeError
错误- 参数:
value – 要转换为字典的字典或字符串。接受
k1=v2, k2=v2
或k1=v2 k2=v2
。- 返回值:
转换为字典的值
- ansible.module_utils.common.validation.check_type_float(value)
验证值是否为浮点数或将其转换为浮点数并返回
如果无法转换为浮点数,则引发
TypeError
错误- 参数:
value – 要验证或转换并返回的浮点数、整数、字符串或字节。
- 返回值:
给定值的浮点数。
- ansible.module_utils.common.validation.check_type_int(value)
验证该值是否为整数并返回它,或者将该值转换为整数并返回它
如果无法转换为整数,则引发
TypeError
错误- 参数:
value – 要转换或验证的字符串或整数
- 返回值:
给定值的整数
- ansible.module_utils.common.validation.check_type_jsonarg(value)
返回一个 JSON 化的字符串。有时,控制器会将 JSON 字符串转换为字典/列表,因此在此处将其转换回 JSON
如果无法转换该值,则引发
TypeError
错误
- ansible.module_utils.common.validation.check_type_list(value)
验证值是否为列表或将其转换为列表
逗号分隔的字符串将被拆分为一个列表。如果无法转换为列表,则会引发
TypeError
异常。- 参数:
value – 要验证或转换为列表的值
- 返回值:
如果它已经是列表,则返回原始值;如果它是浮点数、整数或不带逗号的字符串,则返回单项列表;如果它是逗号分隔的字符串,则返回多项列表。
- ansible.module_utils.common.validation.check_type_path(value)
验证提供的值是否为字符串或将其转换为字符串,然后返回展开的路径
- ansible.module_utils.common.validation.check_type_raw(value)
返回原始值
- ansible.module_utils.common.validation.check_type_str(value, allow_conversion=True, param=None, prefix='')
验证值是否为字符串或将其转换为字符串。
由于转换为字符串时有时会发生意外更改,
allow_conversion
控制是否转换该值,或者如果该值不是字符串且将被转换时是否引发 TypeError。- 参数:
value – 要验证或转换为字符串的值
allow_conversion – 是否转换字符串并返回它,或者引发 TypeError
- 返回值:
如果它是字符串,则返回原始值;如果 allow_conversion=True,则返回转换为字符串的值;如果 allow_conversion=False,则引发 TypeError。
- ansible.module_utils.common.validation.count_terms(terms, parameters)
计算给定字典中键出现的次数
- 参数:
terms – 要检查的字符串或值迭代
parameters – 参数字典
- 返回值:
一个整数,表示在提供的字典中 terms 值出现的次数。
错误
- exception ansible.module_utils.errors.AnsibleFallbackNotFound
未找到回退验证器
- exception ansible.module_utils.errors.AnsibleValidationError(message)
单参数规格验证错误
- error_message
引发异常时传递的错误消息。
- property msg
引发异常时传递的错误消息。
- exception ansible.module_utils.errors.AnsibleValidationErrorMultiple(errors=None)
多参数规格验证错误
- errors
- property msg
errors
中第一个错误的第一个消息。
- append(error)
将新错误附加到
self.errors
。只应添加
AnsibleValidationError
。
- extend(errors)
将
errors
中的每个项附加到self.errors
。只应添加AnsibleValidationError
。
- exception ansible.module_utils.errors.AliasError(message)
处理别名时的错误
- exception ansible.module_utils.errors.ArgumentTypeError(message)
参数类型错误
- exception ansible.module_utils.errors.ArgumentValueError(message)
参数值错误
- exception ansible.module_utils.errors.DeprecationError(message)
处理参数弃用时的错误
- exception ansible.module_utils.errors.ElementError(message)
验证元素时的错误
- exception ansible.module_utils.errors.MutuallyExclusiveError(message)
提供了互斥参数
- exception ansible.module_utils.errors.NoLogError(message)
转换 no_log 值时的错误
- exception ansible.module_utils.errors.RequiredByError(message)
其他参数所必需的参数错误
- exception ansible.module_utils.errors.RequiredDefaultError(message)
必需参数被分配了默认值
- 异常 ansible.module_utils.errors.RequiredError(message)
缺少必需的参数
- 异常 ansible.module_utils.errors.RequiredIfError(message)
条件性必需参数的错误
- 异常 ansible.module_utils.errors.RequiredOneOfError(message)
至少需要一个参数的错误
- 异常 ansible.module_utils.errors.RequiredTogetherError(message)
一起需要的参数的错误
- 异常 ansible.module_utils.errors.SubParameterTypeError(message)
子参数的类型不正确
- 异常 ansible.module_utils.errors.UnsupportedError(message)
提供了不支持的参数