netapp.ontap.na_ontap_snapmirror 模块 – NetApp ONTAP 或 ElementSW 管理 SnapMirror

注意

此模块是 netapp.ontap 集合(版本 22.13.0)的一部分。

如果您正在使用 ansible 包,您可能已经安装了这个集合。它不包含在 ansible-core 中。要检查是否已安装,请运行 ansible-galaxy collection list

要安装它,请使用:ansible-galaxy collection install netapp.ontap。您需要其他要求才能使用此模块,详情请参阅要求

要在 playbook 中使用它,请指定:netapp.ontap.na_ontap_snapmirror

netapp.ontap 2.7.0 中的新增功能

概要

  • 为 ONTAP/ONTAP 创建/删除/更新/初始化/中断/重新同步/恢复 SnapMirror 卷/vserver 关系

  • 这包括 SVM 复制,也称为 vserver DR

  • 创建/删除/更新/初始化 ElementSW 和 ONTAP 之间的 SnapMirror 卷关系

  • 修改 ONTAP/ONTAP 和 ElementSW/ONTAP 的 SnapMirror 关系的计划

  • ElementSW 到 ONTAP 关系或反之亦然的前提条件是在 ElementSW UI 中为 ONTAP 集群建立 SnapMirror 端点

  • ElementSW 到 ONTAP 关系或反之亦然的前提条件是在 ElementSW 卷中启用 SnapMirror

  • 对于创建 SnapMirror ElementSW/ONTAP 关系,应存在现有的 ONTAP/ElementSW 关系

  • 如果 relationship_state=active 并且 snapmirror 关系的当前镜像状态已中断,则执行重新同步

  • 如果 relationship_state=active,当前 snapmirror 关系状态为已静默,并且镜像状态为已镜像,则执行恢复

  • 如果 relationship_type=restore,则执行还原,并且在此任务期间不会执行其他操作

要求

执行此模块的主机需要以下要求。

  • Ansible 2.9 或更高版本 - 建议使用 2.12 或更高版本。

  • Python3 - 建议使用 3.9 或更高版本。

  • 当使用 ZAPI 时,建议使用 netapp-lib 2018.11.13 或更高版本(使用 'pip install netapp-lib' 安装),强烈建议使用 netapp-lib 2020.3.12,因为它为连接问题提供了更好的错误报告。

  • 物理或虚拟集群 Data ONTAP 系统,这些模块支持 Data ONTAP 9.1 及更高版本,REST 支持需要 ONTAP 9.6 或更高版本。

参数

参数

注释

cert_filepath

字符串

在 netapp.ontap 20.6.0 中添加

SSL 客户端证书文件 (.pem) 的路径。

不支持 python 2.6。

clean_up_failure

布尔值

在 netapp.ontap 21.20.0 中添加

一个可选参数,用于从中止或失败的还原操作中恢复。

任何临时 RST 关系都会从目标 Vserver 中删除。

仅支持 ZAPI。

选项

  • false ←(默认)

  • true

connection_type

字符串

在 netapp.ontap 2.9.0 中添加

SnapMirror 关系的类型。

elementsw_ontap 或 ontap_elementsw 的前提条件是 ElementSW 卷应将 enableSnapmirror 选项设置为 true。

对于使用 ontap_elementsw,应该存在 elementsw_ontap snapmirror 关系。

选项

  • "ontap_ontap" ←(默认)

  • "elementsw_ontap"

  • "ontap_elementsw"

create_destination

字典

在 netapp.ontap 21.1.0 中添加

需要 ONTAP 9.7 或更高版本。

如果启用并且存在 destination_volume 或 destination_path 包含卷名称,则创建目标卷。

为 SVM DR 创建并对等目标 vserver。

enabled

布尔值

是否创建目标卷或 vserver。

如果存在任何其他子选项,则会自动启用此选项。

选项

  • false

  • true ←(默认)

storage_service

字典

与目标端点关联的存储服务。

enabled

布尔值

是否使用存储服务创建目标端点。

选项

  • false

  • true

enforce_performance

布尔值

是否在目标端点上强制执行存储服务性能。

选项

  • false

  • true

name

字符串

此卷端点的性能服务级别 (PSL)。

选项

  • "value"

  • "performance"

  • "extreme"

tiering

字典

云分层策略。

policy

字符串

云分层策略。

选项

  • "all"

  • "auto"

  • "none"

  • "snapshot-only"

supported

布尔值

允许在 FabricPool 聚合上配置目标端点卷。

仅支持 FlexVol 卷、FlexGroup 卷和一致性组端点。

选项

  • false

  • true

