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)

从模块返回,无错误。

fail_json(msg, **kwargs)

从模块返回,并显示错误消息。

find_mount_point(path)

获取路径并返回其挂载点。

参数:

path – 文件系统路径的字符串类型。

返回:

挂载点的路径,作为文本类型。

get_bin_path(arg, required=False, opt_dirs=None)

在 PATH 中查找系统可执行文件。

参数:
  • arg – 要查找的可执行文件。

  • required – 如果找不到可执行文件并且 required 为 True,则 fail_json。

  • opt_dirs – 除 PATH 外,还要搜索的可选目录列表。

返回:

如果找到,则返回完整路径;否则返回原始 arg,除非为“警告”,则返回 None。

引发:

Sysexit:如果找不到 arg 并且 required=True(通过 fail_json)。

is_executable(path)

给定路径是否可执行?

参数:

path – 要检查的文件的路径。

限制

  • 不考虑 FSACL。

  • 大多数时候,我们真正想知道的是“当前用户能否执行此文件”。此函数不会告诉我们这一点,只会告诉我们是否设置了任何执行位。

is_special_selinux_path(path)

如果给定路径位于 NFS 或其他“特殊”文件系统挂载点上,则返回一个包含 (True, selinux_context) 的元组,否则返回 (False, None)。

load_file_common_arguments(params, path=None)

许多模块都处理文件,这封装了文件模块接受的常用选项,以便直接提供给所有模块,并且它们可以共享代码。

允许通过提供 path 来覆盖 path/dest 模块参数。

md5(filename)

使用 digest_from_file() 返回本地文件的 MD5 十六进制摘要。

除非别无选择,否则不要使用此函数。
  1. 可选向后兼容性

  2. 与第三方协议的兼容性

此函数不适用于符合 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关闭。考虑到派生的或后台进程可能会比生成的命令保持stdout或stderr打开更长时间,这是一个重要的区别。

参数:

args – 要运行的命令 * 如果args是列表,则命令将使用shell=False运行。 * 如果args是字符串且use_unsafe_shell=False,它会将args拆分为列表并使用shell=False运行 * 如果args是字符串且use_unsafe_shell=True,则它使用shell=True运行。

关键字 check_rc:

如果非零RC,是否调用fail_json。默认为False

关键字 close_fds:

参见subprocess.Popen()的文档。默认为True

关键字 executable:

参见subprocess.Popen()的文档。默认为None

关键字 data:

如果给出,则将信息写入命令的stdin

关键字 binary_data:

如果为False,则在数据后附加换行符。默认为False

关键字 path_prefix:

如果给出,则查找命令的附加路径。这会添加到PATH环境变量中,以便也可以找到同一目录中的辅助命令

关键字 cwd:

如果给出,则在其中运行命令的工作目录

关键字 use_unsafe_shell:

参见args参数。默认为False

关键字 prompt_regex:

正则表达式字符串(不是已编译的正则表达式),可用于检测stdout中的提示符,否则这些提示符会导致执行挂起(尤其是在未指定输入数据的情况下)

关键字 environ_update:

用于更新环境变量的字典

关键字 umask:

运行命令时要使用的umask。默认为None

关键字 encoding:

由于我们返回原生字符串,所以在python3中,我们需要知道要使用的编码才能将字节转换为文本。如果始终希望获得字节,请使用encoding=None。默认为“utf-8”。这不会影响作为参数给出的字符串的转换。

关键字 errors:

由于我们返回原生字符串,所以在python3中,我们需要将stdout和stderr从字节转换为文本。如果字节在指定的encoding中无法解码,则使用此错误处理程序来处理它们。默认为surrogate_or_strict,这意味着如果可用,则将使用surrogateescape错误处理程序解码字节(在我们支持的所有python3版本上都可用),否则将引发UnicodeError回溯。这不会影响作为参数给出的字符串的转换。

关键字 expand_user_and_vars:

use_unsafe_shell=False时,此参数决定是否在路径中扩展~并在运行命令之前扩展环境变量。当True时,例如$SHELL这样的字符串将被扩展,而不管转义如何。当Falseuse_unsafe_shell=False时,不会进行任何路径或变量扩展。

关键字 pass_fds:

在Python 3上运行时,此参数决定应将哪些文件描述符传递给底层的Popen构造函数。在Python 2上,这会将close_fds设置为False。

关键字 before_communicate_callback:

创建Popen对象后但在与进程通信之前,将调用此函数。(Popen对象将作为第一个参数传递给回调)

关键字 ignore_invalid_cwd:

此标志指示是否应忽略无效的cwd(不存在或不是目录)或引发异常。

关键字 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] or 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

已验证和强制转换的参数。

property unsupported_parameters

不支持的参数名称的set

property error_messages

list,包含errors中每个异常的所有错误消息。

参数

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而不是纯递归解决方案,是因为在处理大量数据时可能会达到最大递归深度(参见issue #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。异常的 results 属性包含字典列表。每个字典都是评估 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)

验证 value 是字典还是将其转换为字典并返回它。

如果无法转换为字典,则引发 TypeError

参数:

value – 要转换为字典的字典或字符串。接受 k1=v2, k2=v2k1=v2 k2=v2

返回:

转换为字典的值

ansible.module_utils.common.validation.check_type_float(value)

验证 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

list of AnsibleValidationError 对象

property msg

errors中第一个错误的第一个消息。

property messages

list of 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)

验证元素时的错误

异常 ansible.module_utils.errors.MutuallyExclusiveError(message)

提供了互斥参数

异常 ansible.module_utils.errors.NoLogError(message)

转换no_log值时出错

异常 ansible.module_utils.errors.RequiredByError(message)

其他参数所需的参数出错

异常 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)

提供了不支持的参数