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",

命名块

块现在可以命名,这样可以避免使用难看的 # this block is for… 注释。

**新增** 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 指定代理主机。

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