Ansible 2.9 移植指南

本节讨论 Ansible 2.8 和 Ansible 2.9 之间的行为更改。

它旨在帮助更新您的剧本、插件和 Ansible 基础设施的其他部分,使其与 Ansible 的此版本兼容。

我们建议您阅读本页面以及 Ansible 2.9 的更改日志,以了解您可能需要进行哪些更新。

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

剧本

清单

  • hash_behaviour 现在会影响清单来源。如果您将其设置为 merge,您从清单获得的数据可能会发生更改,您需要相应地更新剧本。如果您使用默认设置 (overwrite),您将不会看到任何更改。清单以前会忽略此设置。

循环

Ansible 2.9 更稳健地处理“不安全”数据,确保标记为“不安全”的数据不会被模板化。在以前版本中,Ansible 会递归地将通过直接使用 lookup() 返回的所有数据标记为“不安全”,但仅将通过使用 with_X 风格循环的间接查找返回的结构化数据标记为“不安全”,前提是返回的元素是字符串。Ansible 2.9 对这两种方法进行了一致的处理。

因此,如果您使用 with_dict 返回带有可模板化值的键,则您的模板在 Ansible 2.9 中可能不再按预期工作。

要允许旧行为,请从使用 with_X 切换到使用带过滤器的 loop,如 从 with_X 迁移到 loop 中所述。

命令行

  • Galaxy 令牌文件的位置已从 ~/.ansible_galaxy 更改为 ~/.ansible/galaxy_token。您可以使用 GALAXY_TOKEN_PATH 配置来配置路径和文件名。

已弃用

没有明显的变化

集合加载器更改

在 Ansible 2.9 版本中,从集合导入 PowerShell 或 C# 模块实用程序的方式发生了更改。在 Ansible 2.8 中,实用程序使用以下语法导入

#AnsibleRequires -CSharpUtil AnsibleCollections.namespace_name.collection_name.util_filename
#AnsibleRequires -PowerShell AnsibleCollections.namespace_name.collection_name.util_filename

在 Ansible 2.9 中,这已更改为

#AnsibleRequires -CSharpUtil ansible_collections.namespace_name.collection_name.plugins.module_utils.util_filename
#AnsibleRequires -PowerShell ansible_collections.namespace_name.collection_name.plugins.module_utils.util_filename

集合导入名称的更改还要求所有 C# 实用程序命名空间使用更新的名称格式进行更新。这更加冗长,但旨在确保我们避免不同插件类型之间的插件名称冲突,并使 PowerShell 中的导入方式与 Python 模块的导入方式标准化。

模块

  • win_get_urlwin_uri 模块现在使用默认的 User-Agentansible-httpget 发送请求。这可以通过使用 http_agent 键来更改。

  • apt 模块现在在安装自己的依赖项时尊重 update_cache=false 并跳过缓存更新。显式设置 update_cache=true 或省略参数 update_cache 将导致在安装自己的依赖项时进行缓存更新。

  • Ansible 的 2.9.12 版本将基于文件的任务的默认模式更改为 0o600 & ~umask,前提是用户在基于文件的任务上未指定 mode 参数。这是对 CVE 报告的回应,我们已经重新考虑了。因此,模式更改已在 2.9.13 中恢复,模式现在将默认设置为 0o666 & ~umask,就像 Ansible 的先前版本一样。

  • 如果您在使用 2.9.12 时更改了任何任务以指定权限限制较少,则这些更改在 2.9.13 中将不再需要(但不会造成任何伤害)。

  • 为了避免 CVE-2020-1736 中提出的问题,请在所有接受它的基于文件的任务中指定 mode 参数。

  • dnfyum - 从 2.9.13 版本开始,dnf 模块(以及使用 dnfyum 操作)现在可以正确验证包的 GPG 签名(CVE-2020-14365)。如果您看到类似 Failed to validate GPG signature for [package name] 的错误,请确保您已为正在使用的 DNF 存储库和/或包导入了正确的 GPG 密钥。一种方法是使用 rpm_key 模块。虽然我们不鼓励这样做,但在某些情况下,可能需要禁用 GPG 检查。这可以通过在您的 dnfyum 任务中显式添加 disable_gpg_check: yes 来完成。

_facts 重命名为 _info

Ansible 2.9 将许多模块从 <something>_facts 重命名为 <something>_info,因为这些模块不返回 Ansible 事实。Ansible 事实与特定主机相关。例如,网络接口的配置、Unix 服务器上的操作系统以及 Windows 机器上安装的软件包列表都是 Ansible 事实。已重命名的模块返回的值不是主机独有的。例如,云提供商的帐户信息或区域数据。重命名这些模块应该可以更清楚地了解每组模块提供的返回值类型。

