Ansible 2.3 移植指南

本节讨论 Ansible 2.2 和 Ansible 2.3 之间的行为变更。

目的是帮助您更新剧本、插件和 Ansible 基础设施的其他部分,使其与 Ansible 的这个版本兼容。

建议您阅读此页面以及 Ansible 2.3 的变更日志,以了解您可能需要进行的更新。

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

剧本

重构异步以支持操作插件

在 Ansible 2.2(以及可能更早的版本)中,async: 关键字不能与操作插件(如 service)一起使用。此限制已在 Ansible 2.3 中移除。

新功能 Ansible 2.3

- name: Install nginx asynchronously
  service:
    name: nginx
    state: restarted
  async: 45

OpenBSD 版本信息

在 Ansible 2.2 及更早版本中,OpenBSD 主机上的 ansible_distribution_releaseansible_distribution_version 信息是反转的。现在已更改,使版本包含数字部分,而版本发布包含发行版的名称。

旧功能 Ansible 2.2(及更早版本)

"ansible_distribution": "OpenBSD"
"ansible_distribution_release": "6.0",
"ansible_distribution_version": "release",

新功能 Ansible 2.3

"ansible_distribution": "OpenBSD",
"ansible_distribution_release": "release",
"ansible_distribution_version": "6.0",

命名块

块现在可以有名称,这使您可以避免使用难看的 # 此块用于… 注释。

新功能 Ansible 2.3

- name: Block test case
  hosts: localhost
  tasks:
   - name: Attempt to setup foo
     block:
       - debug: msg='I execute normally'
       - command: /bin/false
       - debug: msg='I never execute, cause ERROR!'
     rescue:
       - debug: msg='I caught an error'
       - command: /bin/false
       - debug: msg='I also never execute :-('
     always:
       - debug: msg="this always executes"

使用多个标签

在命令行上多次指定 --tags(或 --skip-tags)会导致最后指定的标签覆盖所有其他指定的标签。此行为已弃用。将来,如果您多次指定 –tags,这些标签将合并在一起。从现在开始,在一条命令行上多次使用 --tags 将会发出弃用警告。在 ansible.cfg 文件中将 merge_multiple_cli_tags 选项设置为 True 将启用新行为。

在 2.4 中,默认行为将是合并标签。您可以通过配置选项启用旧的覆盖行为。在 2.5 中,多个 --tags 选项将合并,无法恢复到旧的行为。

其他注意事项

以下是更新时可能遇到的几种罕见情况。这些情况主要是由更严格的解析器验证以及对以前忽略的错误的捕获造成的。

  • 使 any_errors_fatal 可从剧本继承到任务,以及两者之间的所有其他对象。

模块

此版本中没有重大变更。

已移除模块

此版本中没有重大变更。

弃用通知

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

  • ec2_vpc

  • cl_bond

  • cl_bridge

  • cl_img_install

  • cl_interface

  • cl_interface_policy

  • cl_license

  • cl_ports

  • nxos_mtu 请使用 nxos_system 替代

注意

这些模块在当前版本中可能不再有文档。如果您需要了解它们是如何工作的以移植您的剧本,请参阅 Ansible 2.3 模块文档

值得注意的模块变更

AWS lambda

先前忽略的变更,这些变更只影响一个参数。现有部署可能存在此错误修复会应用的未完成变更。

挂载

挂载:一些修复程序可确保绑定挂载在每次剧本运行时不会被挂载。

插件

此版本中没有重大变更。

移植自定义脚本

此版本中没有重大变更。

网络

网络模块操作方式已经发生了一些变更。

剧本仍然应该使用 connection: local

以下变更适用于

  • dellos6

  • dellos9

  • dellos10

  • eos

  • ios

  • iosxr

  • junos

  • sros

  • vyos

顶级连接参数弃用

旧功能 Ansible 2.2

- 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

将导致

[WARNING]: argument username has been deprecated and will be removed in a future version
[WARNING]: argument host has been deprecated and will be removed in a future version
[WARNING]: argument password has been deprecated and will be removed in a future version

新功能 Ansible 2.3

- name: Gather facts
  eos_facts:
    gather_subset: all
    provider:
      username: myuser
      password: "{{ networkpassword }}"
      transport: cli
      host: "{{ ansible_host }}"

ProxyCommand 替代 delegate_to

Ansible 2.3 中用于网络模块的新连接框架使用 cli 传输,不再支持使用 delegate_to 指令。为了通过 cli 传输使用堡垒或中间跳转主机连接到网络设备,网络模块现在支持使用 ProxyCommand

要使用 ProxyCommand,请在 Ansible 库存文件中配置代理设置,以通过 ansible_ssh_common_args 指定代理主机。

有关如何执行此操作的详细信息,请参阅 网络代理指南