Private/Add-VCDATag.ps1

<#
Copyright 2023 VMware, Inc.
SPDX-License-Identifier: BSD-2-Clause
#>

function Add-VCDATag {
    <#
    .DESCRIPTION
    Create VCDA Tag and assign it to VMs.
    #>

    [CmdletBinding()]
    param (
        # VM to assing the TAG to
        [Parameter(Mandatory=$false, ValueFromPipeline=$true)]
        [VMware.VimAutomation.ViCore.Types.V1.Inventory.VirtualMachine]$VCDA_VM
    )
    begin {
        $TagName = "vmware-avs-vcda-tag"
        $TagDescription = "Tag for VMware VCDA VMs"
        $TagCategoryName = "vmware-avs-vcda-tag-category"
        $TagCategoryDescription = "Tag Category for VMware VCDA"
        try {
            $Tag = Get-Tag -Name $TagName -ErrorAction SilentlyContinue
            $TagCategory = Get-TagCategory -Name $TagCategoryName -ErrorAction SilentlyContinue
            if ($null -eq $TagCategory) {
                Write-Log "Creating VCDA Tag Category '$TagCategoryName'."
                New-TagCategory -Name $TagCategoryName -Description $TagCategoryDescription | Out-Null
            }
            if ($null -eq $Tag) {
                Write-Log -message "Creating VCDA Tag '$TagName'."
                New-Tag -Name $TagName -Category $TagCategoryName -Description $TagDescription | Out-Null
            }
        }
        catch {
            $PSCmdlet.ThrowTerminatingError($_)
        }
    }
    PROCESS {
        try {
            $Tag = Get-Tag -Name $TagName -ErrorAction Stop
            if ($VCDA_VM) {
                Write-Log -message "Assigning Tag to VM '$vcda_vm'."
                $VCDA_VM | New-TagAssignment -Tag $tag | Out-Null
            }
        }
        catch {
            $PSCmdlet.ThrowTerminatingError($_)
        }
    }
}