Functions/BloxOne/BloxOneDDI/New-B1Range.ps1

function New-B1Range {
    <#
    .SYNOPSIS
        Creates a new DHCP Range in BloxOneDDI IPAM

    .DESCRIPTION
        This function is used to create a new DHCP Range in BloxOneDDI IPAM

    .PARAMETER Name
        The name of the DHCP Range you want to create

    .PARAMETER StartAddress
        The start address of the DHCP Range you want to create

    .PARAMETER EndAddress
        The end address of the DHCP Range you want to create

    .PARAMETER Space
        The IPAM space where the DHCP Range is to be placed

    .PARAMETER Description
        The description of the DHCP Range you want to create

    .PARAMETER HAGroup
        The name of the HA group to apply to this DHCP Range

    .PARAMETER Tags
        Any tags you want to apply to the DHCP Range

    .EXAMPLE
        PS> New-B1Range -Name "Client Range" -StartAddress "10.250.20.20" -EndAddress "10.250.20.100" -Space "Global" -Description "Range for Client IPs"
    
    .FUNCTIONALITY
        BloxOneDDI
    
    .FUNCTIONALITY
        IPAM

    .FUNCTIONALITY
        DHCP
    #>

    param(
      [Parameter(Mandatory=$true)]
      [String]$Name,
      [Parameter(Mandatory=$true)]
      [String]$StartAddress,
      [Parameter(Mandatory=$true)]
      [String]$EndAddress,
      [Parameter(Mandatory=$true)]
      [string]$Space,
      [String]$Description,
      [String]$HAGroup,
      [System.Object]$Tags
    )

    if (Get-B1Range -StartAddress $StartAddress) {
        Write-Host "DHCP Range already exists." -ForegroundColor Red
    } else {
        Write-Host "Creating DHCP Range..." -ForegroundColor Gray
        $splat = @{
            "name" = $Name
            "comment" = $Description
            "start" = $StartAddress
            "end" = $EndAddress
            "space" = (Get-B1Space -Name $Space -Strict).id
            "inheritance_sources" = @{
                "dhcp_options" = @{
                    "action" = "inherit"
                    "value" = @()
                }
            }
        }

        if ($Tags) {
            $splat | Add-Member -MemberType NoteProperty -Name "tags" -Value $Tags
        }
        if ($HAGroup) {
            $splat | Add-Member -MemberType NoteProperty -Name "dhcp_host" -Value (Get-B1HAGroup -Name $HAGroup -Strict).id
        }

        $splat = $splat | ConvertTo-Json -Depth 10

        $Result = Invoke-CSP -Method POST -Uri "ipam/range" -Data $splat | Select-Object -ExpandProperty result -ErrorAction SilentlyContinue
        if ($Result.start -eq $StartAddress -and $Result.end -eq $EndAddress) {
            Write-Host "Created DHCP Range Successfully. Start: $StartAddress - End: $EndAddress" -ForegroundColor Green
            return $Result
        } else {
            Write-Host "Failed to create DHCP Range." -ForegroundColor Red
        }
    }
}