Ansible-core 2.11 移植指南
本节讨论 ansible-base 2.10 和 ansible-core 2.11 之间的行为变化。
旨在帮助您更新 playbook、插件以及 Ansible 基础设施的其他部分,以便它们可以与此版本的 ansible-core 协同工作。
我们建议您在阅读本页面的同时,阅读 2.11 版 ansible-core 变更日志,以了解您可能需要进行哪些更新。
ansible-core 主要针对开发者以及仅希望使用可用集合中一小部分且受控子集的用户。普通用户应该安装 Ansible。
完整的移植指南列表可在 移植指南 中找到。
Playbook
jinja2_native设置现在不会影响隐式返回字符串的template模块。对于template查找,有一个新的参数jinja2_native(默认关闭)来控制该功能。其余 Jinja2 表达式仍根据jinja2_native设置进行操作。
命令行
ansible-galaxy login命令已被移除,因为它用于 GitHub 认证的基础 API 已被关闭。现在使用ansible-galaxy向 Galaxy 发布角色或集合时,需要通过令牌文件(默认位置~/.ansible/galaxy_token)或者(不安全地)使用ansible-galaxy的--token参数来提供 Galaxy API 令牌。
弃用内容
常量 ansible.module_utils.basic._CHECK_ARGUMENT_TYPES_DISPATCHER 已弃用。请改用 ansible.module_utils.common.parameters.DEFAULT_TYPE_VALIDATORS。
破坏性变更
对 AnsibleModule 的更改
随着改用 ArgumentSpecValidator 执行参数规范验证,AnsibleModule 中的以下私有方法已被移除:
_check_argument_types()
_check_argument_values()
_check_arguments()
_check_mutually_exclusive()–>ansible.module_utils.common.validation.check_mutually_exclusive()
_check_required_arguments()–>ansible.module_utils.common.validation.check_required_arguments()
_check_required_by()–>ansible.module_utils.common.validation.check_required_by()
_check_required_if()–>ansible.module_utils.common.validation.check_required_if()
_check_required_one_of()–>ansible.module_utils.common.validation.check_required_one_of()
_check_required_together()–>ansible.module_utils.common.validation.check_required_together()
_check_type_bits()–>ansible.module_utils.common.validation.check_type_bits()
_check_type_bool()–>ansible.module_utils.common.validation.check_type_bool()
_check_type_bytes()–>ansible.module_utils.common.validation.check_type_bytes()
_check_type_dict()–>ansible.module_utils.common.validation.check_type_dict()
_check_type_float()–>ansible.module_utils.common.validation.check_type_float()
_check_type_int()–>ansible.module_utils.common.validation.check_type_int()
_check_type_jsonarg()–>ansible.module_utils.common.validation.check_type_jsonarg()
_check_type_list()–>ansible.module_utils.common.validation.check_type_list()
_check_type_path()–>ansible.module_utils.common.validation.check_type_path()
_check_type_raw()–>ansible.module_utils.common.validation.check_type_raw()
_check_type_str()–>ansible.module_utils.common.validation.check_type_str()
_count_terms()–>ansible.module_utils.common.validation.count_terms()
_get_wanted_type()
_handle_aliases()
_handle_no_log_values()
_handle_options()
_set_defaults()
_set_fallbacks()
使用这些私有方法的模块或插件应使用 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 ansible或pip uninstall ansible-base,以避免冲突。控制器节点上的 Python 3.8 是此版本的软要求。
ansible-core2.11 仍然适用于ansible-base2.10 所适用的相同 Python 版本,但在 Python 版本低于 3.8 的控制器节点上运行时会发出警告。可以通过在环境中设置ANSIBLE_CONTROLLER_PYTHON_WARNING=False来禁用此警告。ansible-core2.12 将需要 Python 3.8 或更高版本。配置系统现在会验证
choices字段,因此任何违反该字段且在 2.10 中被忽略的设置在 2.11 中会导致错误。例如,ANSIBLE_COLLECTIONS_ON_ANSIBLE_VERSION_MISMATCH=0现在会导致错误(有效的选项为ignore、warn或error)。ansible-galaxy命令现在使用resolvelib来解析依赖关系。在大多数情况下,这除了性能更好之外,不会对用户造成任何差异,但我们在此处记录以便查阅和完整性。如果您将 Python
module_utils导入到您维护的任何模块中,您现在可以在模块构建期间通过将import语句包裹在try或if块中,将该导入标记为可选。这允许模块使用在所有 Ansible 版本或集合中可能不存在的module_utils,并在模块运行时执行任意恢复或回退操作。
Modules (模块)
apt_key模块已明确定义file与data、keyserver和url互斥。它们不能再一起使用。meta模块现在支持用户定义任务的标签。将任务的标签设置为‘always’以保持之前的行为。内部meta任务将继续始终运行。
已移除的模块
以下模块不再存在
无显著变更
弃用公告
无显著变更
值得关注的模块更改
facts - 在 NetBSD 上,
ansible_virtualization_type现在尝试报告比虚拟化且未在 Xen 上运行时更准确的结果,而不是xen。facts - 虚拟化事实现在包含
virtualization_tech_guest和virtualization_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 插件配置为使用独立于事实缓存的缓存后端。callback 插件 -
meta任务执行现在像任何其他任务一样发送到v2_playbook_on_task_start。默认情况下,只有显式的 meta 任务会发送到那里。回调插件可以选择接收内部、隐式创建的任务,并对其进行相应操作,如插件开发文档中所述。choices现已验证,因此如果提供的值不匹配,使用不正确或不完整选择的插件在 2.11 中会发出错误。这有一个简单的修复方法:更新choices中的条目以符合实际情况。
移植自定义脚本
无显著变更