Ansible-core 2.20 迁移指南
本节讨论了 ansible-core 2.19 与 ansible-core 2.20 之间的行为变更。
旨在帮助您更新剧本 (playbooks)、插件以及 Ansible 基础架构的其他部分,以便它们能与此版本的 Ansible 协同工作。
请查阅本页以及 ansible-core 2.20 更新日志 (Changelog) 以了解必要的变更。
本文档是移植系列指南的一部分。完整的移植指南列表可以在 移植指南 中找到。
简介
无显著变更
剧本 (Playbook)
移除了 PowerShell 操作中的引号剥离
在执行复制和获取文件等 Windows 操作时,PowerShell 模块实用程序不再尝试从路径中去除引号。除非某个值被重复添加了引号,否则这不应影响正常的 Playbook。如果您的 Playbook 依赖于这种自动去引号功能,您需要调整路径格式。
引擎 (Engine)
无显著变更
插件 API
移除的功能
以下先前弃用的功能已被移除
DEFAULT_TRANSPORT配置选项不再支持smart值,该值曾用于根据底层平台配置自动选择ssh或paramiko作为默认传输方式。vault和unvault过滤器不再接受已弃用的vaultid参数。ansible-galaxy命令不再支持 v2 Galaxy 服务器 API。托管集合的 Galaxy 服务器必须支持 v3。dnf和dnf5模块不再支持已弃用的install_repoquery选项。encrypt模块实用程序不再包含已弃用的passlib_or_cryptAPI。paramiko连接插件不再支持先前已弃用的PARAMIKO_HOST_KEY_AUTO_ADD和PARAMIKO_LOOK_FOR_KEYS配置键。py3compat.environ调用已被移除。不继承自
BaseVarsPlugin并定义了get_vars方法的变量插件,无法再使用已弃用的get_host_vars或get_group_vars回退机制。yum_repository模块不再支持已弃用的keepcache选项。
行为变更
DataLoader.get_basedir方法现在返回绝对路径而非相对路径。依赖于相对路径的插件代码可能需要调整。参数规范验证现在将
None值视为str类型的空字符串,以提高与 2.19 之前模板转换的一致性。当使用
failed_when抑制错误时,结果中的exception键现已重命名为failed_when_suppressed_exception。这可以防止错误在被抑制后由回调显示。如果您的 Playbook 检查结果中的异常,请按如下方式进行更新
# Before
- command: /bin/false
register: result
failed_when: false
- debug:
msg: "Exception was: {{ result.exception }}"
when: result.exception is defined
# After
- command: /bin/false
register: result
failed_when: false
- debug:
msg: "Exception was: {{ result.failed_when_suppressed_exception }}"
when: result.failed_when_suppressed_exception is defined
命令行
Python 3.11 不再是受支持的控制节点版本。运行 Ansible 现在需要 Python 3.12+。
Python 3.8 不再是受支持的远程版本。目标执行现在需要 Python 3.9+。
已废弃
INJECT_FACTS_AS_VARS
INJECT_FACTS_AS_VARS 配置目前的默认值为 True,但这已被弃用,并将在 Ansible 2.24 中切换为 False。
启用后,事实(facts)既可在 ansible_facts 字典中使用,也可作为主命名空间中的独立变量使用。在 ansible_facts 字典中,事实名称中的 ansible_ 前缀会被移除。
如果您正在访问“注入的”事实,您将收到弃用警告。为应对未来的默认设置:
更新您的 Playbook 以使用 ansible_facts 字典
# Deprecated - will stop working in 2.24
- debug:
msg: "OS: {{ ansible_os_distribution }}"
# Recommended - works in all versions
- debug:
msg: "OS: {{ ansible_facts['distribution'] }}"
# Note: 'ansible_' prefix is removed inside ansible_facts
或者在您的配置中显式启用当前行为
在您的 ansible.cfg 文件中
[defaults]
inject_facts_as_vars = True
通过导出环境变量
export ANSIBLE_INJECT_FACT_VARS=True
其他弃用项
vars内部变量缓存将在 2.24 中移除。此缓存曾用于内部,但会导致变量处于不一致状态。应改用vars和varnames查找。在
include_vars模块中将ignore_files指定为字符串的做法已被弃用。请改用列表
# Deprecated
- include_vars:
dir: vars/
ignore_files: ".gitkeep"
# Correct
- include_vars:
dir: vars/
ignore_files: [".gitkeep"]
模块
已移除的模块
以下模块不再存在
无显著变更
弃用通知
无显著变更
值得注意的模块变更
如果
extensions参数未指定为列表,include_vars模块现在会报错。此前,非列表值会被静默接受。如果
ignore_files参数未指定为列表,include_vars模块现在会报错。此前,字符串值会被接受,但现在已被弃用。replace模块现在以 Unicode 字符的文本模式而非字节模式读取和写入文件,并将正则表达式匹配切换为 Unicode 字符而非字节。这可能会影响依赖字节级操作的 Playbook。
插件
值得注意的插件变更
无显著变更
迁移自定义脚本
无显著变更
网络
无显著变更