221 lines
9.0 KiB
PowerShell
221 lines
9.0 KiB
PowerShell
function Get-VMCPSettings {
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created on: 10/27/2015 9:25 PM
|
|
Created by: Brian Graf
|
|
Twitter: @vBrianGraf
|
|
VMware Blog: blogs.vmware.com/powercli
|
|
Personal Blog: www.vtagion.com
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
This function will allow users to view the VMCP settings for their clusters
|
|
|
|
.Example
|
|
# This will show you the VMCP settings of your cluster
|
|
Get-VMCPSettings -cluster LAB-CL
|
|
|
|
.Example
|
|
# This will show you the VMCP settings of your cluster
|
|
Get-VMCPSettings -cluster (Get-Cluster Lab-CL)
|
|
#>
|
|
[CmdletBinding()]
|
|
param
|
|
(
|
|
[Parameter(Mandatory=$True,
|
|
ValueFromPipeline=$True,
|
|
ValueFromPipelineByPropertyName=$True,
|
|
HelpMessage='What is the Cluster Name?')]
|
|
$cluster
|
|
)
|
|
Begin {
|
|
# Determine input and convert to ClusterImpl object
|
|
Switch ($cluster.GetType().Name)
|
|
{
|
|
"string" {$CL = Get-Cluster $cluster}
|
|
"ClusterImpl" {$CL = $cluster}
|
|
}
|
|
}
|
|
Process {
|
|
# Work with the Cluster View
|
|
$ClusterMod = Get-View -Id "ClusterComputeResource-$($cl.ExtensionData.MoRef.Value)"
|
|
|
|
# Create Hashtable with desired properties to return
|
|
$properties = [ordered]@{
|
|
'Cluster' = $ClusterMod.Name;
|
|
'VMCP Status' = $clustermod.Configuration.DasConfig.VmComponentProtecting;
|
|
'Protection For APD' = $clustermod.Configuration.DasConfig.DefaultVmSettings.VmComponentProtectionSettings.VmStorageProtectionForAPD;
|
|
'APD Timeout Enabled' = $clustermod.Configuration.DasConfig.DefaultVmSettings.VmComponentProtectionSettings.EnableAPDTimeoutForHosts;
|
|
'APD Timeout (Seconds)' = $clustermod.Configuration.DasConfig.DefaultVmSettings.VmComponentProtectionSettings.VmTerminateDelayForAPDSec;
|
|
'Reaction on APD Cleared' = $clustermod.Configuration.DasConfig.DefaultVmSettings.VmComponentProtectionSettings.VmReactionOnAPDCleared;
|
|
'Protection For PDL' = $clustermod.Configuration.DasConfig.DefaultVmSettings.VmComponentProtectionSettings.VmStorageProtectionForPDL
|
|
}
|
|
|
|
# Create PSObject with the Hashtable
|
|
$object = New-Object -TypeName PSObject -Prop $properties
|
|
|
|
# Show object
|
|
return $object
|
|
}
|
|
End {}
|
|
|
|
}
|
|
|
|
function Set-VMCPSettings {
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created on: 10/27/2015 9:25 PM
|
|
Created by: Brian Graf
|
|
Twitter: @vBrianGraf
|
|
VMware Blog: blogs.vmware.com/powercli
|
|
Personal Blog: www.vtagion.com
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
This function will allow users to enable/disable VMCP and also allow
|
|
them to configure the additional VMCP settings
|
|
For each parameter, users should use the 'Tab' button to auto-fill the
|
|
possible values.
|
|
|
|
.Example
|
|
# This will enable VMCP and configure the Settings
|
|
Set-VMCPSettings -cluster LAB-CL -enableVMCP:$True -VmStorageProtectionForPDL `
|
|
restartAggressive -VmStorageProtectionForAPD restartAggressive `
|
|
-VmTerminateDelayForAPDSec 2000 -VmReactionOnAPDCleared reset
|
|
|
|
.Example
|
|
# This will disable VMCP and configure the Settings
|
|
Set-VMCPSettings -cluster LAB-CL -enableVMCP:$False -VmStorageProtectionForPDL `
|
|
disabled -VmStorageProtectionForAPD disabled `
|
|
-VmTerminateDelayForAPDSec 600 -VmReactionOnAPDCleared none
|
|
#>
|
|
[CmdletBinding()]
|
|
param
|
|
(
|
|
[Parameter(Mandatory=$True,
|
|
ValueFromPipeline=$True,
|
|
ValueFromPipelineByPropertyName=$True,
|
|
HelpMessage='What is the Cluster Name?')]
|
|
$cluster,
|
|
|
|
[Parameter(Mandatory=$True,
|
|
ValueFromPipeline=$False,
|
|
HelpMessage='True=Enabled False=Disabled')]
|
|
[switch]$enableVMCP,
|
|
|
|
[Parameter(Mandatory=$True,
|
|
ValueFromPipeline=$False,
|
|
HelpMessage='Actions that can be taken in response to a PDL event')]
|
|
[ValidateSet("disabled","warning","restartAggressive")]
|
|
[string]$VmStorageProtectionForPDL,
|
|
|
|
[Parameter(Mandatory=$True,
|
|
ValueFromPipeline=$False,
|
|
HelpMessage='Options available for an APD response')]
|
|
[ValidateSet("disabled","restartConservative","restartAggressive","warning")]
|
|
[string]$VmStorageProtectionForAPD,
|
|
|
|
[Parameter(Mandatory=$True,
|
|
ValueFromPipeline=$False,
|
|
HelpMessage='Value in seconds')]
|
|
[Int]$VmTerminateDelayForAPDSec,
|
|
|
|
[Parameter(Mandatory=$True,
|
|
ValueFromPipeline=$False,
|
|
HelpMessage='This setting will instruct vSphere HA to take a certain action if an APD event is cleared')]
|
|
[ValidateSet("reset","none")]
|
|
[string]$VmReactionOnAPDCleared
|
|
|
|
)
|
|
Begin{
|
|
|
|
# Determine input and convert to ClusterImpl object
|
|
Switch ($cluster.GetType().Name)
|
|
{
|
|
"string" {$CL = Get-Cluster $cluster}
|
|
"ClusterImpl" {$CL = $cluster}
|
|
}
|
|
}
|
|
Process{
|
|
# Create the object we will configure
|
|
$settings = New-Object VMware.Vim.ClusterConfigSpecEx
|
|
$settings.dasConfig = New-Object VMware.Vim.ClusterDasConfigInfo
|
|
|
|
# Based on $enableVMCP switch
|
|
if ($enableVMCP -eq $false) {
|
|
$settings.dasConfig.vmComponentProtecting = "disabled"
|
|
}
|
|
elseif ($enableVMCP -eq $true) {
|
|
$settings.dasConfig.vmComponentProtecting = "enabled"
|
|
}
|
|
|
|
#Create the VMCP object to work with
|
|
$settings.dasConfig.defaultVmSettings = New-Object VMware.Vim.ClusterDasVmSettings
|
|
$settings.dasConfig.defaultVmSettings.vmComponentProtectionSettings = New-Object VMware.Vim.ClusterVmComponentProtectionSettings
|
|
|
|
#Storage Protection For PDL
|
|
$settings.dasConfig.defaultVmSettings.vmComponentProtectionSettings.vmStorageProtectionForPDL = "$VmStorageProtectionForPDL"
|
|
|
|
#Storage Protection for APD
|
|
switch ($VmStorageProtectionForAPD) {
|
|
"disabled" {
|
|
# If Disabled, there is no need to set the Timeout Value
|
|
$settings.dasConfig.defaultVmSettings.vmComponentProtectionSettings.vmStorageProtectionForAPD = 'disabled'
|
|
$settings.dasConfig.defaultVmSettings.vmComponentProtectionSettings.enableAPDTimeoutForHosts = $false
|
|
}
|
|
|
|
"restartConservative" {
|
|
$settings.dasConfig.defaultVmSettings.vmComponentProtectionSettings.vmStorageProtectionForAPD = 'restartConservative'
|
|
$settings.dasConfig.defaultVmSettings.vmComponentProtectionSettings.enableAPDTimeoutForHosts = $true
|
|
$settings.dasConfig.defaultVmSettings.vmComponentProtectionSettings.vmTerminateDelayForAPDSec = $VmTerminateDelayForAPDSec
|
|
}
|
|
|
|
"restartAggressive" {
|
|
$settings.dasConfig.defaultVmSettings.vmComponentProtectionSettings.vmStorageProtectionForAPD = 'restartAggressive'
|
|
$settings.dasConfig.defaultVmSettings.vmComponentProtectionSettings.enableAPDTimeoutForHosts = $true
|
|
$settings.dasConfig.defaultVmSettings.vmComponentProtectionSettings.vmTerminateDelayForAPDSec = $VmTerminateDelayForAPDSec
|
|
}
|
|
|
|
"warning" {
|
|
# If Warning, there is no need to set the Timeout Value
|
|
$settings.dasConfig.defaultVmSettings.vmComponentProtectionSettings.vmStorageProtectionForAPD = 'warning'
|
|
$settings.dasConfig.defaultVmSettings.vmComponentProtectionSettings.enableAPDTimeoutForHosts = $false
|
|
}
|
|
|
|
}
|
|
|
|
# Reaction On APD Cleared
|
|
$settings.dasConfig.defaultVmSettings.vmComponentProtectionSettings.vmReactionOnAPDCleared = "$VmReactionOnAPDCleared"
|
|
|
|
# Execute API Call
|
|
$modify = $true
|
|
$ClusterMod = Get-View -Id "ClusterComputeResource-$($cl.ExtensionData.MoRef.Value)"
|
|
$ClusterMod.ReconfigureComputeResource_Task($settings, $modify) | out-null
|
|
|
|
|
|
|
|
}
|
|
End{
|
|
# Update variable data after API call
|
|
$ClusterMod.updateViewData()
|
|
|
|
# Create Hashtable with desired properties to return
|
|
$properties = [ordered]@{
|
|
'Cluster' = $ClusterMod.Name;
|
|
'VMCP Status' = $clustermod.Configuration.DasConfig.VmComponentProtecting;
|
|
'Protection For APD' = $clustermod.Configuration.DasConfig.DefaultVmSettings.VmComponentProtectionSettings.VmStorageProtectionForAPD;
|
|
'APD Timeout Enabled' = $clustermod.Configuration.DasConfig.DefaultVmSettings.VmComponentProtectionSettings.EnableAPDTimeoutForHosts;
|
|
'APD Timeout (Seconds)' = $clustermod.Configuration.DasConfig.DefaultVmSettings.VmComponentProtectionSettings.VmTerminateDelayForAPDSec;
|
|
'Reaction on APD Cleared' = $clustermod.Configuration.DasConfig.DefaultVmSettings.VmComponentProtectionSettings.VmReactionOnAPDCleared;
|
|
'Protection For PDL' = $clustermod.Configuration.DasConfig.DefaultVmSettings.VmComponentProtectionSettings.VmStorageProtectionForPDL
|
|
}
|
|
|
|
# Create PSObject with the Hashtable
|
|
$object = New-Object -TypeName PSObject -Prop $properties
|
|
|
|
# Show object
|
|
return $object
|
|
|
|
}
|
|
}
|