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 * |