Toolkit/Public/New-RscSlaArchivalSpecs.ps1
|
#Requires -Version 3 function New-RscSlaArchivalSpecs { <# .SYNOPSIS Creates an archival or cascading archival specification input object for use with New-RscSla. .DESCRIPTION Defines when and where snapshots are archived to long-term storage. When ClusterUuids and LocationIds are provided, a standard archival spec is created for New-RscSla or Set-RscSla. When ArchivalLocationId is provided instead, a cascading archival spec is created for New-RscSlaReplicationSpecs. Optional tiering parameters control cold storage placement. .LINK Schema reference: https://rubrikinc.github.io/rubrik-api-documentation/schema/reference .PARAMETER ArchivalGroupId ID of the archival group that owns the archival location. .PARAMETER ArchivalThreshold Number of time units after which a snapshot becomes eligible for archival. .PARAMETER ArchivalThresholdUnit Unit of time for the archival threshold (MINUTES, HOURS, DAYS, WEEKS, MONTHS, QUARTERS, YEARS). Defaults to MINUTES. .PARAMETER Frequencies Which snapshot cadences are eligible for archival (e.g. MONTHS, YEARS). .PARAMETER InstantTiering Enable instant tiering so snapshots are moved to cold storage immediately. .PARAMETER TierExistingSnapshots Tier snapshots that already exist, not only future ones. .PARAMETER MinAccessibleDuration Minimum number of seconds archived data must remain instantly accessible before being moved to cold storage (smart tiering). .PARAMETER ColdStorageClass Cold storage tier to use (AWS_GLACIER, AWS_GLACIER_DEEP_ARCHIVE, AZURE_ARCHIVE). .PARAMETER ClusterUuids UUIDs of clusters whose snapshots are archived. Must be the same length and in the same order as LocationIds. .PARAMETER LocationIds Archival location IDs that correspond to each cluster in ClusterUuids. .PARAMETER ArchivalLocationId Archival location on the replication target for cascading archival. Using this parameter creates a cascading archival spec instead of a standard archival spec. .EXAMPLE Create a standard archival spec and pass it to New-RscSla. $archival = New-RscSlaArchivalSpecs -ArchivalThreshold 230 -ArchivalThresholdUnit DAYS ` -Frequencies @('MONTHS','YEARS') ` -ClusterUuids @('9c930153-2a3c-4b7d-8603-48145315e71f') ` -LocationIds @('aa137af1-6abf-59aa-984f-a9ac21301f0e') New-RscSla -Name "Archive-Gold" -ArchivalSpecs @($archival) -ObjectType VSPHERE_OBJECT_TYPE .EXAMPLE Create a cascading archival spec with instant tiering for use with New-RscSlaReplicationSpecs. $cascade = New-RscSlaArchivalSpecs -ArchivalThreshold 230 -ArchivalThresholdUnit DAYS ` -Frequencies @('MONTHS','YEARS') -InstantTiering -TierExistingSnapshots ` -MinAccessibleDuration 86400 -ColdStorageClass AWS_GLACIER ` -ArchivalLocationId 'aa137af1-6abf-59aa-984f-a9ac21301f0e' New-RscSlaReplicationSpecs -CascadingArchivalSpecs @($cascade) -ClusterUuid '9c930153-...' #> [CmdletBinding( DefaultParameterSetName = "Archival" )] Param( # Archival Group ID [Parameter(ParameterSetName="Archival")] [String]$ArchivalGroupId, # Archival Threshold [Parameter(ParameterSetName="Archival")] [Parameter(ParameterSetName="CascadingArchival")] [Int]$ArchivalThreshold, # Archival Threshold Unit [Parameter(ParameterSetName="Archival")] [Parameter(ParameterSetName="CascadingArchival")] [ValidateSet("MINUTES","HOURS","DAYS","WEEKS","MONTHS","QUARTERS", "YEARS")] [RubrikSecurityCloud.Types.RetentionUnit] $ArchivalThresholdUnit = [RubrikSecurityCloud.Types.RetentionUnit]::MINUTES, # Archival Frequencies [Parameter(ParameterSetName="Archival")] [Parameter(ParameterSetName="CascadingArchival")] [RubrikSecurityCloud.Types.RetentionUnit[]] $Frequencies, # Instant Tiering [Parameter(ParameterSetName="Archival")] [Parameter(ParameterSetName="CascadingArchival")] [Switch]$InstantTiering, # Tier Existing Snapshots [Parameter(ParameterSetName="Archival")] [Parameter(ParameterSetName="CascadingArchival")] [Switch]$TierExistingSnapshots, # Min accessible duration in seconds specified for smart tiering. [Parameter(ParameterSetName="Archival")] [Parameter(ParameterSetName="CascadingArchival")] [Long]$MinAccessibleDuration, # Cold Storage Class [Parameter(ParameterSetName="Archival")] [Parameter(ParameterSetName="CascadingArchival")] [ValidateSet( "COLD_STORAGE_CLASS_UNKNOWN", "AZURE_ARCHIVE", "AWS_GLACIER_DEEP_ARCHIVE", "AWS_GLACIER" )] [RubrikSecurityCloud.Types.ColdStorageClass] $ColdStorageClass, # Cluster UUIDs [Parameter(ParameterSetName="Archival")] [String[]]$ClusterUuids, # Location IDs that Cluster UUIDs are associated with. [Parameter(ParameterSetName="Archival")] [String[]]$LocationIds, [Parameter(ParameterSetName="CascadingArchival")] [String]$ArchivalLocationId ) Process { $archivalTieringSpecInput = $null if ($InstantTiering -or $TierExistingSnapshots -or $MinAccessibleDuration -or $ColdStorageClass) { $archivalTieringSpecInput = New-Object -TypeName RubrikSecurityCloud.Types.ArchivalTieringSpecInput if ($InstantTiering) { $archivalTieringSpecInput.IsInstantTieringEnabled = $true } if ($TierExistingSnapshots) { $archivalTieringSpecInput.ShouldTierExistingSnapshots = $true } $archivalTieringSpecInput.MinAccessibleDurationInSeconds = $MinAccessibleDuration $archivalTieringSpecInput.ColdStorageClass = $ColdStorageClass } if ($PsCmdlet.ParameterSetName -eq "CascadingArchival") { $slaArchivalSpecs = New-Object -TypeName RubrikSecurityCloud.Types.CascadingArchivalSpecInput $slaArchivalSpecs.ArchivalLocationId = $ArchivalLocationId $slaArchivalSpecs.ArchivalThreshold = New-RscSlaDuration -Duration $ArchivalThreshold -Unit $ArchivalThresholdUnit $slaArchivalSpecs.Frequency = $Frequencies } else { $slaArchivalSpecs = New-Object -TypeName RubrikSecurityCloud.Types.ArchivalSpecInput $slaArchivalSpecs.ArchivalGroupId = $ArchivalGroupId $slaArchivalSpecs.Threshold = $ArchivalThreshold $slaArchivalSpecs.ThresholdUnit = $ArchivalThresholdUnit $slaArchivalSpecs.Frequencies = $Frequencies if ($ClusterUuids.Length -ne $LocationIds.Length) { throw "Cluster UUIDs and Location IDs must be of the same length" } $slaArchivalSpecs.ArchivalLocationToClusterMapping = @() for ($i = 0; $i -lt $ClusterUuids.Length; $i++) { $archivalLocationToClusterMapping = New-Object -TypeName RubrikSecurityCloud.Types.ArchivalLocationToClusterMappingInput $archivalLocationToClusterMapping.ClusterUuid = $ClusterUuids[$i] $archivalLocationToClusterMapping.LocationId = $LocationIds[$i] $slaArchivalSpecs.ArchivalLocationToClusterMapping.add($archivalLocationToClusterMapping) } } $slaArchivalSpecs.archivalTieringSpecInput = $archivalTieringSpecInput $slaArchivalSpecs } } |