destination_cluster

字符串

在 netapp.ontap 21.1.0 中添加

需要 ONTAP 9.7 或更高版本。

创建 SVM DR 的目标 vserver 或目标卷时必需。

自 21.2.0 版本起已弃用,请使用 destination_endpoint 和 cluster。

destination_endpoint

字典

在 netapp.ontap 21.2.0 中添加

SnapMirror 关系的 目标端点。

cluster

字符串

需要 ONTAP 9.7 或更高版本。

创建 SVM DR 的目标 vserver 或目标卷时必需。

consistency_group_volumes

list / elements=string

需要 ONTAP 9.8 或更高版本。

一致性组端点的必需属性。指定一致性组的 FlexVol 卷列表。

ipspace

字符串

需要 ONTAP 9.8 或更高版本。

可选属性,用于指定 SVM 的 IPSpace。

path

string / required

关系的 目标端点。

格式为 <vserver:volume>、<vserver:>、<vserver:/cg/cg_name>

svm

字符串

SVM 的名称。不确定何时需要此项。

destination_path

字符串

指定 SnapMirror 关系的 目标端点。

自 21.2.0 版本起已弃用,请使用 destination_endpoint 和 path。

destination_volume

字符串

指定 SnapMirror 的 目标卷的名称。

自 21.2.0 版本起已弃用,请使用 source_endpoint 和 path。

destination_vserver

字符串

SnapMirror 的 目标 vserver 的名称。

自 21.2.0 版本起已弃用,请使用 destination_endpoint 和 path,或 svm。

feature_flags

字典

在 netapp.ontap 20.5.0 中添加

启用或禁用新功能。

这可以用于启用实验性功能或禁用破坏向后兼容性的新功能。

支持的键和值如有更改,恕不另行通知。未知键将被忽略。

force_ontap_version

字符串

在 netapp.ontap 21.23.0 中添加

在使用 REST 时覆盖集群 ONTAP 版本。

如果版本与目标集群不匹配,则行为未定义。

当由于权限问题而无法读取集群版本时,这可以作为一种解决方法。请参阅https://github.com/ansible-collections/netapp.ontap/wiki/Known-issues

这应采用 9.10 或 9.10.1 的形式,每个元素都是整数。

use_rest 设置为 auto 时,这可能会根据版本和平台功能强制切换到基于 ZAPI 的方式。

使用 ZAPI 时将被忽略。

hostname

string / required

ONTAP 实例的主机名或 IP 地址。

http_port

integer

使用此端口覆盖默认端口(80 或 443)

https

布尔值

启用和禁用 https。

当使用 REST 时将被忽略,因为只支持 https。

当使用 SSL 证书身份验证时将被忽略,因为它需要 SSL。

选项

  • false ←(默认)

  • true

identity_preservation

字符串

在 netapp.ontap 22.4.0 中添加

指定将源 SVM 的哪个配置复制到目标 SVM。

此属性仅适用于策略类型为“async”的 SVM 数据保护。

仅支持 REST,需要 ONTAP 9.11.1 或更高版本。

选项

  • "full"

  • "exclude_network_config"

  • "exclude_network_and_protocol_config"

identity_preserve

布尔值

在 netapp.ontap 2.9.0 中添加

指定是否将源 Vserver 的身份复制到目标 Vserver。

如果此参数设置为 true,则源 Vserver 的配置也将被复制到目标。

如果参数设置为 false,则只有源 Vserver 的卷和 RBAC 配置被复制到目标。

选项

  • false

  • true

initialize

布尔值

在 netapp.ontap 19.11.0 中添加

指定是否初始化 SnapMirror 关系。

默认值为 True,可以显式设置为 False 以避免初始化 SnapMirror 关系。

选项

  • false

  • true ←(默认)

key_filepath

字符串

在 netapp.ontap 20.6.0 中添加

SSL 客户端密钥文件的路径。

max_transfer_rate

integer

在 netapp.ontap 2.9.0 中添加

指定数据传输的上限,单位为千字节/秒。

默认值为 unlimited,可以显式设置为 0 表示 unlimited。

ontapi

integer

要使用的 ontap api 版本

password

别名:pass

字符串

指定用户的密码。

peer_options

字典

在 netapp.ontap 21.8.0 中添加

对等系统的 IP 地址和连接选项。

如果未指定任何这些选项,则使用相应的源选项。

cert_filepath

字符串

SSL 客户端证书文件 (.pem) 的路径。

force_ontap_version

字符串

在 netapp.ontap 21.23.0 中添加

在使用 REST 时覆盖集群 ONTAP 版本。

