copies.psm1


  
.(commonLib) 

<#
 
Function Get-XtremCopies {
    [cmdletbinding()]
 
    Param (
        [parameter()]
        $XtremClusterName = (Get-XtremDefaultSession)._XtremClusterName,
         
        [parameter(Mandatory = $true)]
        [ValidateSet('ConsistencyGroup', 'Volume', 'SnapshotSet')]
        [string]$Type,
         
        [Parameter()]
        $FromVolumeList,
         
        [Parameter()]
        [AllowNull()]
        [System.Nullable[Int]]$FromConsistencyGroupId,
         
        [Parameter()]
        [AllowNull()]
        [System.Nullable[Int]]$FromSnapshotSetId,
         
        [Parameter()]
        [string]$ProtectionCopyName,
         
        [Parameter()]
        [string]$ProtectionCopyVolSuffix,
         
        [Parameter()]
        [object]$Session = (Get-XtremDefaultSession),
         
        [Parameter()]
        [switch]$ShowRest
         
    )
     
 
    TODO
    http://system-arch1.xiolab.lab.emc.com/sysarch/v6.2.1/restdoc_x.html
    Show snapshot sets(snap-sets) [SnapSet] /types/snap-sets/
    Show copies(consistency-group-copies) [SnapSet] /types/consistency-group-copies/<id/guid>
    Show copies(volume-copies) [SnapSet] /types/volume-copies/<id/guid>
 
    PRD
    3.1.1 Get-XtremCopies
        Displays the list of copies related to a given object.
        Returns all objects in the same VSG. Returns protection ad repurpose copies.
        Add support for ProtectionOnly flag – returns only RO copies.
 
        The command should support all input parameters as defined in REST.
        $GetXtremCopiesDefaultProperties = (‘name’, ‘index’, ‘size’, ‘creation-time’, ‘type’, ‘last-refresh-time’)
 
 
}
     
    #>

