Ansible-core 2.11 移植指南

本节讨论 ansible-base 2.10 和 ansible-core 2.11 之间的行为变化。

旨在帮助您更新 Playbook、插件和 Ansible 基础架构的其他部分,以便它们与此版本的 ansible-core 一起工作。

我们建议您阅读此页面以及 ansible-core 2.11 的更新日志,以了解您可能需要进行的更新。

ansible-core 主要针对只想使用可用集合的一小部分受控子集的开发人员和用户。普通用户应安装 Ansible。

完整的移植指南列表可以在 移植指南 中找到。

Playbook

  • jinja2_native 设置现在不影响隐式返回字符串的模板模块。对于模板查找,有一个新的参数 jinja2_native(默认关闭)来控制该功能。其余的 Jinja2 表达式仍基于 jinja2_native 设置进行操作。

命令行

  • ansible-galaxy login 命令已被删除,因为它用于 GitHub 身份验证的底层 API 已关闭。现在,使用 ansible-galaxy 将角色或集合发布到 Galaxy 需要将 Galaxy API 令牌传递给 CLI,使用令牌文件(默认位置为 ~/.ansible/galaxy_token)或(不安全地)使用 --token 参数传递给 ansible-galaxy

已弃用

常量 ansible.module_utils.basic._CHECK_ARGUMENT_TYPES_DISPATCHER 已弃用。请改用 ansible.module_utils.common.parameters.DEFAULT_TYPE_VALIDATORS

重大更改

AnsibleModule 的更改

随着转移到使用 ArgumentSpecValidator 来执行参数规范验证,AnsibleModule 中的以下私有方法已被删除

使用这些私有方法的模块或插件应使用 ansible.module_utils.common.validation 中的公共函数,或者,如果上面没有列出公共函数,则使用 ArgumentSpecValidator.validate()

ansible.module_utils.common.parameters 的更改

ansible.module_utils.common.parameters 中的以下函数现在是私有的,不应直接使用。请改用 ArgumentSpecValidator.validate()

  • list_no_log_values

  • list_deprecations

  • handle_aliases

其他

  • 升级:如果从 ansible < 2.10 或从 ansible-base 升级并且使用 pip,您必须在安装 ansible-core 之前执行 pip uninstall ansiblepip uninstall ansible-base,以避免冲突。

  • 此版本对控制节点上的 Python 3.8 有软性要求。 ansible-core 2.11 仍然可以使用与 ansible-base 2.10 相同的 Python 版本,但是当在 Python 版本低于 3.8 的控制节点上运行时,2.11 会发出警告。可以通过在环境中设置 ANSIBLE_CONTROLLER_PYTHON_WARNING=False 来禁用此警告。ansible-core 2.12 将需要 Python 3.8 或更高版本。

  • 配置系统现在会验证 choices 字段,因此任何违反该字段并在 2.10 中被忽略的设置都会在 2.11 中导致错误。例如,ANSIBLE_COLLECTIONS_ON_ANSIBLE_VERSION_MISMATCH=0 现在会导致错误(有效的选择是 ignorewarnerror)。

  • ansible-galaxy 命令现在使用 resolvelib 来解决依赖关系。在大多数情况下,除了性能更高之外,这不应该对用户造成任何影响,但我们在此记录下来是为了完整性。

  • 如果您将 Python module_utils 导入到您维护的任何模块中,您现在可以通过将 import 语句包装在 tryif 块中,在模块有效负载构建期间将导入标记为可选。这允许模块使用可能不存在于所有 Ansible 版本或集合中的 module_utils,并在模块运行时执行任意恢复或回退操作。

模块

  • apt_key 模块已明确将 file 定义为与 datakeyserverurl 互斥。它们不能再一起使用。

  • meta 模块现在支持用户定义的任务的标签。将任务的标签设置为“always”以保持之前的行为。内部 meta 任务继续始终运行。

已删除的模块

以下模块不再存在

  • 没有值得注意的更改

弃用通知

没有值得注意的更改

值得注意的模块更改

  • facts - 在 NetBSD 上,当虚拟化并且未在 Xen 上运行时,ansible_virtualization_type 现在尝试报告比 xen 更准确的结果。

  • facts - 虚拟化事实现在包括 virtualization_tech_guestvirtualization_tech_host 键。这些分别是访客所参与的或主机提供的虚拟化技术的列表。例如,如果您设置一个主机以同时提供 KVM 和 VirtualBox,则这两个值都包含在 virtualization_tech_host 中。同样,在由 KVM 支持的 VM 上运行的 podman 容器的 virtualization_tech_guest["kvm", "podman", "container"]

  • 为了使用多个过滤器,setup 模块中 filter 参数类型从 string 更改为 list。以前的行为(使用 string)仍然存在,并且可以用作单个过滤器。

插件

  • inventory 插件 - CachePluginAdjudicator.flush() 现在调用底层缓存插件的 flush(),而不是仅删除它知道的键。Inventory 插件应使用 delete() 删除任何特定的键。作为用户,这意味着当 inventory 插件调用其 clear_cache() 方法时,事实也可能从缓存中清除。为了解决这个问题,用户可以将 inventory 插件配置为使用独立于事实缓存的缓存后端。

  • callback 插件 - meta 任务执行现在像任何其他任务一样发送到 v2_playbook_on_task_start。默认情况下,仅显式的 meta 任务会发送到那里。Callback 插件可以选择接收内部隐式创建的任务以对其进行操作,如插件开发文档中所述。

  • 现在验证 choices,因此如果提供的值不匹配,则使用不正确或不完整的 choices 的插件会在 2.11 中发出错误。这有一个简单的修复方法:更新 choices 中的条目以符合实际情况。

移植自定义脚本

没有值得注意的更改