Ansible-core 2.12 移植指南
本节讨论了 ansible-core 2.11 和 ansible-core 2.12 之间的行为变化。
本指南旨在帮助您更新 Playbook、插件以及 Ansible 基础设施的其他部分,以便它们能与此版本的 Ansible 协同工作。
我们建议您在阅读本页的同时,参考 ansible-core 2.12 版本变更日志 (Changelog),以了解您可能需要进行的更新。
本文档是移植系列指南的一部分。完整的移植指南列表可以在 移植指南 中找到。
Playbook
在调用任务并设置
async时,在environment:下设置ANSIBLE_ASYNC_DIR已不再有效。请改为使用 shell 配置变量async_dir,例如设置ansible_async_dir。
tasks:
- dnf:
name: '*'
state: latest
async: 300
poll: 5
vars:
ansible_async_dir: /path/to/my/custom/dir
undef()函数已被添加到模板环境中,用于直接在模板中创建未定义的变量。对于打算被覆盖的变量,可以根据需要提供提示。
vars:
old: "{{ undef }}"
new: "{{ undef() }}"
new_with_hint: "{{ undef(hint='You must override this variable') }}"
Python 解释器发现
INTERPRETER_PYTHON 的默认值已更改为 auto。INTERPRETER_PYTHON_FALLBACK 中的 Python 解释器列表现在优先选择 Python 3 而非 Python 2。这两个更改结合在一起,意味着新的默认行为是在远程主机上静默优先选择 Python 3 而非 Python 2。此前,在解释器发现本应使用 Python 3 但解释器被设置为 /usr/bin/python 的情况下,会发出弃用警告。
可以通过设置 ansible_interpreter_python_fallback 变量来更改默认的 INTERPRETER_PYTHON_FALLBACK 解释器列表。
更多详情,请参阅 解释器发现文档。
命令行
控制器节点上的 Python 3.8 是此版本的硬性要求。命令行脚本无法在更低版本的 Python 上运行。
ansible-vault不再支持PyCrypto,现在需要cryptography库。
弃用 (Deprecated)
在此版本中,目标节点上的 Python 2.6 已被弃用。
ansible-core2.13 将移除对 Python 2.6 的支持。条件语句中的纯变量:
when条件语句不再自动将字符串布尔值(如"true"和"false")解析为实际的布尔值。任何包含非空字符串的变量都被视为真。此前可以通过CONDITIONAL_BARE_VARS配置选项(以及ANSIBLE_CONDITIONAL_BARE_VARS环境变量)进行配置。此设置现在已不再有任何影响。用户可以使用|bool过滤器来解决此问题。
vars:
teardown: 'false'
tasks:
- include_tasks: teardown.yml
when: teardown | bool
- include_tasks: provision.yml
when: not teardown | bool
ActionBase中的_remote_checksum()方法已被弃用。任何使用此方法的动作插件都应改为使用_execute_remote_stat()。
模块
cron现在要求在所有情况下都必须指定name。cron不再允许使用reboot参数。请改为使用special_time: reboot。hostname- 在 FreeBSD 上,如果永久主机名文件不存在,before的结果将不再是"temporarystub",而将是""(空字符串),以便与其他系统保持一致。hostname- 在 OpenRC 和 Solaris 系统上,如果永久主机名文件不存在,before的结果将不再是"UNKNOWN",而将是""(空字符串),以便与其他系统保持一致。pip现在会使用为 Ansible 模块的 Python 解释器安装的pipPython 模块(如果可用),除非指定了executable或virtualenv。
已移除的模块
以下模块不再存在
无显著变更
弃用通知
无显著变更
值得注意的模块变化
无显著变更
插件
对于 Jinja2 < 2.10,
unique过滤器区分大小写,现在当case_sensitive=False时,它会一致地引发错误,而不是在case_sensitive=True时引发错误。集合论过滤器(
intersect,difference,symmetric_difference和union)现在区分大小写。明确使用case_sensitive=False以保持先前的行为。注意:对于 Jinja2 < 2.10,这些过滤器默认情况下已经区分大小写。当未指定选项时,
password_hash现在使用passlib的默认值。例如,bcrypt_sha256现在默认使用 “2b” 格式;如果需要 “2a” 格式,则必须明确指定。
移植自定义脚本
无显著变更
网络
无显著变更