Function New-XtremProtectionCopy {
    [cmdletbinding()]
    [Alias('xmsCopyCreateProtectionCopy')]
    Param (
        [Parameter()]
        [ValidatePattern("^[^\[\]&\(\)`";,<>'/]+$")] 
        [string]$ProtectionCopyName,
        [parameter(Mandatory = $true)]
        [ValidateSet('ConsistencyGroup', 'Volume', 'SnapshotSet')]
        [string]$Type,
        [Parameter()]
        [Argumentcompleter( { doComplete $args 'volumes' name })] 
        $FromVolumeList,
        [Parameter()]
        [AllowNull()]
        [Argumentcompleter( { doComplete $args 'consistency-groups' name })] 
        $FromConsistencyGroupId,
        [Parameter()]
        [AllowNull()]
        [Argumentcompleter( { doComplete $args 'snapshot-sets' name })] 
        $FromSnapshotSetId,
        [Parameter()]
        [string]$ProtectionCopyVolSuffix,
        [Parameter()]
        [object]$Session =  (Get-XtremDefaultSession),
        [parameter()]
        $XtremClusterName =  (Get-XtremDefaultSession)._XtremClusterName,
        [Parameter()]
        [switch]$ShowRest
        
    )
    initCommand
    # validate type and its mandatory parameters.
    $BodyList = @{ }
    $IsClusterX2 = $false;
    
    $ClusterType = $Session._XtremClusterTypeByName.$XtremClusterName
    if ($ClusterType -eq 'X2') {
        $Route = '/types/snapshots'
        $IsClusterX2 = $true;
    } else {
        $Route = '/types/snapshots'
    }
    
    
    switch ($Type)
    {
        "ConsistencyGroup"
        {
            if ($FromConsistencyGroupId -eq $null)
            {
                throw "Missing mandatory parameter ConsistencyGroupId"
            }
            
            AddIfExists -name "consistency-group-id" -value $FromConsistencyGroupId -list $BodyList
            AddIfExists -name "snapshot-set-name" -value $ProtectionCopyName -list $BodyList
            AddIfExists -name "snap-suffix" -value $ProtectionCopyVolSuffix -list $BodyList
        }
        "Volume" {
            if ($FromVolumeList -eq $null)
            {
                throw "Missing mandatory parameter VolumeList"
            }
            $VolumeName = "[{0}]" -f $FromVolumeList;
            AddIfExists -name "volume-list" -value $VolumeName -list $BodyList
            AddIfExists -name "snapshot-set-name" -value $ProtectionCopyName -list $BodyList
            AddIfExists -name "snap-suffix" -value $ProtectionCopyVolSuffix -list $BodyList
            
        }
        "SnapshotSet" {
            if ($FromSnapshotSetId -eq $null)
            {
                throw "Missing mandatory parameter SnapshotSetId"
            }
            AddIfExists -name "snapshot-set-id" -value $FromSnapshotSetId -list $BodyList
            AddIfExists -name "snapshot-set-name" -value $ProtectionCopyName -list $BodyList
            AddIfExists -name "snap-suffix" -value $ProtectionCopyVolSuffix -list $BodyList
            
        }
    }
    
    AddIfExists -name "snapshot-type" -value "readonly" -list $BodyList
    
    AddIfExists -name "cluster-id" -value $XtremClusterName -list $BodyList
    $Body = BuildXtremJson -list $BodyList
    
    
    $result = NewXtremRequest -Method POST -Endpoint $Route -Session $Session -XtremClusterName $XtremClusterName -Body $Body -ObjectSelection $ObjectSelection -ShowRest:$ShowRest.IsPresent
    
    finalizeCommand
    return $result
}


Function New-XtremRepurposeCopy {
    [cmdletbinding()]
    [Alias('xmsCopyCreateRepurposeCopy')]
    Param (
        [Parameter()]
        [ValidatePattern("^[^\[\]&\(\)`";,<>'/]+$")] 
        [string]$RepurposeCopyName,
        [parameter(Mandatory = $true)]
        [ValidateSet('ConsistencyGroup', 'Volume', 'SnapshotSet')]
        [string]$Type,
        [Parameter()]
        [Argumentcompleter( { doComplete $args 'volumes' name })] 
        $FromVolumeName,
        [Parameter()]
        [AllowNull()]
        [Argumentcompleter( { doComplete $args 'consistency-groups' name })] 
        $FromConsistencyGroupId,
        [Parameter()]
        [AllowNull()]
        [Argumentcompleter( { doComplete $args 'snapshot-sets' name })] 
        $FromSnapshotSetId,
        [Parameter()]
        [string]$RepurposeCopyVolSuffix,
        [Parameter()]
        [object]$Session =  (Get-XtremDefaultSession),
        [parameter()]
        $XtremClusterName =  (Get-XtremDefaultSession)._XtremClusterName,
        [Parameter()]
        [switch]$ShowRest
        
    )
    initCommand
    # validate type and its mandatory parameters.
    $BodyList = @{ }
    $IsClusterX2 = $false;
    $Route = '/types/snapshots'
    
    $ClusterType = $Session._XtremClusterTypeByName.$XtremClusterName

    if ($ClusterType -eq 'X2') {
        $IsClusterX2 = $true;
    }
    
    switch ($Type)
    {
        "ConsistencyGroup"
        {
            $Route = '/types/consistency-groups'
            
            if ($FromConsistencyGroupId -eq $null)
            {
                throw "Missing mandatory parameter ConsistencyGroupId"
            }
            if ($IsClusterX2)
            {
                
                AddIfExists -name "from-consistency-group-id" -value $FromConsistencyGroupId -list $BodyList
                AddIfExists -name "repurpose-copy-flag" -value "true" -list $BodyList
                AddIfExists -name "new-consistency-group-name" -value $RepurposeCopyName -list $BodyList
                AddIfExists -name "new-vol-suffix" -value $RepurposeCopyVolSuffix -list $BodyList
                
            }
            else
            {
                AddIfExists -name "consistency-group-id" -value $FromConsistencyGroupId -list $BodyList
                AddIfExists -name "snapshot-set-name" -value $RepurposeCopyName -list $BodyList
                AddIfExists -name "snap-suffix" -value $RepurposeCopyVolSuffix -list $BodyList
                AddIfExists -name "snapshot-type" -value "regular" -list $BodyList
            }
        }
        "Volume" {
            if ($FromVolumeName -eq $null)
            {
                throw "Missing mandatory parameter FromVolumeName"
            }
            
            $VolumeName = "[{0}]" -f $FromVolumeName;
            AddIfExists -name "volume-list" -value $VolumeName -list $BodyList
            AddIfExists -name "snapshot-set-name" -value $RepurposeCopyName -list $BodyList
            AddIfExists -name "snap-suffix" -value $RepurposeCopyVolSuffix -list $BodyList
            AddIfExists -name "snapshot-type" -value "regular" -list $BodyList
        }
        "SnapshotSet" {
            if ($FromSnapshotSetId -eq $null)
            {
                throw "Missing mandatory parameter SnapshotSetId"
            }
            
            
            if ($IsClusterX2)
            {
                $Route = '/types/consistency-groups'
                
                AddIfExists -name "from-snapshot-set-id" -value $FromSnapshotSetId -list $BodyList
                AddIfExists -name "repurpose-copy-flag" -value "true" -list $BodyList
                AddIfExists -name "new-consistency-group-name" -value $RepurposeCopyName -list $BodyList
                AddIfExists -name "new-vol-suffix" -value $RepurposeCopyVolSuffix -list $BodyList
                
            }
            else
            {
                AddIfExists -name "snapshot-set-id" -value $FromSnapshotSetId -list $BodyList
                AddIfExists -name "snapshot-set-name" -value $RepurposeCopyName -list $BodyList
                AddIfExists -name "snap-suffix" -value $RepurposeCopyVolSuffix -list $BodyList
                AddIfExists -name "snapshot-type" -value "regular" -list $BodyList
            }
        }
    }
    
    
    AddIfExists -name "cluster-id" -value $XtremClusterName -list $BodyList
    
    $Body = BuildXtremJson -list $BodyList
    
    $result = NewXtremRequest -Method POST -Endpoint $Route -Session $Session -XtremClusterName $XtremClusterName -Body $Body -ObjectSelection $ObjectSelection -ShowRest:$ShowRest.IsPresent
    
    finalizeCommand
    return $result
}


Export-ModuleMember *-* -Alias *