Public/Set-AnyStackVclsRetreatMode.ps1

function Set-AnyStackVclsRetreatMode {
    <#
    .SYNOPSIS
        Toggles vCLS retreat mode for a cluster.
    .DESCRIPTION
        Updates config.vcls.clusters.<id>.enabled.
    .PARAMETER Server
        vCenter Server hostname or VIServer object. Uses active connection if omitted.
    .PARAMETER ClusterName
        Name of the cluster.
    .PARAMETER Enabled
        True to enable retreat mode (disables vCLS).
    .EXAMPLE
        PS> Set-AnyStackVclsRetreatMode -ClusterName 'C1' -Enabled $true
    .OUTPUTS
        PSCustomObject
    .NOTES
        Author: The AnyStack Architect
        Requires: VCF.PowerCLI 9.0+, vSphere 8.0 U3+
    #>

    [CmdletBinding(SupportsShouldProcess=$true)]
    [OutputType([PSCustomObject])]
    param(
        [Parameter(Mandatory=$false, ValueFromPipeline=$true)]
        [ValidateNotNull()]
        $Server,
        [Parameter(Mandatory=$true)]
        [string]$ClusterName,
        [Parameter(Mandatory=$true)]
        [bool]$Enabled
    )
    begin {
        $vi = Get-AnyStackConnection -Server $Server
        $ErrorActionPreference = 'Stop'
    }
    process {
        try {
            if ($PSCmdlet.ShouldProcess($ClusterName, "Set vCLS Retreat Mode = $Enabled")) {
                Write-Verbose "[$($MyInvocation.MyCommand.Name)] Setting vCLS retreat mode on $($vi.Name)"
                $cluster = Invoke-AnyStackWithRetry -ScriptBlock { Get-View -Server $vi -ViewType ClusterComputeResource -Filter @{Name=$ClusterName} }
                $optMgr = Invoke-AnyStackWithRetry -ScriptBlock { Get-View -Server $vi -Id $vi.ExtensionData.Content.Setting }
                
                $valStr = if ($Enabled) { "false" } else { "true" } # retreat enabled means vcls disabled
                $key = "config.vcls.clusters.$($cluster.MoRef.Value).enabled"
                
                Invoke-AnyStackWithRetry -ScriptBlock { 
                    $optMgr.UpdateValues(@([VMware.Vim.OptionValue]@{Key=$key; Value=$valStr}))
                }
                
                [PSCustomObject]@{
                    PSTypeName         = 'AnyStack.VclsRetreatMode'
                    Timestamp          = (Get-Date)
                    Server             = $vi.Name
                    Cluster            = $ClusterName
                    RetreatModeEnabled = $Enabled
                }
            }
        }
        catch {
            $PSCmdlet.ThrowTerminatingError([System.Management.Automation.ErrorRecord]::new($_, 'UnexpectedError', [System.Management.Automation.ErrorCategory]::NotSpecified, $null))
        }
    }
}