Functions/BloxOne/BloxOneDDI/New-B1AddressReservation.ps1

function New-B1AddressReservation {
    <#
    .SYNOPSIS
        Creates a new address reservation in BloxOneDDI IPAM

    .DESCRIPTION
        This function is used to create a new address reservation in BloxOneDDI IPAM

    .PARAMETER Address
        The IP address for the new reservation

    .PARAMETER Name
        The name for the new reservation

    .PARAMETER Description
        The description of the new reservation

    .PARAMETER Space
        The IPAM space for the new reservation to be placed in

    .PARAMETER Tags
        Any tags you want to apply to the address reservation

    .PARAMETER Force
        Perform the operation without prompting for confirmation. By default, this function will not prompt for confirmation unless $ConfirmPreference is set to Medium.

    .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-B1AddressReservation -Address "10.0.0.1" -Name "MyReservedHost" -Description "My Reserved Host" -Space "Global"

    .FUNCTIONALITY
        BloxOneDDI

    .FUNCTIONALITY
        IPAM
    #>

    [CmdletBinding(
        SupportsShouldProcess,
        ConfirmImpact = 'Medium'
    )]
    param(
      [Parameter(Mandatory=$true)]
      [String]$Address,
      [Parameter(Mandatory=$false)]
      [String]$Name,
      [Parameter(Mandatory=$false)]
      [String]$Description,
      [Parameter(Mandatory=$true)]
      [String]$Space,
      [System.Object]$Tags,
      [Switch]$Force
    )
    $ConfirmPreference = Confirm-ShouldProcess $PSBoundParameters
    if (!(Get-B1Address -Address $Address -Reserved)) {
        $splat = @{
            "space" = (Get-B1Space -Name $Space -Strict).id
            "address" = $Address
            "comment" = $Description
            "names" = @(@{
                    "name" = $Name
                    "type" = "user"
            })
            "tags" = $Tags
        }
        $splat = ConvertTo-Json($splat) -Depth 2

        if($PSCmdlet.ShouldProcess("Create new Address Reservation:`n$($splat)","Create new Address Reservation: $($Name)",$MyInvocation.MyCommand)){
            $Result = Invoke-CSP -Method "POST" -Uri "$(Get-B1CSPUrl)/api/ddi/v1/ipam/address" -Data $splat
            if (($Result | Select-Object -ExpandProperty result).address -eq $Address) {
                Write-Host "Address Reservation created successfully." -ForegroundColor Green
                return $Result | Select-Object -ExpandProperty result
            } else {
                Write-Host "Error. Failed to create Address Reservation $Subnet." -ForegroundColor Red
                break
            }
        }
    } else {
        Write-Host "Address already exists." -ForegroundColor Red
    }
}