Managing Reservations With PowervRA

• Craig

Since the initial release of PowervRA I’ve been busy hacking away at bug fixes, improvements and new features. One that we were keen to get out of the door was support for reservations. The reservation-service API is a mammoth and even though I’d had a fair battles with it in the past, I underestimated the challenges involved in getting support in to the module.

I’m pleased to announce though that version 1.1.0 introduces support for managing vSphere and vCloud Air reservations. Here’s how to get started:

Retrieving all reservations

To view all reservations you can use Get-vRAReservation. Optionally you can use the Name parameter to get a single reservation

Get-vRAReservation | Select-Object Name
Get-vRAReservation -Name Reservation01

The command behaves like any other Get command, with the exception of the Limit and Page parameters. By default all pages will be returned but you have the option to specify the page and the number of results per page.

Creating a new reservation

There is a bit of leg work involved in creating a new reservation… but it’s worth it.

First you will need to get the compute resource that you want to  use in the new reservation:

$ComputeResource = Get-vRAReservationComputeResource -Type vSphere -Name "Cluster01 (vCenter)"

Next up, you need to define the storage and networks that you want to use. Using networks as an example. Start by creating a new array, then creating a new definition for each network that we want to utilise and add it to the array. This array can then be passed to the New-vRAReservation command later.

# --- Get the network definition
$NetworkDefinitionArray = @()
$Network1 = New-vRAReservationNetworkDefinition -Type vSphere -ComputeResourceId $ComputeResource.Id -NetworkPath "VM Network" -NetworkProfile "Test" -Verbose
$NetworkDefinitionArray += $Network1
# --- Get the storage definition
$StorageDefinitionArray = @()
$Storage1 = New-vRAReservationStorageDefinition -Type vSphere -ComputeResourceId $ComputeResource.Id -Path "NFS001" -ReservedSizeGB 10 -Priority 0 -Verbose
$StorageDefinitionArray += $Storage1

Finally, using a bit of splatting, we gather all of the information needed and create the new reservation.

$Param = @{
  Type = "vSphere"
  Name = "Reservation20"
  Tenant = "Tenant01"
  BusinessGroup = "Default Business Group[Tenant01]"
  ReservationPolicy = "ReservationPolicy1"
  Priority = 0
  ComputeResourceId = $ComputeResource.Id
  Quota = 0
  MemoryGB = 20
  Storage = $StorageDefinitionArray
  Resourcepool = "Resources"
  Network = $NetworkDefinitionArray
  EnableAlerts = $true
  StorageAlertPercentageLevel = 20
  EmailBusinessGroupManager = $true
  AlertRecipients = "testuser@vsphere.local"

New-vRAReservation @Param

If successful, the cmdlet will return the new reservation.


At this point, it’s also worth pointing out the first parameter in the list, Type. This defines the type of reservation you are going to create. As of version 1.1.0, PowervRA only supports vSphere and vCloud Air reservations. Support for more types will hopefully be added in later versions.

Quick tip: To view a list of all types supported by vRA you can use **Get-vRAReservationType Select-Object Name**

In this gist you will find a few examples for creating vSphere and vCloud Air reservations.

Copying an existing reservation

If you want to duplicate an existing reservation you can use Get-vRAReservationTemplate along with New-vRAReservation.

Get-vRAReservation -Name Reservation20 | Get-vRAReservationTemplate | New-vRAReservation -NewName CopiedReservation01

Alternatively, you can save the template to a text file for use elsewhere.

Get-vRAReservation -Name Reservation20 | Get-vRAReservationTemplate -OutFile C:\Reservations\Reservation.json

Removing a reservation

Removing a reservation is simple. You can use Get-vRAReservation and pipe it to Remove-vRAReservation.

Get-vRAReservation -Name Reservation20 | Remove-vRAReservation

Updating a reservation

Updating a reservation comes in a few different parts. We decided it would be best to split out storage and network again due to the complex nature of the underlying objects.

To update the core properties of a reservation you can use Set-vRAReservation.

Get-vRAReservation -Name Reservation20 | Set-vRAReservation -Name Reservation20-Updated

If successful the cmdlet will return the updated reservation.


Managing storage

So for managing the storage associated with a reservation we have Add-vRAReservationStorage and Set-vRAReservationStorage.

Set-vRAReservationStorage will update properties of a datastore that is currently associated with a reservation.

Get-vRAReservation -Name "Reservation01" | Set-vRAReservationStorage -Path "Datastore01"  -ReservedSizeGB 20 -Priority 10

Add-vRAReservationStorage will add new storage to a reservation.

Get-vRAReservation -Name Reservation01 | Add-vRAReservationStorage -Path "Datastore01" -ReservedSizeGB 500 -Priority 1

Managing networks

For managing networks, we have Set-vRAReservationNetwork and Add-vRAReservationNetwork.

Set-vRAReservationNetwork will update the network profile of an associated network.

Get-vRAReservation -Name "Reservation01" | Set-vRAReservationNetwork -NetworkPath "VM Network" -NetworkProfile "Test Profile 1"

To remove a network profile you can pass an empty string to the NetworkProfile parameter.

Get-vRAReservation -Name "Reservation01" | Set-vRAReservationNetwork -NetworkPath "VM Network" -NetworkProfile ""

Add-vRAReservationNetwork will add a new network  to a reservation and optionally associate a network profile.

Get-vRAReservation -Name Reservation01 | Add-vRAReservationNetwork -NetworkPath "DMZ" -NetworkProfile "DMZ-Profile"

As a final note. Don’t forget that you can check out the help associated with a cmdlet if you get stuck.

Get-Help -Name Get-vRAReservation -Full