Anons79 Mini Shell

Directory : /lib/python2.7/site-packages/ansible/modules/storage/netapp/
Upload File :
Current File : //lib/python2.7/site-packages/ansible/modules/storage/netapp/na_ontap_snapmirror.pyo

�
�Udac@`s7ddlmZmZmZeZidd6dgd6dd6ZdZd	Zd
Z	ddl
Z
ddlZddlm
Z
dd
lmZddljjZddlmZddlmZej�Zej�ZyddlZWnek
r�eZnXde fd��YZ!d�Z"e#dkr3e"�ndS(i(tabsolute_importtdivisiontprint_functions1.1tmetadata_versiontpreviewtstatust	certifiedtsupported_bys�
author: NetApp Ansible Team (@carchi8py) <[email protected]>
description:
  - Create/Delete/Initialize SnapMirror volume/vserver relationships for ONTAP/ONTAP
  - Create/Delete/Initialize SnapMirror volume relationship between ElementSW and ONTAP
  - Modify schedule for a SnapMirror relationship for ONTAP/ONTAP and ElementSW/ONTAP
  - Pre-requisite for ElementSW to ONTAP relationship or vice-versa is an established SnapMirror endpoint for ONTAP cluster with ElementSW UI
  - Pre-requisite for ElementSW to ONTAP relationship or vice-versa is to have SnapMirror enabled in the ElementSW volume
  - For creating a SnapMirror ElementSW/ONTAP relationship, an existing ONTAP/ElementSW relationship should be present
extends_documentation_fragment:
  - netapp.na_ontap
module: na_ontap_snapmirror
options:
  state:
    choices: ['present', 'absent']
    description:
      - Whether the specified relationship should exist or not.
    default: present
  source_volume:
    description:
      - Specifies the name of the source volume for the SnapMirror.
  destination_volume:
    description:
      - Specifies the name of the destination volume for the SnapMirror.
  source_vserver:
    description:
      - Name of the source vserver for the SnapMirror.
  destination_vserver:
    description:
      - Name of the destination vserver for the SnapMirror.
  source_path:
    description:
      - Specifies the source endpoint of the SnapMirror relationship.
      - If the source is an ONTAP volume, format should be <[vserver:][volume]> or <[[cluster:]//vserver/]volume>
      - If the source is an ElementSW volume, format should be <[Element_SVIP]:/lun/[Element_VOLUME_ID]>
      - If the source is an ElementSW volume, the volume should have SnapMirror enabled.
  destination_path:
    description:
      - Specifies the destination endpoint of the SnapMirror relationship.
  relationship_type:
    choices: ['data_protection', 'load_sharing', 'vault', 'restore', 'transition_data_protection',
    'extended_data_protection']
    description:
      - Specify the type of SnapMirror relationship.
  schedule:
    description:
      - Specify the name of the current schedule, which is used to update the SnapMirror relationship.
      - Optional for create, modifiable.
  policy:
    description:
      - Specify the name of the SnapMirror policy that applies to this relationship.
    version_added: "2.8"
  source_hostname:
    description:
     - Source hostname or management IP address for ONTAP or ElementSW cluster.
     - Required for SnapMirror delete
  source_username:
    description:
     - Source username for ONTAP or ElementSW cluster.
     - Optional if this is same as destination username.
  source_password:
    description:
     - Source password for ONTAP or ElementSW cluster.
     - Optional if this is same as destination password.
  connection_type:
    description:
     - Type of SnapMirror relationship.
     - Pre-requisite for either elementsw_ontap or ontap_elementsw the ElementSW volume should have enableSnapmirror option set to true.
     - For using ontap_elementsw, elementsw_ontap snapmirror relationship should exist.
    choices: ['ontap_ontap', 'elementsw_ontap', 'ontap_elementsw']
    default: ontap_ontap
    version_added: '2.9'
  max_transfer_rate:
    description:
     - Specifies the upper bound, in kilobytes per second, at which data is transferred.
     - Default is unlimited, it can be explicitly set to 0 as unlimited.
    type: int
    version_added: '2.9'
  identity_preserve:
    description:
     - Specifies whether or not the identity of the source Vserver is replicated to the destination Vserver.
     - If this parameter is set to true, the source Vserver's configuration will additionally be replicated to the destination.
     - If the parameter is set to false, then only the source Vserver's volumes and RBAC configuration are replicated to the destination.
    type: bool
    version_added: '2.9'
short_description: "NetApp ONTAP or ElementSW Manage SnapMirror"
version_added: "2.7"
s�

    # creates and initializes the snapmirror
    - name: Create ONTAP/ONTAP SnapMirror
      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
        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
      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: Initialize ONTAP/ONTAP SnapMirror
      na_ontap_snapmirror:
        state: present
        source_path: 'ansible:test'
        destination_path: 'ansible:dest'
        hostname: "{{ destination_cluster_hostname }}"
        username: "{{ destination_cluster_username }}"
        password: "{{ destination_cluster_password }}"

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

    - name: Set schedule to NULL
      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
      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
      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 }}"
t
N(t
AnsibleModule(t	to_native(tNaElementSWModule(tNetAppModuletNetAppONTAPSnapmirrorcB`s�eZdZd�Zd�Zdd�Zdd�Zd�Zd�Z	d�Z
d�Zd	�Zd
�Z
dd�Zd�Zd
�Zd�Zd�Zd�Zd�Zd�Zed��Zdd�Zd�Zd�Zd�Zd�ZRS(s'
    Class with Snapmirror methods
    c&C`s7tj�|_|jjtdtdtdddddgdd�d	tdtdd�d
tdtdd�dtdtdd�dtdtdd�d
tdtdd�dtdtdd�dtdtdd�dtdtdd�dtdtdddddddddg�dtdtdd�dtdtddddddgdd�dtdtdd�dtdtdddt�d tdtdd!�d"tdtdd#���td$|jd%ddgd	d
gfd&t�|_t	�|_
|j
j|jj�|_
d|_|j
jd�d.krWttkrW|jjd'd(�qWnttkry|jjd'd)�n|j
jd�dkr�tjd*|j�|_n�|j
jd�r�|j
d|jjd+<n|j
jd�r|j
d|jjd,<n|j
d|jjd-<tjd*|j�|_dS(/Ntstatetrequiredttypetstrtchoicestpresenttabsenttdefaulttsource_vservertdestination_vservert
source_volumetdestination_volumetsource_pathtdestination_pathtscheduletpolicytrelationship_typetdata_protectiontload_sharingtvaulttrestorettransition_data_protectiontextended_data_protectiontsource_hostnametconnection_typetontap_ontaptelementsw_ontaptontap_elementswtsource_usernametsource_passwordtno_logtmax_transfer_ratetinttidentity_preservetboolt
argument_spectrequired_togethertsupports_check_modetmsgs)Unable to import the SolidFire Python SDKs(the python NetApp-Lib module is requiredtmoduletusernametpasswordthostname(R(R)(tnetapp_utilstna_ontap_host_argument_specR1tupdatetdicttFalsetTrueR	R5Rt	na_helpertset_parameterstparamst
parameterstNonet
source_servertgett
HAS_SF_SDKt	fail_jsontHAS_NETAPP_LIBtsetup_na_ontap_zapitserver(tself((sV/usr/lib/python2.7/site-packages/ansible/modules/storage/netapp/na_ontap_snapmirror.pyt__init__�sZ'				cC`s�|dkrT|jd|jjd<|jd|jjd<|jd|jjd<nT|dkr�|jd|jjd<|jd|jjd<|jd|jjd<ntjd	|j�}t|�}||fS(
NtsourceR%R8R*R6R+R7tdestinationR5(RBR5RAR9tcreate_sf_connectionR(RKtkindtelemtelementsw_helper((sV/usr/lib/python2.7/site-packages/ansible/modules/storage/netapp/na_ontap_snapmirror.pytset_element_connection
scC`s�tjjd�}tjjd�}tjjd�}|dkrR|jd}n|jd|�|j|�|j|�|S(s�
        Compose NaElement object to query current SnapMirror relations using destination-path
        SnapMirror relation for a destination path is unique
        :return: NaElement object for SnapMirror-get-iter
        ssnapmirror-get-itertqueryssnapmirror-infoRsdestination-locationN(R9tzapit	NaElementRCRBt
add_new_childtadd_child_elem(RKRNtsnapmirror_get_iterRTtsnapmirror_info((sV/usr/lib/python2.7/site-packages/ansible/modules/storage/netapp/na_ontap_snapmirror.pyRYs

cC`sj|j|�}t�}y|jj|dt�}WnBtjjk
rx}|jj	ddt
|�dtj��nX|j
d�rft|jd��dkrf|j
d�j
d�}|jd	�|d
<|jd�|d<|jd
�|d
<|jd�|d<|jd�|d<|j
d�rEt|jd��|d<n|d
dkrbd|d
<n|SdS(s�
        Get current SnapMirror relations
        :return: Dictionary of current SnapMirror details if query successful, else None
        tenable_tunnelingR4s"Error fetching snapmirror info: %st	exceptionsnum-recordsisattributes-listssnapmirror-infosmirror-statetmirror_statesrelationship-statusRRRsrelationship-typetrelationshipsmax-transfer-rateR-tN(RYR<RJtinvoke_successfullyR>R9RUt
NaApiErrorR5RGR
t	tracebackt
format_exctget_child_by_nameR.tget_child_contentRC(RKRNRYt	snap_infotresultterrorRZ((sV/usr/lib/python2.7/site-packages/ansible/modules/storage/netapp/na_ontap_snapmirror.pytsnapmirror_get*s,		
cC`sD|j�tjjd�}tjjd�}tjjd�}|jd|jd�|jd|jd�|j|�tjjd�}|j|�|j|�y|jj|t	�}WnOtjj
k
r}|jjd	d
|jdt
|�fdtj��nX|jd�r@t|jd��d
kr@t	StS(sm
        Validate existence of source volume
        :return: True if volume exists, False otherwise
        svolume-get-itersvolume-attributessvolume-id-attributestnameRsvserver-nameRRTR4s,Error fetching source volume details %s : %sR\snum-recordsi(tset_source_cluster_connectionR9RURVRWRBRXRDR`R>RaR5RGR
RbRcRdR.ReR=(RKtvolume_infotvolume_attributestvolume_id_attributesRTRgRh((sV/usr/lib/python2.7/site-packages/ansible/modules/storage/netapp/na_ontap_snapmirror.pytcheck_if_remote_volume_existsFs&



*cC`s�|jjd�rI|jjd�rI|j�sI|jjdd�qIni|jdd6|jdd6}tjjjd	|�}|jjd
�r�|j	d|jd
�n|jjd�r�|j	d|jd�n|jjd
�r|j	d
|jd
�n|jjd�r9|j	dt
|jd��n|jjd�rk|j	dt
|jd��ny$|jj|dt
�|j�WnBtjjk
r�}|jjddt|�dtj��nXdS(s2
        Create a SnapMirror relationship
        R%RR4sASource volume does not exist. Please specify a volume that existsRssource-locationRsdestination-locationssnapmirror-createRsrelationship-typeRRR-smax-transfer-rateR/sidentity-preserveR[sError creating SnapMirror %sR\N(RBRERoR5RGR9RURVtcreate_node_with_childrenRWRRJR`R>tsnapmirror_initializeRaR
RbRc(RKtoptionstsnapmirror_createRh((sV/usr/lib/python2.7/site-packages/ansible/modules/storage/netapp/na_ontap_snapmirror.pyRsas,$  cC`s�|jjd�r,|jd|jjd<n|jjd�rX|jd|jjd<n|jd|jjd<tjd|j�|_dS(	s^
        Setup ontap ZAPI server connection for source hostname
        :return: None
        R*R6R+R7R%R8R5N(RBRER5RAR9RIRD(RK((sV/usr/lib/python2.7/site-packages/ansible/modules/storage/netapp/na_ontap_snapmirror.pyRk|scC`s�|s1|jjd�s1|jjdd�q1n|j�|dkrT|j�n|s�|j�|j�r�|j�q�n|j	�dS(s
        Delete a SnapMirror relationship
        #1. Quiesce the SnapMirror relationship at destination
        #2. Break the SnapMirror relationship at the destination
        #3. Release the SnapMirror at source
        #4. Delete SnapMirror at destination
        R%R4slMissing parameters for delete: Please specify the source cluster hostname to release the SnapMirror relationR R!N(sload_sharingsvault(
RBRER5RGtsnapmirror_quiescetsnapmirror_breakRktget_destinationtsnapmirror_releasetsnapmirror_delete(RKtis_hciR((sV/usr/lib/python2.7/site-packages/ansible/modules/storage/netapp/na_ontap_snapmirror.pytdelete_snapmirror�s


cC`s�i|jdd6}tjjjd|�}y|jj|dt�WnBtjjk
r�}|j	j
ddt|�dtj
��nXdS(	sd
        Quiesce SnapMirror relationship - disable all future transfers to this destination
        Rsdestination-locationssnapmirror-quiesceR[R4sError Quiescing SnapMirror : %sR\N(RBR9RURVRpRJR`R>RaR5RGR
RbRc(RKRrRtRh((sV/usr/lib/python2.7/site-packages/ansible/modules/storage/netapp/na_ontap_snapmirror.pyRt�s
cC`s�i|jdd6}tjjjd|�}y|jj|dt�WnBtjjk
r�}|j	j
ddt|�dtj
��nXdS(	sG
        Delete SnapMirror relationship at destination cluster
        Rsdestination-locationssnapmirror-destroyR[R4sError deleting SnapMirror : %sR\N(RBR9RURVRpRJR`R>RaR5RGR
RbRc(RKRrRxRh((sV/usr/lib/python2.7/site-packages/ansible/modules/storage/netapp/na_ontap_snapmirror.pyRx�s
cC`s�|dkr|jd}ni|d6}tjjjd|�}y|jj|dt�WnBtjj	k
r�}|j
jddt|�dt
j��nXdS(	sF
        Break SnapMirror relationship at destination cluster
        Rsdestination-locationssnapmirror-breakR[R4s+Error breaking SnapMirror relationship : %sR\N(RCRBR9RURVRpRJR`R>RaR5RGR
RbRc(RKRNRrRuRh((sV/usr/lib/python2.7/site-packages/ansible/modules/storage/netapp/na_ontap_snapmirror.pyRu�s

cC`s�i|jdd6}tjjjd|�}y|jj|dt�WnBtjjk
r�}|j	j
ddt|�dtj
��nXdS(	sE
        Release SnapMirror relationship from source cluster
        Rsdestination-locationssnapmirror-releaseR[R4s,Error releasing SnapMirror relationship : %sR\N(RBR9RURVRpRDR`R>RaR5RGR
RbRc(RKRrRwRh((sV/usr/lib/python2.7/site-packages/ansible/modules/storage/netapp/na_ontap_snapmirror.pyRw�s
cC`s�i|jdd6}tjjjd|�}y|jj|dt�WnBtjjk
r�}|j	j
ddt|�dtj
��nXdS(	s=
        Abort a SnapMirror relationship in progress
        Rsdestination-locationssnapmirror-abortR[R4s+Error aborting SnapMirror relationship : %sR\N(RBR9RURVRpRJR`R>RaR5RGR
RbRc(RKRrtsnapmirror_abortRh((sV/usr/lib/python2.7/site-packages/ansible/modules/storage/netapp/na_ontap_snapmirror.pyR{�s
cC`s�|j�}|ddkr�d}|jjd�rd|jddkrdd}i|jdd6}ni|jd	d
6}tjjj||�}y|jj|dt	�Wq�tjj
k
r�}|jjdd
t
|�dtj��q�XndS(sB
        Initialize SnapMirror based on relationship type
        R]tsnapmirroredssnapmirror-initializeRR ssnapmirror-initialize-ls-setRssource-locationRsdestination-locationR[R4s"Error initializing SnapMirror : %sR\N(RiRBRER9RURVRpRJR`R>RaR5RGR
RbRc(RKtcurrenttinitialize_zapiRrtsnapmirror_initRh((sV/usr/lib/python2.7/site-packages/ansible/modules/storage/netapp/na_ontap_snapmirror.pyRq�s %
cC`si|jdd6}tjjjd|�}|jd�dk	r]|jd|jd��n|jd�r�|jd|jd��n|jd�r�|jdt|jd���ny|j	j
|dt�WnBtjjk
r}|j
jd	d
t|�dtj��nXdS(
s6
        Modify SnapMirror schedule or policy
        Rsdestination-locationssnapmirror-modifyRRR-smax-transfer-rateR[R4s2Error modifying SnapMirror schedule or policy : %sR\N(RBR9RURVRpRERCRWRRJR`R>RaR5RGR
RbRc(RKtmodifyRrtsnapmirror_modifyRh((sV/usr/lib/python2.7/site-packages/ansible/modules/storage/netapp/na_ontap_snapmirror.pyR�s "
cC`s�i|jdd6}tjjjd|�}y|jj|dt�}WnBtjjk
r�}|j	j
ddt|�dtj
��nXdS(	s5
        Update data in destination endpoint
        Rsdestination-locationssnapmirror-updateR[R4sError updating SnapMirror : %sR\N(RBR9RURVRpRJR`R>RaR5RGR
RbRc(RKRrtsnapmirror_updateRgRh((sV/usr/lib/python2.7/site-packages/ansible/modules/storage/netapp/na_ontap_snapmirror.pyR�s

cC`sV|jddkrv|jjd�s7|jjd�rv|jjd�s]|jjd�rR|jjdd�qRn�|jjd�r
|jjd�s�|jjd	�r�|jjdd
�n|jdd|jd|jd<|jd	d|jd|jd<nE|jjd�rR|jdd|jd<|jd	d|jd<nd
S(s�
        Validate parameters and fail if one or more required params are missing
        Update source and destination path from vserver and volume parameters
        RRRRR4s3Missing parameters: Source path or Destination pathRRRsAMissing parameters: source vserver or destination vserver or botht:RN(RBRER5RG(RK((sV/usr/lib/python2.7/site-packages/ansible/modules/storage/netapp/na_ontap_snapmirror.pytcheck_parameters+s$&&#cC`sd}tjjd�}tjjd�}tjjd�}|jd|jd�|j|�|j|�y|jj|dt	�}WnBtjj
k
r�}|jjddt
|�d	tj��nX|jd
�r�t|jd
��dkr�t	SdS(Nssnapmirror-get-destination-iterRTssnapmirror-destination-infosdestination-locationRR[R4s/Error fetching snapmirror destinations info: %sR\snum-recordsi(RCR9RURVRWRBRXRDR`R>RaR5RGR
RbRcRdR.Re(RKRgtrelease_getRTtsnapmirror_dest_infoRh((sV/usr/lib/python2.7/site-packages/ansible/modules/storage/netapp/na_ontap_snapmirror.pyRv>s 

cC`stjddd|�S(Ntpatterns0\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\/lun\/[0-9]+tstring(tretmatch(tvalue((sV/usr/lib/python2.7/site-packages/ansible/modules/storage/netapp/na_ontap_snapmirror.pyt"element_source_path_format_matchesPsRMcC`s�d	}|dkr'|jjd�}n!|dkrH|jjd�}n|d	kr{|jjdd||jdf�n5tj|�d	kr�|jjdd||f�n|j|�\}}|j||�|j	||�d	S(
sC
        Validate all ElementSW cluster parameters required for managing the SnapMirror relationship
        Validate if both source and destination paths are present
        Validate if source_path follows the required format
        Validate SVIP
        Validate if ElementSW volume exists
        :return: None
        RNRRMRR4s@Error: Missing required parameter %s_path for connection_type %sR&s�Error: invalid %s_path %s. If the path is a ElementSW cluster, the value should be of the format <Element_SVIP>:/lun/<Element_VOLUME_ID>N(
RCRBRER5RGR
R�RStvalidate_elementsw_svipt check_if_elementsw_volume_exists(RKRPtpathRRRQ((sV/usr/lib/python2.7/site-packages/ansible/modules/storage/netapp/na_ontap_snapmirror.pytcheck_elementsw_parametersUs	cC`s�d}y|j�}Wn8tjjk
rP}|jjdddt|��nX|r�|jj	r�|jj	}|j
d�d}||kr�|jjdd�q�ndS(sG
        Validate ElementSW cluster SVIP
        :return: None
        R4sError fetching SVIPR\R�isError: Invalid SVIPN(RCtget_cluster_infot	solidfiretcommontApiServerErrorR5RGR
tcluster_infotsviptsplit(RKR�RQRgterrtcluster_svipR�((sV/usr/lib/python2.7/site-packages/ansible/modules/storage/netapp/na_ontap_snapmirror.pyR�ps#cC`s�d|jd�d}}y|jt|��}Wn8tjjk
rm}|jjdddt	|��nX|dkr�|jjdd�ndS(sO
        Check if remote ElementSW volume exists
        :return: None
        t/i����R4sError fetching Volume detailsR\s<Error: Source volume does not exist in the ElementSW clusterN(
RCR�tvolume_id_existsR.R�R�R�R5RGR
(RKR�RRt	volume_idtvol_idR�((sV/usr/lib/python2.7/site-packages/ansible/modules/storage/netapp/na_ontap_snapmirror.pyR��s#cC`sAtj|j�}tjd|jd|�}tj||�dS(s�
        Fetch admin vserver for the given cluster
        Create and Autosupport log event with the given module name
        :param event_name: Name of the event log
        :return: None
        R5tvserverN(R9tget_cserverRJRIR5t
ems_log_event(RKt
event_nametresultstcserver((sV/usr/lib/python2.7/site-packages/ansible/modules/storage/netapp/na_ontap_snapmirror.pytasup_log_for_cserver�scC`s|jd�|jddkrE|jjd�dkrE|j�n2|jjd�dkrm|jd�n
|j�|jddkr�|jjd�dkr�|j|jd�}|dkr�|jjd	d
�q�n|j�}|j	j
||j�}|j	j||j�}t}|dkr8|j
�n�|dkr�|d
dkra|j�q�|jjd�dkr�t}n|j||d�ne|r�|j|�n|r�|ddkr�|j�t|j	_n|jddkr�|j�n|jjd|j	j�dS(s,
        Apply action to SnapMirror
        tna_ontap_snapmirrorRRR&R(R)RNRR4s�Error: creating an ONTAP to ElementSW snapmirror relationship requires an established SnapMirror relation from ElementSW to ONTAP clustertcreatetdeleteRttransferringR^R]R|tchangedN(R�RBRER�R�RiRCR5RGR?t
get_cd_actiontget_modified_attributesR=RsR{R>RzR�RqR�R�t	exit_json(RKtcurrent_elementsw_ontapR}t	cd_actionR�telement_snapmirror((sV/usr/lib/python2.7/site-packages/ansible/modules/storage/netapp/na_ontap_snapmirror.pytapply�s<
+

+

	

N(t__name__t
__module__t__doc__RLRSRCRYRiRoRsRkRzRtRxRuRwR{RqR�R�R�RvtstaticmethodR�R�R�R�R�R�(((sV/usr/lib/python2.7/site-packages/ansible/modules/storage/netapp/na_ontap_snapmirror.pyR
�s2	8	
																cC`st�}|j�dS(sExecute actionN(R
R�(t
community_obj((sV/usr/lib/python2.7/site-packages/ansible/modules/storage/netapp/na_ontap_snapmirror.pytmain�s	t__main__($t
__future__RRRRt
__metaclass__tANSIBLE_METADATAt
DOCUMENTATIONtEXAMPLEStRETURNR�Rbtansible.module_utils.basicR	tansible.module_utils._textR
tansible.module_utils.netapptmodule_utilstnetappR9t,ansible.module_utils.netapp_elementsw_moduleRt"ansible.module_utils.netapp_moduleRthas_netapp_libRHt
has_sf_sdkRFtsolidfire.commonR�tImportErrorR=tobjectR
R�R�(((sV/usr/lib/python2.7/site-packages/ansible/modules/storage/netapp/na_ontap_snapmirror.pyt<module>s2


ZV

��	

Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]