Public/Remove-DuneResourceGroupTemplate.ps1

<#
.SYNOPSIS
Remove a resource group template.

.DESCRIPTION
Deletes a `DuneResourceGroupTemplate` by `Id` or by passing a `DuneResourceGroupTemplate` object via pipeline. Uses `ShouldProcess` to respect confirmation settings.

.PARAMETER Id
The GUID Id of the resource group template to remove.

.PARAMETER ResourceGroupTemplate
A `DuneResourceGroupTemplate` object from the pipeline.

.EXAMPLE
PS> Remove-DuneResourceGroupTemplate -Id 3d8f6b5a-...
Removes the specified resource group template.

.EXAMPLE
PS> Get-DuneResourceGroupTemplate -Name "sql-rg" | Remove-DuneResourceGroupTemplate
Pipeline example removing a resource group template returned from the API.
#>

function Remove-DuneResourceGroupTemplate {
    [CmdletBinding(
        SupportsShouldProcess,
        ConfirmImpact = 'High',
        DefaultParameterSetName = 'Id'
    )]
    param (
        [Parameter(Mandatory, ParameterSetName = "Id")]
        [guid]$Id,

        [Parameter(Mandatory, ParameterSetName = "ResourceGroupTemplate", ValueFromPipeline)]
        [DuneResourceGroupTemplate]$ResourceGroupTemplate
    )

    begin {
        Write-Debug "$($MyInvocation.MyCommand)|begin"
        $Uri = "resourcegrouptemplates"
    }

    process {
        Write-Debug "$($MyInvocation.MyCommand)|process|$($PSCmdlet.ParameterSetName)"
        switch ($PSCmdlet.ParameterSetName) {
            'Id' {
                Write-Debug "$($MyInvocation.MyCommand)|process|$($PSCmdlet.ParameterSetName)|$($Id)"
                $ResourceGroupTemplate = Get-DuneResourceGroupTemplate -Id $Id
            }
            'ResourceGroupTemplate' {
                Write-Debug "$($MyInvocation.MyCommand)|process|$($PSCmdlet.ParameterSetName)|$($ResourceGroupTemplate.Id)"
            }
            Default {
                return
            }
        }
        $Url = $("{0}/{1}" -f $Uri, $ResourceGroupTemplate.Id)
        if ($PSCmdlet.ShouldProcess($ResourceGroupTemplate.Name)) {
            $Null = Invoke-DuneApiRequest $Url -Method DELETE
        }
    }

    end {
        Write-Debug "$($MyInvocation.MyCommand)|end"
    }
}