From b441e02e2bc8355e7d9fa872079632061828d825 Mon Sep 17 00:00:00 2001 From: Ben Claussen Date: Thu, 9 Nov 2023 12:03:21 -0500 Subject: [PATCH] Update New-NetboxContactAssignment Content_Type parameter values and validation --- .../New-NetboxContactAssignment.ps1 | 65 +++---------------- 1 file changed, 8 insertions(+), 57 deletions(-) diff --git a/Functions/Tenancy/ContactAssignment/New-NetboxContactAssignment.ps1 b/Functions/Tenancy/ContactAssignment/New-NetboxContactAssignment.ps1 index adc29e9..c6f37a0 100644 --- a/Functions/Tenancy/ContactAssignment/New-NetboxContactAssignment.ps1 +++ b/Functions/Tenancy/ContactAssignment/New-NetboxContactAssignment.ps1 @@ -1,22 +1,4 @@ -#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 @@ -44,10 +26,10 @@ function New-NetboxContactAssignment { 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 + PS C:\> New-NetboxContactAssignment -Content_Type 'dcim.location' -Object_id 10 -Contact 15 -Role 10 -Priority 'Primary' .NOTES - Additional information about the function. + Valid content types: https://docs.netbox.dev/en/stable/features/contacts/#contacts_1 #> [CmdletBinding(ConfirmImpact = 'Low', @@ -57,8 +39,8 @@ function New-NetboxContactAssignment { ( [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)] - [object]$Content_Type, - #[NetboxContactAssignmentContentType]$Content_Type, + [ValidateSet('circuits.circuit', 'circuits.provider', 'circuits.provideraccount', 'dcim.device', 'dcim.location', 'dcim.manufacturer', 'dcim.powerpanel', 'dcim.rack', 'dcim.region', 'dcim.site', 'dcim.sitegroup', 'tenancy.tenant', 'virtualization.cluster', 'virtualization.clustergroup', 'virtualization.virtualmachine', IgnoreCase = $true)] + [string]$Content_Type, [Parameter(Mandatory = $true)] [uint64]$Object_Id, @@ -76,48 +58,17 @@ function New-NetboxContactAssignment { ) 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" - } + $Method = 'POST' } 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" - } + $Segments = [System.Collections.ArrayList]::new(@('tenancy', 'contact-assignments')) $URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters $URI = BuildNewURI -Segments $URIComponents.Segments - if ($PSCmdlet.ShouldProcess($Address, 'Create new contact assignment')) { + if ($PSCmdlet.ShouldProcess($Content_Type, 'Create new contact assignment')) { InvokeNetboxRequest -URI $URI -Method $Method -Body $URIComponents.Parameters -Raw:$Raw } }