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 令牌通过令牌文件(默认位置 ~/.ansible/galaxy_token)传递到 CLI,或者(不安全地)使用 --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.validationArgumentSpecValidator.validate()中的公共函数,如果上面没有列出公共函数。

ansible.module_utils.common.parameters的更改

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

  • list_no_log_values

  • list_deprecations

  • handle_aliases

其他

  • 升级:如果从ansible < 2.10ansible-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模块已明确定义filedatakeyserverurl互斥。它们不能一起使用。

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

已移除的模块

以下模块已不存在

  • 无显著变化

弃用通知

无显著变化

值得注意的模块更改

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

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

  • 为了使用多个过滤器,setup模块中filter参数的类型已从string更改为list。之前的行为(使用string)仍然保留并作为一个过滤器工作。

插件

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

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

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

移植自定义脚本

无显著变化