Functions/BloxOne/Wrapper/New-B1Object.ps1

function New-B1Object {
    <#
    .SYNOPSIS
        Generic Wrapper for creating new objects within the CSP (Cloud Services Portal)

    .DESCRIPTION
        This is a Generic Wrapper for creating new objects within the CSP (Cloud Services Portal).

    .PARAMETER Product
        Specify the product to use, such as 'BloxOne DDI'.
        This parameter is auto-populated when using tab

    .PARAMETER App
        Specify the App to use, such as 'DnsConfig'
        This parameter is auto-populated when using tab

    .PARAMETER Endpoint
        Specify the API Endpoint to use, such as "/ipam/record".
        This parameter is auto-populated when using tab

    .PARAMETER Data
        The data to submit

    .PARAMETER JSON
        Use this switch if the -Data parameter contains JSON data instead of a PSObject

    .PARAMETER Method
        The method to use when creating new object. Defaults to POST

    .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
        ##This example will create a new DNS Record

        PS> $Splat = @{
                "name_in_zone" = "MyNewRecord"
                "zone" = "dns/auth_zone/12345678-8989-4833-abcd-12345678" ### The DNS Zone ID
                "type" = "A"
                "rdata" = @{
                    "address" = "10.10.10.10"
                }
            }
        PS> New-B1Object -Product 'BloxOne DDI' -App DnsData -Endpoint /dns/record -Data $Splat

    .FUNCTIONALITY
        BloxOneDDI

    .FUNCTIONALITY
        Core
    #>

    [CmdletBinding(
        SupportsShouldProcess,
        ConfirmImpact = 'Medium'
    )]
    param(
        [Parameter(Mandatory=$true)]
        [String]$Product,
        [Parameter(Mandatory=$true)]
        [String]$App,
        [Parameter(Mandatory=$true)]
        [String]$Endpoint,
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        [psobject]$Data,
        [Switch]$JSON,
        [ValidateSet("POST","PUT")]
        $Method = "POST",
        [Switch]$Force
    )

    process {
        $ConfirmPreference = Confirm-ShouldProcess $PSBoundParameters
        $B1CSPUrl = Get-B1CSPUrl
        $BasePath = Get-B1Schema -Product $Product -App $App -Quiet -GetBasePath

        $Uri = "$($B1CSPUrl)$($BasePath)$($Endpoint)$($QueryString)" -replace "\*","``*"
        if (!($JSON)) {
            $Data = $Data | ConvertTo-Json -Depth 15 -Compress
        } else {
            $Data = $JSON
        }
        if($PSCmdlet.ShouldProcess("Create new BloxOne Object:`n$(JSONPretty($Data))","Create new BloxOne Object: $($Endpoint)",$MyInvocation.MyCommand)){
            $Results = Invoke-CSP -Method $Method -Uri $Uri -Data $Data
            if ($Results) {
                return $Results
            }
        }
    }
}