NetboxPS/Functions/Tenancy/ContactAssignment/New-NetboxContactAssignment.ps1
2023-11-09 11:06:35 -05:00

128 lines
3.5 KiB
PowerShell

#enum NetboxContactAssignmentContentType {
# Circuit = 10
# CircuitProvider = 7
# CircuitProviderAccount = 132
# Device = 19
# Location = 25
# Manufacturer = 29
# PowerPanel = 77
# Rack = 20
# Region = 30
# Site = 18
# SiteGroup = 92
# Tenant = 58
# VirtualizationCluster = 63
# VirtualizationClusterGroup = 64
# VirtualMachine = 61
#}
function New-NetboxContactAssignment {
<#
.SYNOPSIS
Create a new contact role assignment in Netbox
.DESCRIPTION
Creates a new contact role assignment in Netbox
.PARAMETER Content_Type
The content type for this assignment.
.PARAMETER Object_Id
ID of the object to assign.
.PARAMETER Contact
ID of the contact to assign.
.PARAMETER Role
ID of the contact role to assign.
.PARAMETER Priority
Piority of the contact assignment.
.PARAMETER Raw
Return the unparsed data from the HTTP request
.EXAMPLE
PS C:\> New-NetboxContactAssignment -Content_Type Location -Object_id 10 -Contact 15 -Role 10 -Priority Primary
.NOTES
Additional information about the function.
#>
[CmdletBinding(ConfirmImpact = 'Low',
SupportsShouldProcess = $true)]
[OutputType([pscustomobject])]
param
(
[Parameter(Mandatory = $true,
ValueFromPipelineByPropertyName = $true)]
[object]$Content_Type,
#[NetboxContactAssignmentContentType]$Content_Type,
[Parameter(Mandatory = $true)]
[uint64]$Object_Id,
[Parameter(Mandatory = $true)]
[uint64]$Contact,
[Parameter(Mandatory = $true)]
[uint64]$Role,
[ValidateSet('primary', 'secondary', 'tertiary', 'inactive', IgnoreCase = $true)]
[string]$Priority,
[switch]$Raw
)
begin {
# https://docs.netbox.dev/en/stable/features/contacts/
$AllowedContentTypes = @{
10 = "circuits.circuit"
7 = "circuits.provider"
132 = "circuits.provideraccount"
19 = "dcim.device"
25 = "dcim.location"
29 = "dcim.manufacturer"
77 = "dcim.powerpanel"
20 = "dcim.rack"
30 = "dcim.region"
18 = "dcim.site"
92 = "dcim.sitegroup"
58 = "tenancy.tenant"
63 = "virtualization.cluster"
64 = "virtualization.clustergroup"
61 = "virtualization.virtualmachine"
}
}
process {
$Segments = [System.Collections.ArrayList]::new(@('tenancy', 'contact-assignment'))
$Method = 'POST'
if ($Content_Type -is [string]) {
# Need to convert this to an integer
$Content_Type = ($AllowedContentTypes.GetEnumerator() | Where-Object {
$_.Value -eq $Content_Type
}).Key
} elseif ($Content_Type -is [int]) {
if ($Content_Type -notin $($AllowedContentTypes).Keys) {
throw "Invalid content type defined"
}
} else {
throw "Invalid content type defined"
}
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters
$URI = BuildNewURI -Segments $URIComponents.Segments
if ($PSCmdlet.ShouldProcess($Address, 'Create new contact assignment')) {
InvokeNetboxRequest -URI $URI -Method $Method -Body $URIComponents.Parameters -Raw:$Raw
}
}
}