Functions/CSP/UniversalDDI/Set-B1HAGroup.ps1
function Set-B1HAGroup { <# .SYNOPSIS Updates an existing HA Group in Universal DDI .DESCRIPTION This function is used to update an existing HA Group in Universal DDI .PARAMETER Name The name of the HA Group to modify .PARAMETER NewName Use -NewName to update the name of the HA Group .PARAMETER Description The new description for the HA Group .PARAMETER Mode The mode to update the HA Group to .PARAMETER PrimaryNode The hostname or FQDN of the primary NIOS-X Host to update .PARAMETER SecondaryNode The hostname or FQDN of the secondary NIOS-X Host to update .PARAMETER Tags Any tags you want to apply to the HA Group .PARAMETER Object The HA Group Object to update. Accepts pipeline input .PARAMETER Force Perform the operation without prompting for confirmation. By default, this function will not prompt for confirmation unless $ConfirmPreference is set to Medium. .EXAMPLE PS> Set-B1HAGroup -Name "MyHAGroup" -Mode "active-passive" -PrimaryNode "ddihost1.mydomain.corp" -SecondaryNode "ddihost2.mydomain.corp" -Description "DHCP HA Group" -Tags @{"TagName"="TagValue"} .FUNCTIONALITY Universal DDI .FUNCTIONALITY IPAM .FUNCTIONALITY DHCP #> [CmdletBinding( SupportsShouldProcess, ConfirmImpact = 'Medium' )] param( [Parameter(ParameterSetName="Default",Mandatory=$true)] [String]$Name, [String]$NewName, [String]$Description, [ValidateSet("active-active", "active-passive", "advanced-active-passive")] [String]$Mode, [String]$PrimaryNode, [String]$SecondaryNode, [System.Object]$Tags, [Parameter( ValueFromPipeline = $true, ParameterSetName="Object", Mandatory=$true )] [System.Object]$Object, [Switch]$Force ) process { $ConfirmPreference = Confirm-ShouldProcess $PSBoundParameters if ($Object) { $SplitID = $Object.id.split('/') if (("$($SplitID[0])/$($SplitID[1])") -ne "dhcp/ha_group") { Write-Error "Error. Unsupported pipeline object. This function only supports 'dhcp/ha_group' objects as input" return $null } } else { $Object = Get-B1HAGroup -Name $Name -Strict -Fields name,mode,hosts,comment,tags if (!($Object)) { Write-Error "Unable to find HA Group: $($Name)" return $null } } $NewObj = $Object | Select-Object * -ExcludeProperty id,ip_space,created_at,updated_at,anycast_config_id $NewObj.hosts = $NewObj.hosts | Select-Object host,role if ($NewName) { $NewObj.name = $NewName } if ($Description) { $NewObj.comment = $Description } if ($Tags) { $NewObj.tags = $Tags } if ($Mode) { $NewObj.mode = $Mode if ($Mode -eq "active-active") { $NewObj.hosts[0].role = "active" $NewObj.hosts[1].role = "active" } else { $NewObj.hosts[0].role = "active" $NewObj.hosts[1].role = "passive" } } if ($PrimaryNode) { if ($PrimaryHost = (Get-B1Host -Name $PrimaryNode -Strict)) { $PrimaryHostConfig = @{ "host" = "dhcp/host/$($PrimaryHost.legacy_id)" "role" = "active" } $NewObj.hosts[0] = $PrimaryHostConfig } else { Write-Error "Unable to find B1 Host: $($PrimaryNode)" return $null } } if ($SecondaryNode) { if ($SecondaryHost = (Get-B1Host -Name $SecondaryNode -Strict)) { $NewObj.hosts[1].host = "dhcp/host/$($SecondaryHost.legacy_id)" if (!($Mode)) { $Mode = $NewObj.mode } if ($Mode -eq "active-passive" -or $Mode -eq "advanced-active-passive") { $SecondaryRole = "passive" } else { $SecondaryRole = "active" } $SecondaryHostConfig = @{ "host" = "dhcp/host/$($SecondaryHost.legacy_id)" "role" = "$($SecondaryRole)" } $NewObj.hosts[1] = $SecondaryHostConfig } else { Write-Error "Unable to find B1 Host: $($SecondaryNode)" return $null } } $JSON = $NewObj | ConvertTo-Json -Depth 5 -Compress if($PSCmdlet.ShouldProcess("Update DHCP HA Group:`n$(JSONPretty($JSON))","Update DHCP HA Group: $($Object.name) ($($Object.id))",$MyInvocation.MyCommand)){ $Results = Invoke-CSP -Method PATCH -Uri "$(Get-B1CSPUrl)/api/ddi/v1/$($Object.id)" -Data $JSON if ($Results | Select-Object -ExpandProperty result -EA SilentlyContinue -WA SilentlyContinue) { $Results | Select-Object -ExpandProperty result } else { $Results } } } } |