Functions/BloxOne/BloxOneDDI/New-B1HAGroup.ps1

function New-B1HAGroup {
    <#
    .SYNOPSIS
        Creates a new HA Group in BloxOneDDI

    .DESCRIPTION
        This function is used to create a new HA Group in BloxOneDDI

    .PARAMETER Name
        The name of the new HA Group

    .PARAMETER Mode
        The mode of the new HA Group

    .PARAMETER PrimaryNode
        The hostname or FQDN of the primary BloxOneDDI Host

    .PARAMETER SecondaryNode
        The hostname or FQDN of the secondary BloxOneDDI Host

    .PARAMETER Description
        The description of the new HA Group

    .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> New-B1HAGroup -Name "MyHAGroup" -Mode "active-passive" -PrimaryNode "bloxoneddihost1.mydomain.corp" -SecondaryNode "bloxoneddihost2.mydomain.corp" -Description "DHCP HA Group"

    .FUNCTIONALITY
        BloxOneDDI

    .FUNCTIONALITY
        IPAM

    .FUNCTIONALITY
        DHCP
    #>

    [CmdletBinding(
        SupportsShouldProcess,
        ConfirmImpact = 'Medium'
    )]
    param(
      [Parameter(Mandatory=$true)]
      [String]$Name,
      [Parameter(Mandatory=$true)]
      [ValidateSet("active-active","active-passive","advanced-active-passive")]
      [String]$Mode,  ## active-active / active-passive
      [Parameter(Mandatory=$true)]
      [String]$PrimaryNode,
      [Parameter(Mandatory=$true)]
      [String]$SecondaryNode,
      [String]$Description,
      [Switch]$Force
    )
    $ConfirmPreference = Confirm-ShouldProcess $PSBoundParameters
    if (Get-B1HAGroup -Name $Name -Strict) {
        Write-Host "HA Group already exists by the name $Name." -ForegroundColor Red
    } else {
        $HostA = "dhcp/host/"+(Get-B1Host -Name $PrimaryNode -BreakOnError).legacy_id
        $HostARole = "active"
        $HostB = "dhcp/host/"+(Get-B1Host -Name $SecondaryNode -BreakOnError).legacy_id
        $HostBRole = "active"
        if ($Mode -eq "active-passive" -or $Mode -eq "advanced-active-passive") {
            $HostBRole = "passive"
        }

        $HAHosts = New-Object System.Collections.ArrayList
        $HAHosts.Add(@{"host"="$HostA";"role"="$HostARole";}) | Out-Null
        $HAHosts.Add(@{"host"="$HostB";"role"="$HostBRole";}) | Out-Null

        $splat = @{
            "name" = $Name
            "mode" = $Mode
            "comment" = $Description
            "hosts" = $HAHosts
        }

        $splat = $splat | ConvertTo-Json
        if($PSCmdlet.ShouldProcess("Create new DHCP HA Group:`n$($splat)","Create new DHCP HA Group: $($Name)",$MyInvocation.MyCommand)){
            $Result = Invoke-CSP -Method POST -Uri "$(Get-B1CSPUrl)/api/ddi/v1/dhcp/ha_group" -Data $splat | Select-Object -ExpandProperty result
            if ($Result.name -eq $Name) {
                Write-Host "Created DHCP HA Group $Name Successfully." -ForegroundColor Green
                return $Result
            } else {
                Write-Host "Failed to create DHCP HA Group $Name." -ForegroundColor Red
            }
        }
    }
}