Functions/Set-vRAReservationNetwork.psm1
function Set-vRAReservationNetwork { <# .SYNOPSIS Set vRA reservation network properties .DESCRIPTION Set vRA reservation network properties. This cmdlet can be used to set the Network Profile for a Network Path in a reservation. .PARAMETER Id The Id of the reservation .PARAMETER NetworkPath The network path .PARAMETER NetworkProfile The network profile .INPUTS System.String. .OUTPUTS System.Management.Automation.PSObject .EXAMPLE Get-vRAReservation -Name "Reservation01" | Set-vRAReservationNetwork -NetworkPath "VM Network" -NetworkProfile "Test Profile 1" #> [CmdletBinding(SupportsShouldProcess,ConfirmImpact="High")][OutputType('System.Management.Automation.PSObject')] Param ( [parameter(Mandatory=$true,ValueFromPipelineByPropertyName)] [ValidateNotNullOrEmpty()] [String]$Id, [parameter(Mandatory=$true)] [ValidateNotNullOrEmpty()] [String]$NetworkPath, [parameter(Mandatory=$false)] [ValidateNotNull()] [String]$NetworkProfile ) begin { } process { try { # --- Get the reservation $URI = "/reservation-service/api/reservations/$($id)" $Reservation = Invoke-vRARestMethod -Method GET -URI $URI $ReservationTypeName = (Get-vRAReservationType -Id $Reservation.reservationTypeId).name $ComputeResourceId = ($Reservation.extensionData.entries | Where-Object {$_.key -eq "computeResource"}).value.id # --- # --- Set Network Properties # --- $ReservationNetworkPathId = ((Get-vRAReservationComputeResourceNetwork -Type $ReservationTypeName -ComputeResourceId $ComputeResourceId -Name $NetworkPath).values.entries | Where-Object {$_.key -eq "networkPath"}).value.id $ReservationNetworks = $Reservation.extensionData.entries | Where-Object {$_.key -eq "reservationNetworks"} $ReservationNetworkItems = $ReservationNetworks.value.items foreach ($ReservationNetworkItem in $ReservationNetworkItems) { $NetworkPathId = ($ReservationNetworkItem.values.entries | Where-Object {$_.key -eq "networkPath"}).value.id if ($NetworkPathId -eq $ReservationNetworkPathId) { if ($PSBoundParameters.ContainsKey("NetworkProfile")){ # --- Test to see if a network profile exists in the reservation $ExistingNetworkProfile = $ReservationNetworkItem.values.entries | Where-Object {$_.key -eq "networkProfile"} if ($ExistingNetworkProfile) { if ($NetworkProfile -eq '') { # --- Remove an existing network profile Write-Verbose -Message "Removing Network Profile" $ReservationNetworkItem.values.entries = @($ReservationNetworkItem.values.entries | Where-Object {$_.key -ne "networkProfile"}) } else { # --- Get network profile information $Response = Invoke-vRARestMethod -Method GET -URI "/iaas-proxy-provider/api/network/profiles?`$filter=name%20eq%20'$($NetworkProfile)'" if ($Response.content.Count -eq 0) { throw "Could not find network profile with name $($NetworkProfile)" } # --- Handle updating an existing network profile Write-Verbose -Message "Updating Network Profile: $($ExistingNetworkProfile.value.label) >> $($NetworkProfile)" $ExistingNetworkProfile.value.id = $Response.content[0].id $ExistingNetworkProfile.value.label = $Response.content[0].name } } else { # --- Get network profile information $Response = Invoke-vRARestMethod -Method GET -URI "/iaas-proxy-provider/api/network/profiles?`$filter=name%20eq%20'$($NetworkProfile)'" if ($Response.content.Count -eq 0) { throw "Could not find network profile with name $($NetworkProfile)" } # --- Handle adding a new network profile to an existing path Write-Verbose -Message "Adding Network Profile: $($NetworkProfile)" $NetworkProfileTemplate = @" { "key": "networkProfile", "value": { "type": "entityRef", "componentId": null, "classId": "Network", "id": "$($NetworkProfileObject.id)", "label": "$($NetworkProfileObject.name)" } } "@ $ReservationNetworkItem.values.entries += ($NetworkProfileTemplate | ConvertFrom-Json) } } } } if ($PSCmdlet.ShouldProcess($Id)){ $URI = "/reservation-service/api/reservations/$($Id)" Write-Verbose -Message "Preparing PUT to $($URI)" # --- Run vRA REST Request $Response = Invoke-vRARestMethod -Method PUT -URI $URI -Body ($Reservation | ConvertTo-Json -Depth 500) Write-Verbose -Message "SUCCESS" } } catch [Exception]{ throw } } end { } } |