如果版本与目标集群不匹配,则行为未定义。

当由于权限问题而无法读取集群版本时,这可以作为一种解决方法。请参阅https://github.com/ansible-collections/netapp.ontap/wiki/Known-issues

这应采用 9.10 或 9.10.1 的形式,每个元素都是整数。

use_rest 设置为 auto 时,这可能会根据版本和平台功能强制切换到基于 ZAPI 的方式。

使用 ZAPI 时将被忽略。

hostname

string / required

ONTAP 实例的主机名或 IP 地址。

http_port

integer

使用此端口覆盖默认端口(80 或 443)

https

布尔值

启用和禁用 https。

选项

  • false

  • true

key_filepath

字符串

SSL 客户端密钥文件的路径。

ontapi

integer

要使用的 ontap api 版本

password

别名:pass

字符串

指定用户的密码。

use_rest

字符串

如果目标系统支持该模块所需的所有资源和属性,则使用 REST API。否则将恢复为 ZAPI。

always – 将始终使用 REST API

never – 将始终使用 ZAPI

auto – 将尝试使用 REST API

username

别名:user

字符串

使用基本身份验证时的用户名。

validate_certs

布尔值

如果设置为 no,则不会验证 SSL 证书。

这应仅在个人控制的站点上使用自签名证书时设置为 False

选项

  • false

  • true

policy

字符串

在 netapp.ontap 2.8.0 中添加

指定应用于此关系的 SnapMirror 策略的名称。

relationship_info_only

布尔值

在 netapp.ontap 20.4.0 中添加

如果 relationship-info-only 设置为 true,则仅删除关系信息。

选项

  • false ←(默认)

  • true

relationship_state

字符串

在 netapp.ontap 20.2.0 中添加

指定是中断 SnapMirror 关系还是建立 SnapMirror 关系。

必须存在状态才能使用此选项。

选项

  • "active" ←(默认)

  • "broken"

relationship_type

字符串

指定 SnapMirror 关系的类型。

对于“restore”,除非指定了“source_snapshot”,否则将还原源卷上的最新快照副本。

还原 SnapMirror 不是幂等的。

使用 REST 时,仅支持“extended_data_protection”和“restore”。

选项

  • "data_protection"

  • "load_sharing"

  • "vault"

  • "restore"

  • "transition_data_protection"

  • "extended_data_protection"

schedule

别名:transfer_schedule

字符串

在 netapp.ontap 22.2.0 中添加

指定当前计划的名称,该计划用于更新 SnapMirror 关系。

创建时可选,可修改。

使用 REST 时,此选项需要 ONTAP 9.11.1 或更高版本。

source_cluster

字符串

在 netapp.ontap 21.1.0 中添加

需要 ONTAP 9.7 或更高版本。

需要在源 SVM 和目标 SVM 之间创建对等关系。

自 21.2.0 版本起已弃用,请使用 source_endpoint 和 cluster。

source_endpoint

字典

在 netapp.ontap 21.2.0 中添加

SnapMirror 关系的 源端点。

cluster

字符串

需要 ONTAP 9.7 或更高版本。

需要在源 SVM 和目标 SVM 之间创建对等关系。

consistency_group_volumes

list / elements=string

需要 ONTAP 9.8 或更高版本。

一致性组端点的必需属性。指定一致性组的 FlexVol 卷列表。

ipspace

字符串

需要 ONTAP 9.8 或更高版本。

可选属性,用于指定 SVM 的 IPSpace。

path

string / required

关系的 源端点。

如果源是 ONTAP 卷(FlexVol 或 FlexGroup),则格式应为 <vserver:volume>

对于 SVM DR,格式应为 <vserver:>

对于一致性组,格式应为 <vserver:/cg/cg_name>

如果源是 ElementSW 卷,则格式应为 <Element_SVIP:/lun/Element_VOLUME_ID>

如果源是 ElementSW 卷,则应启用该卷的 SnapMirror。

svm

字符串

SVM 的名称。不确定何时需要此项。

source_hostname

字符串

已弃用 - 请使用 peer_options

ONTAP 或 ElementSW 集群的源主机名或管理 IP 地址。

如果存在,当状态为 absent 时,关系会在源处释放,然后再在目标处删除。

建议始终在删除之前释放,因此如果知道源主机名,请确保存在此参数。

source_password

字符串

已弃用 - 请使用 peer_options

ONTAP 或 ElementSW 集群的源密码。

如果与目标密码相同,则可选。

source_path

字符串

指定 SnapMirror 关系的 源端点。

