Ansible-core 2.11 移植指南
本节讨论 ansible-base
2.10 和 ansible-core
2.11 之间的行为变化。
它的目的是帮助您更新您的剧本、插件和 Ansible 基础架构的其他部分,使其与这个版本的 ansible-core
兼容。
我们建议您阅读此页面以及 ansible-core 2.11 的变更日志,以了解您可能需要进行哪些更新。
ansible-core
主要适用于希望使用一小部分受控集合的开发人员和用户。普通用户应该安装 Ansible。
所有移植指南的完整列表可以在 移植指南 中找到。
剧本
现在
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
中的以下私有方法已被删除
_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-core
2.11 仍然可以与ansible-base
2.10 使用的相同版本的 Python 一起使用,但是 2.11 在控制器节点上运行时,如果 Python 版本低于 3.8,则会发出警告。可以通过在环境中设置ANSIBLE_CONTROLLER_PYTHON_WARNING=False
来禁用此警告。ansible-core
2.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
,并在模块运行时执行任意恢复或回退操作。
模块
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 供电的 VM 上运行的 podman 容器具有virtualization_tech_guest
为["kvm", "podman", "container"]
。参数
filter
类型在 setup 模块中从string
更改为list
,以便使用多个过滤器。以前的行为(使用string
)仍然保留并作为一个过滤器起作用。
插件
inventory 插件 -
CachePluginAdjudicator.flush()
现在调用底层缓存插件的flush()
,而不仅仅是删除它知道的键。库存插件应该使用delete()
来删除任何特定的键。作为用户,这意味着当库存插件调用其clear_cache()
方法时,事实也会从缓存中刷新。为了解决这个问题,用户可以将库存插件配置为使用独立于事实缓存的缓存后端。callback 插件 -
meta
任务执行现在与任何其他任务一样发送到v2_playbook_on_task_start
。默认情况下,只有显式 meta 任务被发送到那里。回调插件可以选择接收内部、隐式创建的任务,以便在这些任务上采取行动,如插件开发文档中所述。现在验证了
choices
,因此如果提供的 value 与之不匹配,则使用不正确或不完整选择的插件在 2.11 中会发出错误。这有一个简单的解决方法:更新choices
中的条目以匹配实际情况。
移植自定义脚本
没有显着变化