Ansible-core 2.12 移植指南

本节讨论了 ansible-core 2.11 和 ansible-core 2.12 之间的行为更改。

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

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

本文档是关于移植的集合的一部分。完整的移植指南列表可以在 移植指南 中找到。

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 的默认值已更改为 autoINTERPRETER_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

已弃用

  • 此版本中,目标节点上的 Python 2.6 已弃用。ansible-core 2.13 将删除对 Python 2.6 的支持。

  • 条件语句中的裸变量:when 条件语句不再自动将字符串布尔值(如 "true""false")解析为实际的布尔值。任何包含非空字符串的变量都被视为 true。这之前可以通过 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 解释器安装的 pip Python 模块(如果可用),除非指定了 executablevirtualenv

已移除的模块

以下模块不再存在

  • 无显著变化

弃用通知

无显著变化

值得注意的模块更改

无显著变化

插件

  • Jinja2 < 2.10 的 unique 过滤器区分大小写,并且如果 case_sensitive=False,则会一致地引发错误,而不是在 case_sensitive=True 时引发错误。

  • 集合论过滤器(intersectdifferencesymmetric_differenceunion)现在区分大小写。请显式使用 case_sensitive=False 以保留以前的行为。注意:对于 Jinja2 < 2.10,这些过滤器默认情况下已经区分大小写。

  • 当未指定选项时,password_hash 现在使用 passlib 默认值,例如 bcrypt_sha256 现在默认为 “2b” 格式,如果需要 “2a” 格式,则必须指定。

移植自定义脚本

无显著变化

网络

无显著变化