编写模块

  • 模块和 module_utils 文件现在可以使用相对导入来包含其他 module_utils 文件。这对于缩短长导入行很有用,尤其是在集合中。

    在集合中使用相对导入的示例

    # File: ansible_collections/my_namespace/my_collection/plugins/modules/my_module.py
    # Old way to use an absolute import to import module_utils from the collection:
    from ansible_collections.my_namespace.my_collection.plugins.module_utils import my_util
    # New way using a relative import:
    from ..module_utils import my_util
    

    与 Ansible 一起提供的模块和 module_utils 也可以使用相对导入,但节省的程度较小

    # File: ansible/modules/system/ping.py
    # Old way to use an absolute import to import module_utils from core:
    from ansible.module_utils.basic import AnsibleModule
    # New way using a relative import:
    from ...module_utils.basic import AnsibleModule
    

    每个句点 (.) 代表树的一级(相当于文件系统相对链接中的 ../)。

    另请参阅

    Python 相对导入文档 更详细地介绍了如何编写相对导入。

已删除的模块

以下模块已不存在

弃用通知

以下模块将在 Ansible 2.13 中移除。请相应地更新您的剧本。

以下功能将在 Ansible 2.12 中移除。请根据需要更新您的 playbook。

以下功能将在 Ansible 2.13 中移除。请根据需要更新您的 playbook。

对于以下模块,基于 PyOpenSSL 的后端 pyopenssl 已被弃用,并将从 Ansible 2.13 中移除

重命名模块

以下模块已重命名。旧名称已被弃用,并将从 Ansible 2.13 中移除。请根据需要更新您的 playbook。

值得注意的模块更改

  • vmware_cluster 已重构,以便更易于维护/修复错误。 使用三个新的专用模块来配置集群。 使用 vmware_cluster_drs 配置 DRS,使用 vmware_cluster_ha 配置 HA,并使用 vmware_cluster_vsan 配置 vSAN。

  • vmware_dvswitch 接受 folder 参数,以将 dvswitch 放置在用户定义的文件夹中。 此选项使 datacenter 成为可选参数。

  • vmware_datastore_cluster 接受 folder 参数,以将数据存储集群放置在用户定义的文件夹中。 此选项使 datacenter 成为可选参数。

  • mysql_dbdb 参数之外,还返回新的 db_list 参数。 此 db_list 参数指的是数据库名称列表。 db 参数将在 2.13 版中弃用。

  • snow_recordsnow_record_find 现在接受用于 instanceusernamepassword 参数的环境变量。 此更改将这些参数标记为可选。

  • 已弃用的 force 选项已从 win_firewall_rule 中删除。

  • openssl_certificateownca 提供程序会在未显式禁用 ownca_create_authority_key_identifier: no 的情况下创建颁发机构密钥标识符。 这仅适用于 cryptography 后端,如果 cryptography 库可用,则该后端默认选择。

  • openssl_certificateowncaselfsigned 提供程序在未显式禁用 ownca_create_subject_key_identifier: never_create(分别为 selfsigned_create_subject_key_identifier: never_create)的情况下创建主体密钥标识符。 如果 CSR 提供了主体密钥标识符,则将使用该标识符;否则,将从公钥创建该标识符。 这仅适用于 cryptography 后端,如果 cryptography 库可用,则该后端默认选择。

  • openssh_keypair 现在将相同的文件权限和所有权应用于公钥和私钥(两者都获得相同的 modeownergroup 等等)。 如果您需要更改一个密钥的权限/所有权,请在创建后使用 file 来修改它。

插件

已删除的查找插件

  • redis_kv 使用 redis 代替。

移植自定义脚本

没有明显的变化

网络

网络资源模块

Ansible 2.9 引入了第一批网络资源模块。网络设备配置的各个部分可以被认为是该设备提供的资源。网络资源模块的范围被有意地限定为配置单个资源,您可以将它们组合起来作为构建块来配置复杂的网络服务。旧模块在 Ansible 2.9 中已弃用,将在 Ansible 2.13 中删除。您应该扫描上面列出的已弃用模块列表,并在您的剧本中用新的网络资源模块替换它们。有关详细信息,请参阅 Ansible 2.9 中的网络功能

改进的 gather_facts 对网络设备的支持

在 Ansible 2.9 中,gather_facts 关键字现在支持以标准化的键值对收集网络设备事实。您可以将这些网络事实馈送到后续任务中以管理网络设备。您也可以使用新的 gather_network_resources 参数与网络 *_facts 模块(例如 eos_facts)一起使用,以仅返回设备配置的子集。有关示例,请参阅 从网络设备收集事实

2.9 中删除的顶级连接参数

顶级连接参数(如 usernamehostpassword)在 2.9 版本中被删除。

在 Ansible < 2.4 中

- name: example of using top-level options for connection properties
  ios_command:
    commands: show version
    host: "{{ inventory_hostname }}"
    username: cisco
    password: cisco
    authorize: yes
    auth_pass: cisco

将您的剧本更改为连接类型 network_clinetconf,使用标准的 Ansible 连接属性,并在清单中按组设置这些属性。当您更新您的剧本和清单文件时,您可以轻松地将更改为 become 以进行特权升级(在支持它的平台上)。有关更多信息,请参阅 在网络模块中使用 become 指南和 平台文档