如果源是 ONTAP 卷,则格式应为 <[vserver:][volume]> 或 <[[cluster:]//vserver/]volume>

如果源是 ElementSW 卷,则格式应为 <[Element_SVIP]:/lun/[Element_VOLUME_ID]>

如果源是 ElementSW 卷,则应启用该卷的 SnapMirror。

自 21.2.0 版本起已弃用,请使用 source_endpoint 和 path。

source_snapshot

字符串

在 netapp.ontap 20.6.0 中添加

指定要从源还原的快照。

source_username

字符串

已弃用 - 请使用 peer_options

ONTAP 或 ElementSW 集群的源用户名。

如果与目标用户名相同,则可选。

source_volume

字符串

指定 SnapMirror 的 源卷的名称。

自 21.2.0 版本起已弃用,请使用 source_endpoint 和 path。

source_vserver

字符串

SnapMirror 的 源 vserver 的名称。

自 21.2.0 版本起已弃用,请使用 source_endpoint 和 path,或 svm。

state

字符串

指定的 关系是否应该存在。

选项

  • "present" ←(默认)

  • "absent"

transferring_time_out

integer

在 netapp.ontap 21.20.0 中添加

当传输正在进行时(例如在初始化之后)要等待多长时间。单位为秒。

默认值:300

update

布尔值

在 netapp.ontap 20.2.0 中添加

指定仅当 SnapMirror 关系已存在且处于活动状态时才更新 SnapMirror 关系的 目标端点。

默认值为 True。

选项

  • false

  • true ←(默认)

use_rest

字符串

是否使用 REST 或 ZAPI。

always – 如果模块支持 REST,则始终使用 REST API。如果模块不支持 REST,则会发出警告。如果 REST 中不支持模块选项,则会发出错误。

never – 如果模块支持 ZAPI,则始终使用 ZAPI。如果 ZAPI 中不支持 REST 选项,则可能会发出错误。

auto – 如果模块支持 REST 并且支持模块选项,则会尝试使用 REST API。否则将恢复为 ZAPI。

默认值:"auto"

username

别名:user

字符串

这可以是集群范围或 SVM 范围的帐户,具体取决于需要集群级别还是 SVM 级别的 API。

有关更多信息,请阅读文档https://mysupport.netapp.com/NOW/download/software/nmsdk/9.4/

支持两种身份验证方法

  1. 基本身份验证,使用用户名和密码,

  2. SSL 证书身份验证,使用 ssl 客户端证书文件,以及可选的私钥文件。

要使用证书,必须已在 ONTAP 集群中安装该证书,并且必须已启用证书身份验证。

validate_certs

布尔值

如果设置为 no,则不会验证 SSL 证书。

这应仅在个人控制的站点上使用自签名证书时设置为 False

选项

  • false

  • true ←(默认)

validate_source_path

布尔值

在 netapp.ontap 21.21.0 中添加

该关系是根据目标找到的,因为它是唯一的。

默认情况下,会验证源信息,如果存在不匹配,则会报告错误。这意味着目标已被另一个关系使用。

该检查考虑了可能与远程 vserver 名称不同的本地 vserver 名称。

如果检查过于严格,则可以禁用此检查,例如,无条件地删除关系。

选项

  • false

  • true ←(默认)

注释

注意

  • 支持 REST 和 ZAPI。

  • 支持 check_mode。

  • 还原不是幂等的。

  • snapmirror 在目标上运行大多数操作,peer_options 标识源集群。

  • ONTAP 支持用户名/密码或 SSL 证书进行身份验证。

  • ElementSW 仅支持用户名/密码进行身份验证。

  • 以 na_ontap 为前缀的模块旨在支持 ONTAP 存储平台。

  • 默认情况下启用 https,建议使用。要在集群上启用 http,您必须运行以下命令“set -privilege advanced;”“system services web modify -http-enabled true;”

示例

# creates and initializes the snapmirror
- name: Create ONTAP/ONTAP SnapMirror
  netapp.ontap.na_ontap_snapmirror:
    state: present
    source_volume: test_src
    destination_volume: test_dest
    source_vserver: ansible_src
    destination_vserver: ansible_dest
    schedule: hourly
    policy: MirrorAllSnapshots
    max_transfer_rate: 1000
    initialize: False
    hostname: "{{ destination_cluster_hostname }}"
    username: "{{ destination_cluster_username }}"
    password: "{{ destination_cluster_password }}"

# creates and initializes the snapmirror between vservers
- name: Create ONTAP/ONTAP vserver SnapMirror
  netapp.ontap.na_ontap_snapmirror:
    state: present
    source_vserver: ansible_src
    destination_vserver: ansible_dest
    identity_preserve: true
    hostname: "{{ destination_cluster_hostname }}"
    username: "{{ destination_cluster_username }}"
    password: "{{ destination_cluster_password }}"

# existing snapmirror relation with status 'snapmirrored' will be initialized
- name: Inititalize ONTAP/ONTAP SnapMirror
  netapp.ontap.na_ontap_snapmirror:
    state: present
    source_path: 'ansible:test'
    destination_path: 'ansible:dest'
    relationship_state: active
    hostname: "{{ destination_cluster_hostname }}"
    username: "{{ destination_cluster_username }}"
    password: "{{ destination_cluster_password }}"

- name: Delete SnapMirror
  netapp.ontap.na_ontap_snapmirror:
    state: absent
    destination_path: <path>
    relationship_info_only: True
    source_hostname: "{{ source_hostname }}"
    hostname: "{{ destination_cluster_hostname }}"
    username: "{{ destination_cluster_username }}"
    password: "{{ destination_cluster_password }}"

- name: Break SnapMirror
  netapp.ontap.na_ontap_snapmirror:
    state: present
    relationship_state: broken
    destination_path: <path>
    source_hostname: "{{ source_hostname }}"
    hostname: "{{ destination_cluster_hostname }}"
    username: "{{ destination_cluster_username }}"
    password: "{{ destination_cluster_password }}"

- name: Restore SnapMirror volume using location (Idempotency)
  netapp.ontap.na_ontap_snapmirror:
    state: present
    source_path: <path>
    destination_path: <path>
    relationship_type: restore
    source_snapshot: "{{ snapshot }}"
    hostname: "{{ destination_cluster_hostname }}"
    username: "{{ destination_cluster_username }}"
    password: "{{ destination_cluster_password }}"

- name: Set schedule to NULL
  netapp.ontap.na_ontap_snapmirror:
    state: present
    destination_path: <path>
    schedule: ""
    hostname: "{{ destination_cluster_hostname }}"
    username: "{{ destination_cluster_username }}"
    password: "{{ destination_cluster_password }}"

- name: Create SnapMirror from ElementSW to ONTAP
  netapp.ontap.na_ontap_snapmirror:
    state: present
    connection_type: elementsw_ontap
    source_path: '10.10.10.10:/lun/300'
    destination_path: 'ansible_test:ansible_dest_vol'
    schedule: hourly
    policy: MirrorLatest
    hostname: "{{ netapp_hostname }}"
    username: "{{ netapp_username }}"
    password: "{{ netapp_password }}"
    source_hostname: " {{ Element_cluster_mvip }}"
    source_username: "{{ Element_cluster_username }}"
    source_password: "{{ Element_cluster_password }}"

- name: Create SnapMirror from ONTAP to ElementSW
  netapp.ontap.na_ontap_snapmirror:
    state: present
    connection_type: ontap_elementsw
    destination_path: '10.10.10.10:/lun/300'
    source_path: 'ansible_test:ansible_dest_vol'
    policy: MirrorLatest
    hostname: "{{ Element_cluster_mvip }}"
    username: "{{ Element_cluster_username }}"
    password: "{{ Element_cluster_password }}"
    source_hostname: " {{ netapp_hostname }}"
    source_username: "{{ netapp_username }}"
    source_password: "{{ netapp_password }}"

- name: Create SnapMirror relationship (create destination volume)
  tags: create
  netapp.ontap.na_ontap_snapmirror:
    state: present
    source_endpoint:
      cluster: "{{ _source_cluster }}"
      path: "{{ source_vserver + ':' + source_volume }}"
    destination_endpoint:
      cluster: "{{ _destination_cluster }}"
      path: "{{ destination_vserver_VOLDP + ':' + destination_volume }}"
    create_destination:
      enabled: true
    hostname: "{{ destination_hostname }}"
    username: "{{ username }}"
    password: "{{ password }}"
    https: true
    validate_certs: false

- name: Create SnapMirror relationship - SVM DR (creating and peering destination svm)
  tags: create_svmdr
  netapp.ontap.na_ontap_snapmirror:
    state: present
    source_endpoint:
      cluster: "{{ _source_cluster }}"
      path: "{{ source_vserver + ':' }}"
    destination_endpoint:
      cluster: "{{ _destination_cluster }}"
      path: "{{ destination_vserver_SVMDR + ':' }}"
    create_destination:
      enabled: true
    hostname: "{{ destination_hostname }}"
    username: "{{ username }}"
    password: "{{ password }}"
    https: true
    validate_certs: false

作者

  • NetApp Ansible 团队 (@carchi8py)