Public/Export-RubrikVCDTemplate.ps1
#requires -Version 3 function Export-RubrikVCDTemplate { <# .SYNOPSIS Exports a given vCD template .DESCRIPTION The Export-RubrikVCDTemplate cmdlet exports the specified vCD template .NOTES Written by Matt Elliott for community usage Twitter: @NetworkBrouhaha GitHub: shamsway .LINK https://rubrik.gitbook.io/rubrik-sdk-for-powershell/command-documentation/reference/Export-RubrikVCDTemplate .EXAMPLE Export-RubrikVCDTemplate -id '01234567-8910-1abc-d435-0abc1234d567' -Name 'Template-Export' -catalogid '01234567-8910-1abc-d435-0abc1234d567' -orgvdcid '01234567-8910-1abc-d435-0abc1234d567' This exports the vCD Template snapshot with ID 01234567-8910-1abc-d435-0abc1234d567 to the vCD catalog with ID 01234567-8910-1abc-d435-0abc1234d567. The template will be exported to Org vDC ID with 01234567-8910-1abc-d435-0abc1234d567 temporarily, before being imported to the vCD catalog. This should be an Org vDC in the same vCD Org where the target catalog exists. Finding needed IDs can be done directly via API, or via a command similar to (Invoke-RubrikRESTCall -Endpoint 'vcd/hierarchy/VcdOrg:::01234567-8910-1abc-d435-0abc1234d567/children' -api 'internal' -Method GET).data #> [CmdletBinding()] Param( # Rubrik snapshot id of the vApp to export [Parameter(ValueFromPipelineByPropertyName = $true)] [ValidateNotNullOrEmpty()] [String]$id, # Name of the newly exported vCD Template. Defaults to [TemplateName]-Export [String]$name, # ID of target catalog. Defaults to the existing catalog. [Alias('catalog_id')] [String]$catalogid, # Org vDC ID to export the vCD Template to. This should be an Org vDC in the same vCD Org where the target catalog exists. [Alias('org_vdc_id')] [String]$orgvdcid, # ID of the storage policy used to create the template. Defaults to Org VDC settings. [String]$storagePolicyId, # Rubrik server IP or FQDN [String]$Server = $global:RubrikConnection.server, # API version [String]$api = $global:RubrikConnection.api ) Begin { # The Begin section is used to perform one-time loads of data necessary to carry out the function's purpose # If a command needs to be run with each iteration or pipeline input, place it in the Process section # Check to ensure that a session to the Rubrik cluster exists and load the needed header data for authentication Test-RubrikConnection # API data references the name of the function # For convenience, that name is saved here to $function $function = $MyInvocation.MyCommand.Name # Retrieve all of the URI, method, body, query, result, filter, and success details for the API endpoint Write-Verbose -Message "Gather API Data for $function" $resources = Get-RubrikAPIData -endpoint $function Write-Verbose -Message "Load API data for $($resources.Function)" Write-Verbose -Message "Description: $($resources.Description)" } Process { #region oneoff if((!$name -or !$orgvdcid) -or !$catalogid) { $snapshot = Get-RubrikVAppSnapshot -id $id $vapp = Get-RubrikVApp -Name $snapshot.vappName -PrimaryClusterID 'local' -DetailedObject if(!$catalogid) { $catalogid = $vapp.catalogid Write-Verbose -Message "Using Catalog $($catalogid) for export" } if(!$name) { $name = $vapp.name + "-Export" Write-Verbose -Message "Using $($name) for export" } if(!$orgvdcid) { $options = Get-RubrikVcdTemplateExportOption -id $id -catalogid $catalogid -name $name $orgvdcid = $options.originalVdcExportOptions.orgVdcId Write-Verbose -Message "Using Org VDC $($orgvdc) for export" } } # Remove beginning of catalog ID to adjust for API if($catalogid.StartsWith('VcdCatalog:::')) { $catalogid = $catalogid -replace 'VcdCatalog:::','' } # Remove beginning of Org VDC ID to adjust for API if($orgvdcid.StartsWith('VcdOrgVdc:::')) { $orgvdcid = $orgvdcid -replace 'VcdOrgVdc:::','' } $resources.Body.name = $name $resources.Body.catalogId = $catalogid $resources.Body.orgVdcId = $orgvdcid if($storagePolicyId) { $resources.Body.storagePolicyId = $storagePolicyId } else { $resources.Body.Remove('storagePolicyId') } $body = ConvertTo-Json -InputObject $resources.Body -Depth 4 Write-Verbose -Message "vApp Export REST Request Body `n$($body)" #endregion $uri = New-URIString -server $Server -endpoint ($resources.URI) -id $id $uri = Test-QueryParam -querykeys ($resources.Query.Keys) -parameters ((Get-Command $function).Parameters.Values) -uri $uri #$body = New-BodyString -bodykeys ($resources.Body.Keys) -parameters ((Get-Command $function).Parameters.Values) $result = Submit-Request -uri $uri -header $Header -method $($resources.Method) -body $body $result = Test-ReturnFormat -api $api -result $result -location $resources.Result $result = Test-FilterObject -filter ($resources.Filter) -result $result return $result } # End of process } # End of function |