UberGeek1
Contributor
Contributor

Create and Configure StorageDRS Cluster Completely in Code

So I'm racking my brain on this one.  I'm trying to create the StorageDRS cluster and perform all of the config via code, and because not everything is in CmdLets yet, I still have to use ConfigSpecs and StorageResourceManager.  So what I'm fighting is I keep running into this error everytime I try to perform the ConfigureStorageDrsForPod action:

Exception calling "ConfigureStorageDrsForPod" with "3" argument(s): "The object has already been deleted or has not been completely created"

I will put the code at the bottom, but I can confirm that the Datastore Cluster does in fact exist and that this code does something because I can see the reconfigure event in vCenter, but sure trying to figure out where the failure is here.

For reference, $dCenter is set to a valid Datacenter object in my vCenter.

$dscName = "$($dCenter.Name)_DSC1"
$dsc = New-DatastoreCluster -Name $dscName -Location $dCenter
$dsc = $dsc | Set-DatastoreCluster -SdrsAutomationLevel FullyAutomated

$SRMan = Get-View StorageResourceManager

$spec = New-Object VMware.Vim.StorageDrsConfigSpec
$spec.PodConfigSpec = New-Object VMware.Vim.StorageDrsPodConfigSpec
$lbSpec = New-Object VMware.Vim.StorageDrsSpaceLoadBalanceConfig
$ioSpec = new-object VMware.Vim.StorageDrsIoLoadBalanceConfig

$spec.PodConfigSpec.DefaultIntraVmAffinity = $true
$spec.PodConfigSpec.LoadBalanceInterval = 480
$spec.PodConfigSpec.Enabled = $true
       
$lbSpec.MinSpaceUtilizationDifference = 10
$lbSpec.SpaceUtilizationThreshold = 89

$spec.PodConfigSpec.SpaceLoadBalanceConfig = $lbSpec

$ioSpec.IoLatencyThreshold = 10
$ioSpec.IoLoadImbalanceThreshold = 10
$ioSpec.ReservablePercentThreshold = 60
$ioSpec.ReservableThresholdMode = "automated"

$spec.PodConfigSpec.IoLoadBalanceConfig = $ioSpec
$spec.PodConfigSpec.IoLoadBalanceEnabled = $true

$SRMan.ConfigureStorageDrsForPod($dsc.ExtensionData.MoRef, $spec, $true)

Sincerely, Jody L. Whitlock
Tags (1)
0 Kudos
1 Reply
LucD
Leadership
Leadership

Most probably you are connected to more than 1 vCenter.

Check the content of $global:defaultviservers.

To avoid the error while having multiple connections open, use the Server parameter.

Like this for example

$vcName = ([System.Uri]$dCenter.ExtensionData.Client.ServiceUrl).Host

$dscName = "$($dCenter.Name)_DSC1"

$dsc = New-DatastoreCluster -Name $dscName -Location $dCenter

$dsc = $dsc | Set-DatastoreCluster -SdrsAutomationLevel FullyAutomated

$SRMan = Get-View StorageResourceManager -Server $vcName

$spec = New-Object VMware.Vim.StorageDrsConfigSpec

$spec.PodConfigSpec = New-Object VMware.Vim.StorageDrsPodConfigSpec

$lbSpec = New-Object VMware.Vim.StorageDrsSpaceLoadBalanceConfig

$ioSpec = new-object VMware.Vim.StorageDrsIoLoadBalanceConfig

$spec.PodConfigSpec.DefaultIntraVmAffinity = $true

$spec.PodConfigSpec.LoadBalanceInterval = 480

$spec.PodConfigSpec.Enabled = $true

       

$lbSpec.MinSpaceUtilizationDifference = 10

$lbSpec.SpaceUtilizationThreshold = 89

$spec.PodConfigSpec.SpaceLoadBalanceConfig = $lbSpec

$ioSpec.IoLatencyThreshold = 10

$ioSpec.IoLoadImbalanceThreshold = 10

$ioSpec.ReservablePercentThreshold = 60

$ioSpec.ReservableThresholdMode = "automated"

$spec.PodConfigSpec.IoLoadBalanceConfig = $ioSpec

$spec.PodConfigSpec.IoLoadBalanceEnabled = $true

$SRMan.ConfigureStorageDrsForPod($dsc.ExtensionData.MoRef, $spec, $true)


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos