Skip to content

Commit

Permalink
v1.8.5 (#53)
Browse files Browse the repository at this point in the history
* Update New-NetboxContactAssignment name

* Update Get-NetboxAPIDefinition for new path
- Add $Format parameter for json or yaml

* Move Get-NetboxTag file

* Update psproj

* Add Set-NetboxContactRole and Assignment functions

* Update New-NetboxContactAssignment Content_Type parameter values and validation

* Correct variable references in ShouldProcess

* Update version to 1.8.5

Fixes #51 

---------

Co-authored-by: Ben Claussen <benclaussen@gmail.com>
  • Loading branch information
benclaussen1 and benclaussen authored Nov 9, 2023
1 parent 44dcb25 commit 9e84ec8
Show file tree
Hide file tree
Showing 12 changed files with 426 additions and 126 deletions.
File renamed without changes.
14 changes: 10 additions & 4 deletions Functions/Setup/Support/Get-NetboxAPIDefinition.ps1
Original file line number Diff line number Diff line change
@@ -1,13 +1,19 @@

function Get-NetboxAPIDefinition {
[CmdletBinding()]
param ()
param
(
[ValidateSet('json', 'yaml', IgnoreCase = $true)]
[string]$Format = 'json'
)

#$URI = "https://netbox.neonet.org/api/docs/?format=openapi"
#$URI = "https://netbox.neonet.org/api/schema/?format=json"

$Segments = [System.Collections.ArrayList]::new(@('docs'))
$Segments = [System.Collections.ArrayList]::new(@('schema'))

$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary @{'format' = 'openapi' }
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary @{
'format' = $Format.ToLower()
}

$URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters -SkipConnectedCheck

Expand Down
59 changes: 15 additions & 44 deletions Functions/Tenancy/ContactAssignment/New-NetboxContactAssignment.ps1
Original file line number Diff line number Diff line change
@@ -1,35 +1,35 @@

function New-NetboxContactRole {
function New-NetboxContactAssignment {
<#
.SYNOPSIS
Create a new contact role in Netbox
Create a new contact role assignment in Netbox
.DESCRIPTION
Creates a new contact role object in Netbox
Creates a new contact role assignment in Netbox
.PARAMETER Content_Type
A description of the Content_Type parameter.
The content type for this assignment.
.PARAMETER Object_Id
A description of the Object_Id parameter.
ID of the object to assign.
.PARAMETER Contact
A description of the Contact parameter.
ID of the contact to assign.
.PARAMETER Role
A description of the Role parameter.
ID of the contact role to assign.
.PARAMETER Priority
A description of the Priority parameter.
Piority of the contact assignment.
.PARAMETER Raw
Return the unparsed data from the HTTP request
.EXAMPLE
PS C:\> New-NetboxContactAssignment -Name 'Leroy Jenkins' -Email 'leroy.jenkins@example.com'
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',
Expand All @@ -39,7 +39,8 @@ function New-NetboxContactRole {
(
[Parameter(Mandatory = $true,
ValueFromPipelineByPropertyName = $true)]
[object]$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,
Expand All @@ -57,47 +58,17 @@ function New-NetboxContactRole {
)

begin {
# https://docs.netbox.dev/en/stable/features/contacts/
$AllowedContentTypes = @{
10 = "circuits.circuit"
7 = "circuits.provider"
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
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@


function Set-NetboxContactAssignment {
<#
.SYNOPSIS
Update a contact role assignment in Netbox
.DESCRIPTION
Updates a 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
Priority of the contact assignment.
.PARAMETER Raw
Return the unparsed data from the HTTP request
.EXAMPLE
PS C:\> Set-NetboxContactAssignment -Id 11 -Content_Type 'dcim.location' -Object_id 10 -Contact 15 -Role 10 -Priority 'Primary'
.NOTES
Valid content types: https://docs.netbox.dev/en/stable/features/contacts/#contacts_1
#>

[CmdletBinding(ConfirmImpact = 'Low',
SupportsShouldProcess = $true)]
[OutputType([pscustomobject])]
param
(
[Parameter(Mandatory = $true,
ValueFromPipelineByPropertyName = $true)]
[uint64[]]$Id,

[Parameter(ValueFromPipelineByPropertyName = $true)]
[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,

[uint64]$Object_Id,

[uint64]$Contact,

[uint64]$Role,

[ValidateSet('primary', 'secondary', 'tertiary', 'inactive', IgnoreCase = $true)]
[string]$Priority,

[switch]$Raw
)

begin {
$Method = 'Patch'
}

process {
foreach ($ContactAssignmentId in $Id) {
$Segments = [System.Collections.ArrayList]::new(@('tenancy', 'contact-assignments', $ContactAssignmentId))

$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id', 'Force'

$URI = BuildNewURI -Segments $URIComponents.Segments

$CurrentContactAssignment = Get-NetboxContactAssignment -Id $ContactAssignmentId -ErrorAction Stop

if ($PSCmdlet.ShouldProcess($CurrentContactAssignment.Id, 'Update contact assignment')) {
InvokeNetboxRequest -URI $URI -Method $Method -Body $URIComponents.Parameters -Raw:$Raw
}
}
}
}




2 changes: 1 addition & 1 deletion Functions/Tenancy/ContactRoles/New-NetboxContactRole.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ function New-NetboxContactRole {

$URI = BuildNewURI -Segments $URIComponents.Segments

if ($PSCmdlet.ShouldProcess($Address, 'Create new contact')) {
if ($PSCmdlet.ShouldProcess($Name, 'Create new contact')) {
InvokeNetboxRequest -URI $URI -Method $Method -Body $URIComponents.Parameters -Raw:$Raw
}
}
Expand Down
80 changes: 80 additions & 0 deletions Functions/Tenancy/ContactRoles/Set-NetboxContactRole.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@

function Set-NetboxContactRole {
<#
.SYNOPSIS
Update a contact role in Netbox
.DESCRIPTION
Updates a contact role in Netbox
.PARAMETER Name
The contact role name, e.g "Network Support"
.PARAMETER Slug
The unique URL for the role. Can only contain hypens, A-Z, a-z, 0-9, and underscores
.PARAMETER Description
Short description of the contact role
.PARAMETER Custom_Fields
A description of the Custom_Fields parameter.
.PARAMETER Raw
Return the unparsed data from the HTTP request
.EXAMPLE
PS C:\> New-NetboxContact -Name 'Leroy Jenkins' -Email 'leroy.jenkins@example.com'
.NOTES
Additional information about the function.
#>

[CmdletBinding(ConfirmImpact = 'Low',
SupportsShouldProcess = $true)]
[OutputType([pscustomobject])]
param
(
[Parameter(Mandatory = $true,
ValueFromPipelineByPropertyName = $true)]
[uint64[]]$Id,

[Parameter(ValueFromPipelineByPropertyName = $true)]
[ValidateLength(1, 100)]
[string]$Name,

[ValidateLength(1, 100)]
[ValidatePattern('^[-a-zA-Z0-9_]+$')]
[string]$Slug,

[ValidateLength(0, 200)]
[string]$Description,

[hashtable]$Custom_Fields,

[switch]$Raw
)

begin {
$Method = 'PATCH'
}

process {
foreach ($ContactRoleId in $Id) {
$Segments = [System.Collections.ArrayList]::new(@('tenancy', 'contacts', $ContactRoleId))

$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id', 'Force'

$URI = BuildNewURI -Segments $URIComponents.Segments

$CurrentContactRole = Get-NetboxContactRole -Id $ContactRoleId -ErrorAction Stop

if ($Force -or $PSCmdlet.ShouldProcess($CurrentContactRole.Name, 'Update contact role')) {
InvokeNetboxRequest -URI $URI -Method $Method -Body $URIComponents.Parameters -Raw:$Raw
}
}
}
}




2 changes: 1 addition & 1 deletion Functions/Tenancy/Contacts/New-NetboxContact.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ function New-NetboxContact {

$URI = BuildNewURI -Segments $URIComponents.Segments

if ($PSCmdlet.ShouldProcess($Address, 'Create new contact')) {
if ($PSCmdlet.ShouldProcess($Name, 'Create new contact')) {
InvokeNetboxRequest -URI $URI -Method $Method -Body $URIComponents.Parameters -Raw:$Raw
}
}
Expand Down
2 changes: 1 addition & 1 deletion Functions/Tenancy/Contacts/Set-NetboxContact.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ function Set-NetboxContact {

$URI = BuildNewURI -Segments $URIComponents.Segments

$CurrentContact = Get-NetboxContact -Id $ContactId
$CurrentContact = Get-NetboxContact -Id $ContactId -ErrorAction Stop

if ($Force -or $PSCmdlet.ShouldProcess($CurrentContact.Name, 'Update contact')) {
InvokeNetboxRequest -URI $URI -Method $Method -Body $URIComponents.Parameters -Raw:$Raw
Expand Down
24 changes: 13 additions & 11 deletions NetboxPS.psd1
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#
# Generated by: Ben Claussen
#
# Generated on: 2023-11-07
# Generated on: 2023-11-09
#

@{
Expand All @@ -12,7 +12,7 @@
RootModule = 'NetboxPS.psm1'

# Version number of this module.
ModuleVersion = '1.8.4'
ModuleVersion = '1.8.5'

# Supported PSEditions
# CompatiblePSEditions = @()
Expand Down Expand Up @@ -101,15 +101,17 @@ FunctionsToExport = 'Add-NetboxDCIMFrontPort', 'Add-NetboxDCIMInterface',
'Remove-NetboxDCIMInterfaceConnection', 'Remove-NetboxDCIMRearPort',
'Remove-NetboxDCIMSite', 'Remove-NetboxIPAMAddress',
'Remove-NetboxIPAMAddressRange', 'Remove-NetboxVirtualMachine',
'Set-NetboxCipherSSL', 'Set-NetboxContact', 'Set-NetboxCredential',
'Set-NetboxDCIMDevice', 'Set-NetboxDCIMFrontPort',
'Set-NetboxDCIMInterface', 'Set-NetboxDCIMInterfaceConnection',
'Set-NetboxDCIMRearPort', 'Set-NetboxHostName', 'Set-NetboxHostPort',
'Set-NetboxHostScheme', 'Set-NetboxInvokeParams',
'Set-NetboxIPAMAddress', 'Set-NetboxIPAMAddressRange',
'Set-NetboxIPAMPrefix', 'Set-NetboxTimeout',
'Set-NetboxUnstrustedSSL', 'Set-NetboxVirtualMachine',
'Set-NetboxVirtualMachineInterface', 'Test-NetboxAPIConnected'
'Set-NetboxCipherSSL', 'Set-NetboxContact',
'Set-NetboxContactAssignment', 'Set-NetboxContactRole',
'Set-NetboxCredential', 'Set-NetboxDCIMDevice',
'Set-NetboxDCIMFrontPort', 'Set-NetboxDCIMInterface',
'Set-NetboxDCIMInterfaceConnection', 'Set-NetboxDCIMRearPort',
'Set-NetboxHostName', 'Set-NetboxHostPort', 'Set-NetboxHostScheme',
'Set-NetboxInvokeParams', 'Set-NetboxIPAMAddress',
'Set-NetboxIPAMAddressRange', 'Set-NetboxIPAMPrefix',
'Set-NetboxTimeout', 'Set-NetboxUnstrustedSSL',
'Set-NetboxVirtualMachine', 'Set-NetboxVirtualMachineInterface',
'Test-NetboxAPIConnected'

# Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export.
CmdletsToExport = '*'
Expand Down
Loading

0 comments on commit 9e84ec8

Please sign in to comment.