I want to set the vSphere HA heartbeat datastore setting to "Automatically select datastores accessible from the hosts" via PowerCLI. Here's what I've tried:
$cluster = Get-Cluster -Name <name>
$haConf = $cluster.ExtensionData.RetrieveDasAdvancedRuntimeInfo()
$Spec = New-Object VMware.Vim.ClusterConfigSpec
$Spec.DasConfig = New-Object VMware.Vim.ClusterDasConfigInfo
$Spec.DasConfig.HBDatastoreCandidatePolicy = 'AllFeasibleDS'
$cluster.ExtensionData.ReconfigureCluster($Spec, $true)
When Reconfiguring the cluster, I get this error:
"A general system error occurred: AllFeasibleDS"
According to VMware, "allFeasibleDs" is a valid value, so I'm not sure why it's failing.
When I set that setting manually via the GUI, then go back and check in PowerCLI, the value is now set to "allFeasibleDs".
Any ideas?
Edit: I think I figured it out:
$cluster = Get-Cluster -Name <name>
$haConf = $cluster.ExtensionData.RetrieveDasAdvancedRuntimeInfo()
$Spec = New-Object VMware.Vim.ClusterConfigSpec
$Spec.DasConfig = New-Object VMware.Vim.ClusterDasConfigInfo
$Spec.DasConfig.HBDatastoreCandidatePolicy = New-Object VMware.Vim.ClusterDasConfigInfoHBDatastoreCandidate
$Spec.DasConfig.HBDatastoreCandidatePolicy.value__ = 1
$cluster.ExtensionData.ReconfigureCluster($Spec, $true)
I haven't been able to test it yet, but it seems to work offline. When I create a "ClusterDasConfigInfoHBDatastoreCandidate" object and set the value to 1, it changes to 'allFeasibleDs'. So I'm pretty sure this is the fix, but if anyone can confirm I'd appreciate it.
It's always tricky to provide the _value when there is an enum available.
That value can change in a new API version.
Use the enum
$cluster = Get-Cluster -Name <clustername>
$Spec = New-Object VMware.Vim.ClusterConfigSpec
$Spec.DasConfig = New-Object VMware.Vim.ClusterDasConfigInfo
$Spec.DasConfig.HBDatastoreCandidatePolicy = [VMware.Vim.ClusterDasConfigInfoHBDatastoreCandidate]::allFeasibleDs
$cluster.ExtensionData.ReconfigureCluster($Spec, $true)
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
It's always tricky to provide the _value when there is an enum available.
That value can change in a new API version.
Use the enum
$cluster = Get-Cluster -Name <clustername>
$Spec = New-Object VMware.Vim.ClusterConfigSpec
$Spec.DasConfig = New-Object VMware.Vim.ClusterDasConfigInfo
$Spec.DasConfig.HBDatastoreCandidatePolicy = [VMware.Vim.ClusterDasConfigInfoHBDatastoreCandidate]::allFeasibleDs
$cluster.ExtensionData.ReconfigureCluster($Spec, $true)
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
This way is much better, thank you!