Compare commits

..

No commits in common. "dev" and "v1.0.4" have entirely different histories.
dev ... v1.0.4

141 changed files with 8059 additions and 76885 deletions

View file

@ -1,16 +0,0 @@
name: CI
on: [pull_request]
jobs:
lint:
name: Run PSSA
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: lint
uses: docker://devblackops/github-action-psscriptanalyzer:2.3.0
with:
settingsPath: .vscode/PSScriptAnalyzerSettings.psd1
sendComment: false
failOnInfos: true
failOnErrors: true
failOnWarnings: true

View file

@ -1,16 +0,0 @@
name: Release
on:
release:
types: [published]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Publish
run: |
pwsh -Command "Publish-Module -Path ./NetboxPS -NuGetApiKey ${{ secrets.PSGALLERY_API_KEY }}"

View file

@ -1,5 +0,0 @@
@{
ExcludeRules = @(
'PSUseToExportFieldsInManifest'
)
}

22
.vscode/settings.json vendored
View file

@ -1,22 +0,0 @@
// Place your settings in this file to overwrite default and user settings.
{
"editor.formatOnSave": true,
"files.trimTrailingWhitespace": true,
"powershell.scriptAnalysis.settingsPath": ".vscode/PSScriptAnalyzerSettings.psd1",
"powershell.codeFormatting.newLineAfterCloseBrace": false,
"powershell.codeFormatting.useCorrectCasing": true,
"powershell.codeFormatting.preset": "OTBS",
"powershell.codeFormatting.addWhitespaceAroundPipe": true,
"powershell.codeFormatting.autoCorrectAliases": true,
"powershell.codeFormatting.newLineAfterCloseBrace": true,
"powershell.codeFormatting.newLineAfterOpenBrace": true,
"powershell.codeFormatting.openBraceOnSameLine": true,
"powershell.codeFormatting.whitespaceAfterSeparator": true,
"powershell.codeFormatting.whitespaceAroundOperator": true,
"powershell.codeFormatting.whitespaceBeforeOpenBrace": true,
"powershell.codeFormatting.whitespaceBeforeOpenParen": true,
"powershell.codeFormatting.trimWhitespaceAroundPipe": true,
"[markdown]": {
"files.trimTrailingWhitespace": false,
}
}

View file

@ -0,0 +1,14 @@
<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2018 v5.5.148
Created on: 2/28/2018 4:06 PM
Created by: Ben Claussen
Organization: NEOnet
Filename: Circuits.ps1
===========================================================================
.DESCRIPTION
Circuit object functions
#>

View file

@ -1,120 +0,0 @@

function Get-NetboxCircuit {
<#
.SYNOPSIS
Gets one or more circuits
.DESCRIPTION
A detailed description of the Get-NetboxCircuit function.
.PARAMETER Id
Database ID of circuit. This will query for exactly the IDs provided
.PARAMETER CID
Circuit ID
.PARAMETER InstallDate
Date of installation
.PARAMETER CommitRate
Committed rate in Kbps
.PARAMETER Query
A raw search query... As if you were searching the web site
.PARAMETER Provider
The name or ID of the provider. Provide either [string] or [uint64]. String will search provider names, integer will search database IDs
.PARAMETER Type
Type of circuit. Provide either [string] or [uint64]. String will search provider type names, integer will search database IDs
.PARAMETER Site
Location/site of circuit. Provide either [string] or [uint64]. String will search site names, integer will search database IDs
.PARAMETER Tenant
Tenant assigned to circuit. Provide either [string] or [uint64]. String will search tenant names, integer will search database IDs
.PARAMETER Limit
A description of the Limit parameter.
.PARAMETER Offset
A description of the Offset parameter.
.PARAMETER Raw
A description of the Raw parameter.
.PARAMETER ID__IN
Multiple unique DB IDs to retrieve
.EXAMPLE
PS C:\> Get-NetboxCircuit
.NOTES
Additional information about the function.
#>
[CmdletBinding(DefaultParameterSetName = 'Query')]
param
(
[Parameter(ParameterSetName = 'ById')]
[uint64[]]$Id,
[Parameter(ParameterSetName = 'Query')]
[string]$CID,
[Parameter(ParameterSetName = 'Query')]
[datetime]$InstallDate,
[Parameter(ParameterSetName = 'Query')]
[uint64]$CommitRate,
[Parameter(ParameterSetName = 'Query')]
[string]$Query,
[Parameter(ParameterSetName = 'Query')]
[object]$Provider,
[Parameter(ParameterSetName = 'Query')]
[object]$Type,
[Parameter(ParameterSetName = 'Query')]
[string]$Site,
[Parameter(ParameterSetName = 'Query')]
[string]$Tenant,
[Parameter(ParameterSetName = 'Query')]
[uint16]$Limit,
[Parameter(ParameterSetName = 'Query')]
[uint16]$Offset,
[switch]$Raw
)
process {
switch ($PSCmdlet.ParameterSetName) {
'ById' {
foreach ($i in $ID) {
$Segments = [System.Collections.ArrayList]::new(@('circuits', 'circuits', $i))
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters -SkipParameterByName "Id"
$URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $URI -Raw:$Raw
}
}
default {
$Segments = [System.Collections.ArrayList]::new(@('circuits', 'circuits'))
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters
$URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $URI -Raw:$Raw
}
}
}
}

View file

@ -1,55 +0,0 @@

function New-NetboxCircuit {
[CmdletBinding(ConfirmImpact = 'Low',
SupportsShouldProcess = $true)]
[OutputType([pscustomobject])]
param
(
[Parameter(Mandatory = $true,
ValueFromPipelineByPropertyName = $true)]
[string]$CID,
[Parameter(Mandatory = $true)]
[uint64]$Provider,
[Parameter(Mandatory = $true)]
[uint64]$Type,
#[ValidateSet('Active', 'Planned', 'Provisioning', 'Offline', 'Deprovisioning', 'Decommissioned ')]
[uint16]$Status = 'Active',
[string]$Description,
[uint64]$Tenant,
[string]$Termination_A,
[datetime]$Install_Date,
[string]$Termination_Z,
[ValidateRange(0, 2147483647)]
[uint64]$Commit_Rate,
[string]$Comments,
[hashtable]$Custom_Fields,
[switch]$Force,
[switch]$Raw
)
process {
$Segments = [System.Collections.ArrayList]::new(@('circuits', 'circuits'))
$Method = 'POST'
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters
$URI = BuildNewURI -Segments $URIComponents.Segments
if ($Force -or $PSCmdlet.ShouldProcess($CID, 'Create new circuit')) {
InvokeNetboxRequest -URI $URI -Method $Method -Body $URIComponents.Parameters -Raw:$Raw
}
}
}

View file

@ -0,0 +1,83 @@
<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/23/2020 12:15
Created by: Claussen
Organization: NEOnet
Filename: Get-NetboxCircuit.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function Get-NetboxCircuit {
<#
.SYNOPSIS
Gets one or more circuits
.DESCRIPTION
A detailed description of the Get-NetboxCircuit function.
.PARAMETER CID
Circuit ID
.PARAMETER InstallDate
Date of installation
.PARAMETER CommitRate
Committed rate in Kbps
.PARAMETER Query
A raw search query... As if you were searching the web site
.PARAMETER Provider
The name or ID of the provider. Provide either [string] or [int]. String will search provider names, integer will search database IDs
.PARAMETER Type
Type of circuit. Provide either [string] or [int]. String will search provider type names, integer will search database IDs
.PARAMETER Site
Location/site of circuit. Provide either [string] or [int]. String will search site names, integer will search database IDs
.PARAMETER Tenant
Tenant assigned to circuit. Provide either [string] or [int]. String will search tenant names, integer will search database IDs
.PARAMETER Id
Database ID of circuit. This will query for exactly the IDs provided
.PARAMETER ID__IN
Multiple unique DB IDs to retrieve
.EXAMPLE
PS C:\> Get-NetboxCircuit
.NOTES
Additional information about the function.
#>
[CmdletBinding()]
param
(
[string]$CID,
[datetime]$InstallDate,
[uint32]$CommitRate,
[string]$Query,
[object]$Provider,
[object]$Type,
[string]$Site,
[string]$Tenant,
[uint16[]]$Id
)
#TODO: Place script here
}

View file

@ -0,0 +1,38 @@
<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/23/2020 12:15
Created by: Claussen
Organization: NEOnet
Filename: Get-NetboxCircuitsChoices.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function Get-NetboxCircuitsChoices {
<#
.SYNOPSIS
Gets the choices associated with circuits
.DESCRIPTION
A detailed description of the Get-NetboxCircuitsChoices function.
.EXAMPLE
PS C:\> Get-NetboxCircuitsChoices
.NOTES
Additional information about the function.
#>
[CmdletBinding()]
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseSingularNouns", "", Justification = "These are literally 'choices' in Netbox")]
param ()
$uriSegments = [System.Collections.ArrayList]::new(@('circuits', '_choices'))
$uri = BuildNewURI -Segments $uriSegments
InvokeNetboxRequest -URI $uri
}

View file

@ -1,58 +0,0 @@

function Get-NetboxCircuitProvider {
[CmdletBinding(DefaultParameterSetName = 'Query')]
param
(
[Parameter(ParameterSetName = 'ById',
Mandatory = $true)]
[uint64[]]$Id,
[Parameter(ParameterSetName = 'Query',
Mandatory = $false)]
[string]$Name,
[Parameter(ParameterSetName = 'Query')]
[string]$Query,
[Parameter(ParameterSetName = 'Query')]
[string]$Slug,
[Parameter(ParameterSetName = 'Query')]
[string]$ASN,
[Parameter(ParameterSetName = 'Query')]
[string]$Account,
[Parameter(ParameterSetName = 'Query')]
[uint16]$Limit,
[Parameter(ParameterSetName = 'Query')]
[uint16]$Offset,
[switch]$Raw
)
switch ($PSCmdlet.ParameterSetName) {
'ById' {
foreach ($i in $ID) {
$Segments = [System.Collections.ArrayList]::new(@('circuits', 'providers', $i))
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters -SkipParameterByName "Id"
$URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $URI -Raw:$Raw
}
}
default {
$Segments = [System.Collections.ArrayList]::new(@('circuits', 'providers'))
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters
$URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $URI -Raw:$Raw
}
}
}

View file

@ -1,65 +0,0 @@

function Get-NetboxCircuitTermination {
[CmdletBinding(DefaultParameterSetName = 'Query')]
param
(
[Parameter(ParameterSetName = 'ById',
ValueFromPipelineByPropertyName = $true)]
[uint64[]]$Id,
[Parameter(ParameterSetName = 'Query')]
[string]$Circuit_ID,
[Parameter(ParameterSetName = 'Query')]
[string]$Term_Side,
[Parameter(ParameterSetName = 'Query')]
[uint64]$Port_Speed,
[Parameter(ParameterSetName = 'Query')]
[string]$Query,
[Parameter(ParameterSetName = 'Query')]
[string]$Site_ID,
[Parameter(ParameterSetName = 'Query')]
[string]$Site,
[Parameter(ParameterSetName = 'Query')]
[string]$XConnect_ID,
[Parameter(ParameterSetName = 'Query')]
[uint16]$Limit,
[Parameter(ParameterSetName = 'Query')]
[uint16]$Offset,
[switch]$Raw
)
process {
switch ($PSCmdlet.ParameterSetName) {
'ById' {
foreach ($i in $ID) {
$Segments = [System.Collections.ArrayList]::new(@('circuits', 'circuit-terminations', $i))
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters -SkipParameterByName "Id"
$URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $URI -Raw:$Raw
}
}
default {
$Segments = [System.Collections.ArrayList]::new(@('circuits', 'circuit-terminations'))
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters
$URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $URI -Raw:$Raw
}
}
}
}

View file

@ -1,50 +0,0 @@

function Get-NetboxCircuitType {
[CmdletBinding(DefaultParameterSetName = 'Query')]
param
(
[Parameter(ParameterSetName = 'ById')]
[uint64[]]$Id,
[Parameter(ParameterSetName = 'Query')]
[string]$Name,
[Parameter(ParameterSetName = 'Query')]
[string]$Slug,
[Parameter(ParameterSetName = 'Query')]
[string]$Query,
[Parameter(ParameterSetName = 'Query')]
[uint16]$Limit,
[Parameter(ParameterSetName = 'Query')]
[uint16]$Offset,
[switch]$Raw
)
switch ($PSCmdlet.ParameterSetName) {
'ById' {
foreach ($i in $ID) {
$Segments = [System.Collections.ArrayList]::new(@('circuits', 'circuit_types', $i))
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters -SkipParameterByName "Id"
$URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $URI -Raw:$Raw
}
}
default {
$Segments = [System.Collections.ArrayList]::new(@('circuits', 'circuit-types'))
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters
$URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $URI -Raw:$Raw
}
}
}

View file

@ -1,35 +0,0 @@
function Get-NetboxDCIMCableTermination {
[CmdletBinding()]
#region Parameters
param
(
[uint16]$Limit,
[uint16]$Offset,
[Parameter(ValueFromPipelineByPropertyName = $true)]
[uint64[]]$Id,
[uint64]$Cable,
[string]$Cable_End,
[string]$Termination_Type,
[uint64]$Termination_ID,
[switch]$Raw
)
#endregion Parameters
process {
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'cable-terminations'))
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Raw'
$URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $URI -Raw:$Raw
}
}

View file

@ -1,55 +0,0 @@
function Get-NetboxDCIMCable {
[CmdletBinding()]
#region Parameters
param
(
[uint16]$Limit,
[uint16]$Offset,
[Parameter(ValueFromPipelineByPropertyName = $true)]
[uint64[]]$Id,
[string]$Label,
[string]$Termination_A_Type,
[uint64]$Termination_A_ID,
[string]$Termination_B_Type,
[uint64]$Termination_B_ID,
[string]$Type,
[string]$Status,
[string]$Color,
[uint64]$Device_ID,
[string]$Device,
[uint64]$Rack_Id,
[string]$Rack,
[uint64]$Location_ID,
[string]$Location,
[switch]$Raw
)
#endregion Parameters
process {
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'cables'))
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Raw'
$URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $URI -Raw:$Raw
}
}

View file

@ -1,4 +1,17 @@

<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/23/2020 12:06
Created by: Claussen
Organization: NEOnet
Filename: Get-NetboxDCIMDevice.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function Get-NetboxDCIMDevice {
[CmdletBinding()]
#region Parameters
@ -9,43 +22,43 @@ function Get-NetboxDCIMDevice {
[uint16]$Offset,
[Parameter(ValueFromPipelineByPropertyName = $true)]
[uint64[]]$Id,
[uint16[]]$Id,
[string]$Query,
[string]$Name,
[uint64]$Manufacturer_Id,
[uint16]$Manufacturer_Id,
[string]$Manufacturer,
[uint64]$Device_Type_Id,
[uint16]$Device_Type_Id,
[uint64]$Role_Id,
[uint16]$Role_Id,
[string]$Role,
[uint64]$Tenant_Id,
[uint16]$Tenant_Id,
[string]$Tenant,
[uint64]$Platform_Id,
[uint16]$Platform_Id,
[string]$Platform,
[string]$Asset_Tag,
[uint64]$Site_Id,
[uint16]$Site_Id,
[string]$Site,
[uint64]$Rack_Group_Id,
[uint16]$Rack_Group_Id,
[uint64]$Rack_Id,
[uint16]$Rack_Id,
[uint64]$Cluster_Id,
[uint16]$Cluster_Id,
[uint64]$Model,
[uint16]$Model,
[object]$Status,
@ -61,7 +74,7 @@ function Get-NetboxDCIMDevice {
[bool]$Has_Primary_IP,
[uint64]$Virtual_Chassis_Id,
[uint16]$Virtual_Chassis_Id,
[uint16]$Position,
@ -72,7 +85,10 @@ function Get-NetboxDCIMDevice {
#endregion Parameters
process {
if ($null -ne $Status) {
$PSBoundParameters.Status = ValidateDCIMChoice -ProvidedValue $Status -DeviceStatus
}
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'devices'))
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Raw'
@ -80,5 +96,4 @@ function Get-NetboxDCIMDevice {
$URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $URI -Raw:$Raw
}
}

View file

@ -1,4 +1,17 @@

<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/23/2020 12:07
Created by: Claussen
Organization: NEOnet
Filename: Get-NetboxDCIMDeviceRole.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function Get-NetboxDCIMDeviceRole {
[CmdletBinding()]
param
@ -8,7 +21,7 @@ function Get-NetboxDCIMDeviceRole {
[uint16]$Offset,
[Parameter(ParameterSetName = 'ById')]
[uint64[]]$Id,
[uint16[]]$Id,
[string]$Name,

View file

@ -1,4 +1,17 @@

<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/23/2020 12:07
Created by: Claussen
Organization: NEOnet
Filename: Get-NetboxDCIMDeviceType.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function Get-NetboxDCIMDeviceType {
[CmdletBinding()]
#region Parameters
@ -8,7 +21,7 @@ function Get-NetboxDCIMDeviceType {
[uint16]$Limit,
[uint64[]]$Id,
[uint16[]]$Id,
[string]$Query,
@ -16,7 +29,7 @@ function Get-NetboxDCIMDeviceType {
[string]$Manufacturer,
[uint64]$Manufacturer_Id,
[uint16]$Manufacturer_Id,
[string]$Model,

View file

@ -1,7 +1,19 @@

<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/23/2020 12:08
Created by: Claussen
Organization: NEOnet
Filename: New-NetboxDCIMDevice.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function New-NetboxDCIMDevice {
[CmdletBinding(ConfirmImpact = 'low',
SupportsShouldProcess = $true)]
[CmdletBinding()]
[OutputType([pscustomobject])]
#region Parameters
param
@ -16,17 +28,17 @@ function New-NetboxDCIMDevice {
[object]$Device_Type,
[Parameter(Mandatory = $true)]
[uint64]$Site,
[uint16]$Site,
[object]$Status = 'Active',
[uint64]$Platform,
[uint16]$Platform,
[uint64]$Tenant,
[uint16]$Tenant,
[uint64]$Cluster,
[uint16]$Cluster,
[uint64]$Rack,
[uint16]$Rack,
[uint16]$Position,
@ -36,15 +48,15 @@ function New-NetboxDCIMDevice {
[string]$Asset_Tag,
[uint64]$Virtual_Chassis,
[uint16]$Virtual_Chassis,
[uint64]$VC_Priority,
[uint16]$VC_Priority,
[uint64]$VC_Position,
[uint16]$VC_Position,
[uint64]$Primary_IP4,
[uint16]$Primary_IP4,
[uint64]$Primary_IP6,
[uint16]$Primary_IP6,
[string]$Comments,
@ -52,13 +64,27 @@ function New-NetboxDCIMDevice {
)
#endregion Parameters
if ($null -ne $Device_Role) {
# Validate device role?
}
if ($null -ne $Device_Type) {
# Validate device type?
}
if ($null -ne $Status) {
$PSBoundParameters.Status = ValidateDCIMChoice -ProvidedValue $Status -DeviceStatus
}
if ($null -ne $Face) {
$PSBoundParameters.Face = ValidateDCIMChoice -ProvidedValue $Face -DeviceFace
}
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'devices'))
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters
$URI = BuildNewURI -Segments $URIComponents.Segments
if ($PSCmdlet.ShouldProcess($Name, 'Create new Device')) {
InvokeNetboxRequest -URI $URI -Body $URIComponents.Parameters -Method POST
}
}

View file

@ -1,4 +1,17 @@

<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/23/2020 12:08
Created by: Claussen
Organization: NEOnet
Filename: Remove-NetboxDCIMDevice.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function Remove-NetboxDCIMDevice {
<#
.SYNOPSIS
@ -26,7 +39,7 @@ function Remove-NetboxDCIMDevice {
(
[Parameter(Mandatory = $true,
ValueFromPipelineByPropertyName = $true)]
[uint64[]]$Id,
[uint16[]]$Id,
[switch]$Force
)

View file

@ -1,11 +1,24 @@

<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/23/2020 12:08
Created by: Claussen
Organization: NEOnet
Filename: Set-NetboxDCIMDevice.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function Set-NetboxDCIMDevice {
[CmdletBinding(SupportsShouldProcess = $true)]
param
(
[Parameter(Mandatory = $true,
ValueFromPipelineByPropertyName = $true)]
[uint64[]]$Id,
[uint16[]]$Id,
[string]$Name,
@ -13,17 +26,17 @@ function Set-NetboxDCIMDevice {
[object]$Device_Type,
[uint64]$Site,
[uint16]$Site,
[object]$Status,
[uint64]$Platform,
[uint16]$Platform,
[uint64]$Tenant,
[uint16]$Tenant,
[uint64]$Cluster,
[uint16]$Cluster,
[uint64]$Rack,
[uint16]$Rack,
[uint16]$Position,
@ -33,15 +46,15 @@ function Set-NetboxDCIMDevice {
[string]$Asset_Tag,
[uint64]$Virtual_Chassis,
[uint16]$Virtual_Chassis,
[uint64]$VC_Priority,
[uint16]$VC_Priority,
[uint64]$VC_Position,
[uint16]$VC_Position,
[uint64]$Primary_IP4,
[uint16]$Primary_IP4,
[uint64]$Primary_IP6,
[uint16]$Primary_IP6,
[string]$Comments,
@ -51,7 +64,13 @@ function Set-NetboxDCIMDevice {
)
begin {
if ($null -ne $Status) {
$PSBoundParameters.Status = ValidateDCIMChoice -ProvidedValue $Status -DeviceStatus
}
if ($null -ne $Face) {
$PSBoundParameters.Face = ValidateDCIMChoice -ProvidedValue $Face -DeviceFace
}
}
process {

View file

@ -1,42 +0,0 @@
function Add-NetboxDCIMFrontPort {
[CmdletBinding()]
[OutputType([pscustomobject])]
param
(
[Parameter(Mandatory = $true)]
[uint64]$Device,
[uint64]$Module,
[Parameter(Mandatory = $true)]
[string]$Name,
[string]$Label,
[Parameter(Mandatory = $true)]
[string]$Type,
[ValidatePattern('^[0-9a-f]{6}$')]
[string]$Color,
[Parameter(Mandatory = $true)]
[uint64]$Rear_Port,
[uint64]$Rear_Port_Position,
[string]$Description,
[bool]$Mark_Connected,
[uint16[]]$Tags
)
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'front-ports'))
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters
$URI = BuildNewURI -Segments $URIComponents.Segments
InvokeNetboxRequest -URI $URI -Body $URIComponents.Parameters -Method POST
}

View file

@ -1,34 +0,0 @@
function Get-NetboxDCIMFrontPort {
[CmdletBinding()]
[OutputType([pscustomobject])]
param
(
[uint16]$Limit,
[uint16]$Offset,
[Parameter(ValueFromPipelineByPropertyName = $true)]
[uint64]$Id,
[string]$Name,
[string]$Device,
[uint64]$Device_Id,
[string]$Type,
[switch]$Raw
)
process {
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'front-ports'))
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters
$URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $URI -Raw:$Raw
}
}

View file

@ -1,35 +0,0 @@
function Remove-NetboxDCIMFrontPort {
[CmdletBinding(ConfirmImpact = 'High',
SupportsShouldProcess = $true)]
param
(
[Parameter(Mandatory = $true,
ValueFromPipelineByPropertyName = $true)]
[uint64[]]$Id,
[switch]$Force
)
begin {
}
process {
foreach ($FrontPortID in $Id) {
$CurrentPort = Get-NetboxDCIMFrontPort -Id $FrontPortID -ErrorAction Stop
if ($Force -or $pscmdlet.ShouldProcess("Name: $($CurrentPort.Name) | ID: $($CurrentPort.Id)", "Remove")) {
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'front-ports', $CurrentPort.Id))
$URI = BuildNewURI -Segments $Segments
InvokeNetboxRequest -URI $URI -Method DELETE
}
}
}
end {
}
}

View file

@ -1,60 +0,0 @@
function Set-NetboxDCIMFrontPort {
[CmdletBinding(ConfirmImpact = 'Medium',
SupportsShouldProcess = $true)]
[OutputType([pscustomobject])]
param
(
[Parameter(Mandatory = $true,
ValueFromPipelineByPropertyName = $true)]
[uint64[]]$Id,
[uint16]$Device,
[uint16]$Module,
[string]$Name,
[string]$Label,
[string]$Type,
[ValidatePattern('^[0-9a-f]{6}$')]
[string]$Color,
[uint64]$Rear_Port,
[uint16]$Rear_Port_Position,
[string]$Description,
[bool]$Mark_Connected,
[uint64[]]$Tags,
[switch]$Force
)
begin {
}
process {
foreach ($FrontPortID in $Id) {
$CurrentPort = Get-NetboxDCIMFrontPort -Id $FrontPortID -ErrorAction Stop
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'front-ports', $CurrentPort.Id))
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id'
$URI = BuildNewURI -Segments $Segments
if ($Force -or $pscmdlet.ShouldProcess("Front Port ID $($CurrentPort.Id)", "Set")) {
InvokeNetboxRequest -URI $URI -Body $URIComponents.Parameters -Method PATCH
}
}
}
end {
}
}

View file

@ -0,0 +1,25 @@
<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/23/2020 12:13
Created by: Claussen
Organization: NEOnet
Filename: Get-NetboxDCIMChoices.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function Get-NetboxDCIMChoices {
[CmdletBinding()]
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseSingularNouns", "", Justification = "These are literally 'choices' in Netbox")]
param ()
$uriSegments = [System.Collections.ArrayList]::new(@('dcim', '_choices'))
$uri = BuildNewURI -Segments $uriSegments -Parameters $Parameters
InvokeNetboxRequest -URI $uri
}

View file

@ -1,4 +1,17 @@

<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/23/2020 12:13
Created by: Claussen
Organization: NEOnet
Filename: Get-NetboxDCIMPlatform.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function Get-NetboxDCIMPlatform {
[CmdletBinding()]
[OutputType([pscustomobject])]
@ -9,13 +22,13 @@ function Get-NetboxDCIMPlatform {
[uint16]$Offset,
[Parameter(ParameterSetName = 'ById')]
[uint64[]]$Id,
[uint16[]]$Id,
[string]$Name,
[string]$Slug,
[uint64]$Manufacturer_Id,
[uint16]$Manufacturer_Id,
[string]$Manufacturer,

View file

@ -1,18 +1,28 @@

<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/23/2020 12:10
Created by: Claussen
Organization: NEOnet
Filename: Add-NetboxDCIMInterface.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function Add-NetboxDCIMInterface {
[CmdletBinding()]
[OutputType([pscustomobject])]
param
(
[Parameter(Mandatory = $true)]
[uint64]$Device,
[uint16]$Device,
[Parameter(Mandatory = $true)]
[string]$Name,
[ValidateSet('virtual', 'bridge', 'lag', '100base-tx', '1000base-t', '2.5gbase-t', '5gbase-t', '10gbase-t', '10gbase-cx4', '1000base-x-gbic', '1000base-x-sfp', '10gbase-x-sfpp', '10gbase-x-xfp', '10gbase-x-xenpak', '10gbase-x-x2', '25gbase-x-sfp28', '50gbase-x-sfp56', '40gbase-x-qsfpp', '50gbase-x-sfp28', '100gbase-x-cfp', '100gbase-x-cfp2', '200gbase-x-cfp2', '100gbase-x-cfp4', '100gbase-x-cpak', '100gbase-x-qsfp28', '200gbase-x-qsfp56', '400gbase-x-qsfpdd', '400gbase-x-osfp', '1000base-kx', '10gbase-kr', '10gbase-kx4', '25gbase-kr', '40gbase-kr4', '50gbase-kr', '100gbase-kp4', '100gbase-kr2', '100gbase-kr4', 'ieee802.11a', 'ieee802.11g', 'ieee802.11n', 'ieee802.11ac', 'ieee802.11ad', 'ieee802.11ax', 'ieee802.11ay', 'ieee802.15.1', 'other-wireless', 'gsm', 'cdma', 'lte', 'sonet-oc3', 'sonet-oc12', 'sonet-oc48', 'sonet-oc192', 'sonet-oc768', 'sonet-oc1920', 'sonet-oc3840', '1gfc-sfp', '2gfc-sfp', '4gfc-sfp', '8gfc-sfpp', '16gfc-sfpp', '32gfc-sfp28', '64gfc-qsfpp', '128gfc-qsfp28', 'infiniband-sdr', 'infiniband-ddr', 'infiniband-qdr', 'infiniband-fdr10', 'infiniband-fdr', 'infiniband-edr', 'infiniband-hdr', 'infiniband-ndr', 'infiniband-xdr', 't1', 'e1', 't3', 'e3', 'xdsl', 'docsis', 'gpon', 'xg-pon', 'xgs-pon', 'ng-pon2', 'epon', '10g-epon', 'cisco-stackwise', 'cisco-stackwise-plus', 'cisco-flexstack', 'cisco-flexstack-plus', 'cisco-stackwise-80', 'cisco-stackwise-160', 'cisco-stackwise-320', 'cisco-stackwise-480', 'juniper-vcp', 'extreme-summitstack', 'extreme-summitstack-128', 'extreme-summitstack-256', 'extreme-summitstack-512', 'other', IgnoreCase = $true)]
[string]$Type,
[bool]$Enabled,
[object]$Form_Factor,
@ -23,7 +33,7 @@ function Add-NetboxDCIMInterface {
[bool]$MGMT_Only,
[uint64]$LAG,
[uint16]$LAG,
[string]$Description,
@ -37,6 +47,10 @@ function Add-NetboxDCIMInterface {
[uint16[]]$Tagged_VLANs
)
if ($null -ne $Form_Factor) {
$PSBoundParameters.Form_Factor = ValidateDCIMChoice -ProvidedValue $Form_Factor -InterfaceFormFactor
}
if (-not [System.String]::IsNullOrWhiteSpace($Mode)) {
$PSBoundParameters.Mode = switch ($Mode) {
'Access' {

View file

@ -1,6 +1,19 @@

<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/23/2020 12:10
Created by: Claussen
Organization: NEOnet
Filename: Add-NetboxDCIMInterfaceConnection.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function Add-NetboxDCIMInterfaceConnection {
<#
<#
.SYNOPSIS
Create a new connection between two interfaces
@ -30,15 +43,19 @@ function Add-NetboxDCIMInterfaceConnection {
[object]$Connection_Status,
[Parameter(Mandatory = $true)]
[uint64]$Interface_A,
[uint16]$Interface_A,
[Parameter(Mandatory = $true)]
[uint64]$Interface_B
[uint16]$Interface_B
)
if ($null -ne $Connection_Status) {
$PSBoundParameters.Connection_Status = ValidateDCIMChoice -ProvidedValue $Connection_Status -InterfaceConnectionStatus
}
# Verify if both Interfaces exist
Get-NetboxDCIMInterface -Id $Interface_A -ErrorAction Stop | Out-null
Get-NetboxDCIMInterface -Id $Interface_B -ErrorAction Stop | Out-null
$I_A = Get-NetboxDCIMInterface -Id $Interface_A -ErrorAction Stop
$I_B = Get-NetboxDCIMInterface -Id $Interface_B -ErrorAction Stop
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'interface-connections'))

View file

@ -1,4 +1,18 @@
function Get-NetboxDCIMInterface {
<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/23/2020 12:09
Created by: Claussen
Organization: NEOnet
Filename: Get-NetboxDCIMInterface.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function Get-NetboxDCIMInterface {
[CmdletBinding()]
[OutputType([pscustomobject])]
param
@ -8,9 +22,9 @@
[uint16]$Offset,
[Parameter(ValueFromPipelineByPropertyName = $true)]
[uint64]$Id,
[uint16]$Id,
[uint64]$Name,
[uint16]$Name,
[object]$Form_Factor,
@ -22,19 +36,21 @@
[string]$Device,
[uint64]$Device_Id,
[uint16]$Device_Id,
[ValidateSet('virtual', 'bridge', 'lag', '100base-tx', '1000base-t', '2.5gbase-t', '5gbase-t', '10gbase-t', '10gbase-cx4', '1000base-x-gbic', '1000base-x-sfp', '10gbase-x-sfpp', '10gbase-x-xfp', '10gbase-x-xenpak', '10gbase-x-x2', '25gbase-x-sfp28', '50gbase-x-sfp56', '40gbase-x-qsfpp', '50gbase-x-sfp28', '100gbase-x-cfp', '100gbase-x-cfp2', '200gbase-x-cfp2', '100gbase-x-cfp4', '100gbase-x-cpak', '100gbase-x-qsfp28', '200gbase-x-qsfp56', '400gbase-x-qsfpdd', '400gbase-x-osfp', '1000base-kx', '10gbase-kr', '10gbase-kx4', '25gbase-kr', '40gbase-kr4', '50gbase-kr', '100gbase-kp4', '100gbase-kr2', '100gbase-kr4', 'ieee802.11a', 'ieee802.11g', 'ieee802.11n', 'ieee802.11ac', 'ieee802.11ad', 'ieee802.11ax', 'ieee802.11ay', 'ieee802.15.1', 'other-wireless', 'gsm', 'cdma', 'lte', 'sonet-oc3', 'sonet-oc12', 'sonet-oc48', 'sonet-oc192', 'sonet-oc768', 'sonet-oc1920', 'sonet-oc3840', '1gfc-sfp', '2gfc-sfp', '4gfc-sfp', '8gfc-sfpp', '16gfc-sfpp', '32gfc-sfp28', '64gfc-qsfpp', '128gfc-qsfp28', 'infiniband-sdr', 'infiniband-ddr', 'infiniband-qdr', 'infiniband-fdr10', 'infiniband-fdr', 'infiniband-edr', 'infiniband-hdr', 'infiniband-ndr', 'infiniband-xdr', 't1', 'e1', 't3', 'e3', 'xdsl', 'docsis', 'gpon', 'xg-pon', 'xgs-pon', 'ng-pon2', 'epon', '10g-epon', 'cisco-stackwise', 'cisco-stackwise-plus', 'cisco-flexstack', 'cisco-flexstack-plus', 'cisco-stackwise-80', 'cisco-stackwise-160', 'cisco-stackwise-320', 'cisco-stackwise-480', 'juniper-vcp', 'extreme-summitstack', 'extreme-summitstack-128', 'extreme-summitstack-256', 'extreme-summitstack-512', 'other', IgnoreCase = $true)]
[string]$Type,
[uint16]$Type,
[uint64]$LAG_Id,
[uint16]$LAG_Id,
[string]$MAC_Address,
[switch]$Raw
)
process {
if ($null -ne $Form_Factor) {
$PSBoundParameters.Form_Factor = ValidateDCIMChoice -ProvidedValue $Form_Factor -InterfaceFormFactor
}
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'interfaces'))
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters
@ -42,5 +58,4 @@
$URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $URI -Raw:$Raw
}
}

View file

@ -1,4 +1,17 @@

<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/23/2020 12:10
Created by: Claussen
Organization: NEOnet
Filename: Get-NetboxDCIMInterfaceConnection.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function Get-NetboxDCIMInterfaceConnection {
[CmdletBinding()]
[OutputType([pscustomobject])]
@ -8,17 +21,21 @@ function Get-NetboxDCIMInterfaceConnection {
[uint16]$Offset,
[uint64]$Id,
[uint16]$Id,
[object]$Connection_Status,
[uint64]$Site,
[uint16]$Site,
[uint64]$Device,
[uint16]$Device,
[switch]$Raw
)
if ($null -ne $Connection_Status) {
$PSBoundParameters.Connection_Status = ValidateDCIMChoice -ProvidedValue $Connection_Status -InterfaceConnectionStatus
}
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'interface-connections'))
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Raw'

View file

@ -1,5 +1,19 @@
function Remove-NetboxDCIMInterface {
<#
<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/23/2020 12:11
Created by: Claussen
Organization: NEOnet
Filename: Remove-NetboxDCIMInterface.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function Remove-NetboxDCIMInterface {
<#
.SYNOPSIS
Removes an interface
@ -25,7 +39,7 @@
(
[Parameter(Mandatory = $true,
ValueFromPipelineByPropertyName = $true)]
[uint64[]]$Id,
[uint16[]]$Id,
[switch]$Force
)

View file

@ -1,4 +1,17 @@

<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/23/2020 12:12
Created by: Claussen
Organization: NEOnet
Filename: Remove-NetboxDCIMInterfaceConnection.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function Remove-NetboxDCIMInterfaceConnection {
[CmdletBinding(ConfirmImpact = 'High',
SupportsShouldProcess = $true)]
@ -7,7 +20,7 @@ function Remove-NetboxDCIMInterfaceConnection {
(
[Parameter(Mandatory = $true,
ValueFromPipelineByPropertyName = $true)]
[uint64[]]$Id,
[uint16[]]$Id,
[switch]$Force
)

View file

@ -1,14 +1,27 @@
function Set-NetboxDCIMInterface {
[CmdletBinding(ConfirmImpact = 'Medium',
SupportsShouldProcess = $true)]
<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/23/2020 12:11
Created by: Claussen
Organization: NEOnet
Filename: Set-NetboxDCIMInterface.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function Set-NetboxDCIMInterface {
[CmdletBinding()]
[OutputType([pscustomobject])]
param
(
[Parameter(Mandatory = $true,
ValueFromPipelineByPropertyName = $true)]
[uint64[]]$Id,
[uint16[]]$Id,
[uint64]$Device,
[uint16]$Device,
[string]$Name,
@ -16,16 +29,13 @@
[object]$Form_Factor,
[ValidateSet('virtual', 'bridge', 'lag', '100base-tx', '1000base-t', '2.5gbase-t', '5gbase-t', '10gbase-t', '10gbase-cx4', '1000base-x-gbic', '1000base-x-sfp', '10gbase-x-sfpp', '10gbase-x-xfp', '10gbase-x-xenpak', '10gbase-x-x2', '25gbase-x-sfp28', '50gbase-x-sfp56', '40gbase-x-qsfpp', '50gbase-x-sfp28', '100gbase-x-cfp', '100gbase-x-cfp2', '200gbase-x-cfp2', '100gbase-x-cfp4', '100gbase-x-cpak', '100gbase-x-qsfp28', '200gbase-x-qsfp56', '400gbase-x-qsfpdd', '400gbase-x-osfp', '1000base-kx', '10gbase-kr', '10gbase-kx4', '25gbase-kr', '40gbase-kr4', '50gbase-kr', '100gbase-kp4', '100gbase-kr2', '100gbase-kr4', 'ieee802.11a', 'ieee802.11g', 'ieee802.11n', 'ieee802.11ac', 'ieee802.11ad', 'ieee802.11ax', 'ieee802.11ay', 'ieee802.15.1', 'other-wireless', 'gsm', 'cdma', 'lte', 'sonet-oc3', 'sonet-oc12', 'sonet-oc48', 'sonet-oc192', 'sonet-oc768', 'sonet-oc1920', 'sonet-oc3840', '1gfc-sfp', '2gfc-sfp', '4gfc-sfp', '8gfc-sfpp', '16gfc-sfpp', '32gfc-sfp28', '64gfc-qsfpp', '128gfc-qsfp28', 'infiniband-sdr', 'infiniband-ddr', 'infiniband-qdr', 'infiniband-fdr10', 'infiniband-fdr', 'infiniband-edr', 'infiniband-hdr', 'infiniband-ndr', 'infiniband-xdr', 't1', 'e1', 't3', 'e3', 'xdsl', 'docsis', 'gpon', 'xg-pon', 'xgs-pon', 'ng-pon2', 'epon', '10g-epon', 'cisco-stackwise', 'cisco-stackwise-plus', 'cisco-flexstack', 'cisco-flexstack-plus', 'cisco-stackwise-80', 'cisco-stackwise-160', 'cisco-stackwise-320', 'cisco-stackwise-480', 'juniper-vcp', 'extreme-summitstack', 'extreme-summitstack-128', 'extreme-summitstack-256', 'extreme-summitstack-512', 'other', IgnoreCase = $true)]
[string]$Type,
[uint16]$MTU,
[string]$MAC_Address,
[bool]$MGMT_Only,
[uint64]$LAG,
[uint16]$LAG,
[string]$Description,
@ -36,12 +46,14 @@
[uint16]$Untagged_VLAN,
[ValidateRange(1, 4094)]
[uint16[]]$Tagged_VLANs,
[switch]$Force
[uint16[]]$Tagged_VLANs
)
begin {
if ($null -ne $Form_Factor) {
$PSBoundParameters.Form_Factor = ValidateDCIMChoice -ProvidedValue $Form_Factor -InterfaceFormFactor
}
if (-not [System.String]::IsNullOrWhiteSpace($Mode)) {
$PSBoundParameters.Mode = switch ($Mode) {
'Access' {
@ -76,11 +88,9 @@
$URI = BuildNewURI -Segments $Segments
if ($Force -or $pscmdlet.ShouldProcess("Interface ID $($CurrentInterface.Id)", "Set")) {
InvokeNetboxRequest -URI $URI -Body $URIComponents.Parameters -Method PATCH
}
}
}
end {

View file

@ -1,4 +1,17 @@

<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/23/2020 12:11
Created by: Claussen
Organization: NEOnet
Filename: Set-NetboxDCIMInterfaceConnection.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function Set-NetboxDCIMInterfaceConnection {
<#
.SYNOPSIS
@ -35,18 +48,22 @@ function Set-NetboxDCIMInterfaceConnection {
(
[Parameter(Mandatory = $true,
ValueFromPipelineByPropertyName = $true)]
[uint64[]]$Id,
[uint16[]]$Id,
[object]$Connection_Status,
[uint64]$Interface_A,
[uint16]$Interface_A,
[uint64]$Interface_B,
[uint16]$Interface_B,
[switch]$Force
)
begin {
if ($null -ne $Connection_Status) {
$PSBoundParameters.Connection_Status = ValidateDCIMChoice -ProvidedValue $Connection_Status -InterfaceConnectionStatus
}
if ((@($ID).Count -gt 1) -and ($Interface_A -or $Interface_B)) {
throw "Cannot set multiple connections to the same interface"
}

View file

@ -1,48 +0,0 @@
function Add-NetboxDCIMRearPort {
[CmdletBinding()]
[OutputType([pscustomobject])]
param
(
[Parameter(Mandatory = $true)]
[uint64]$Device,
[uint64]$Module,
[Parameter(Mandatory = $true)]
[string]$Name,
[string]$Label,
[Parameter(Mandatory = $true)]
[string]$Type,
[ValidatePattern('^[0-9a-f]{6}$')]
[string]$Color,
[uint16]$Positions = 1,
[string]$Description,
[bool]$Mark_Connected,
[uint16[]]$Tags
)
begin {
}
process {
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'rear-ports'))
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters
$URI = BuildNewURI -Segments $URIComponents.Segments
InvokeNetboxRequest -URI $URI -Body $URIComponents.Parameters -Method POST
}
end {
}
}

View file

@ -1,34 +0,0 @@
function Get-NetboxDCIMRearPort {
[CmdletBinding()]
[OutputType([pscustomobject])]
param
(
[uint16]$Limit,
[uint16]$Offset,
[Parameter(ValueFromPipelineByPropertyName = $true)]
[uint64]$Id,
[string]$Name,
[string]$Device,
[uint64]$Device_Id,
[string]$Type,
[switch]$Raw
)
process {
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'rear-ports'))
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters
$URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $URI -Raw:$Raw
}
}

View file

@ -1,35 +0,0 @@
function Remove-NetboxDCIMRearPort {
[CmdletBinding(ConfirmImpact = 'High',
SupportsShouldProcess = $true)]
param
(
[Parameter(Mandatory = $true,
ValueFromPipelineByPropertyName = $true)]
[uint64[]]$Id,
[switch]$Force
)
begin {
}
process {
foreach ($RearPortID in $Id) {
$CurrentPort = Get-NetboxDCIMRearPort -Id $RearPortID -ErrorAction Stop
if ($Force -or $pscmdlet.ShouldProcess("Name: $($CurrentPort.Name) | ID: $($CurrentPort.Id)", "Remove")) {
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'rear-ports', $CurrentPort.Id))
$URI = BuildNewURI -Segments $Segments
InvokeNetboxRequest -URI $URI -Method DELETE
}
}
}
end {
}
}

View file

@ -1,59 +0,0 @@

function Set-NetboxDCIMRearPort {
[CmdletBinding(ConfirmImpact = 'Medium',
SupportsShouldProcess = $true)]
[OutputType([pscustomobject])]
param
(
[Parameter(Mandatory = $true,
ValueFromPipelineByPropertyName = $true)]
[uint64[]]$Id,
[uint64]$Device,
[uint64]$Module,
[string]$Name,
[string]$Label,
[string]$Type,
[ValidatePattern('^[0-9a-f]{6}$')]
[string]$Color,
[uint16]$Positions,
[string]$Description,
[bool]$Mark_Connected,
[uint16[]]$Tags,
[switch]$Force
)
begin {
}
process {
foreach ($RearPortID in $Id) {
$CurrentPort = Get-NetboxDCIMRearPort -Id $RearPortID -ErrorAction Stop
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'rear-ports', $CurrentPort.Id))
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id'
$URI = BuildNewURI -Segments $Segments
if ($Force -or $pscmdlet.ShouldProcess("Rear Port ID $($CurrentPort.Id)", "Set")) {
InvokeNetboxRequest -URI $URI -Body $URIComponents.Parameters -Method PATCH
}
}
}
end {
}
}

View file

@ -1,95 +0,0 @@

function Get-NetboxDCIMSite {
[CmdletBinding(DefaultParameterSetName = 'Query')]
[OutputType([pscustomobject])]
param
(
[Parameter(ParameterSetName = 'ByID', ValueFromPipelineByPropertyName = $true)]
[uint64]$Id,
[Parameter(ParameterSetName = 'Query')]
[string]$Name,
[Parameter(ParameterSetName = 'Query')]
[string]$Query,
[Parameter(ParameterSetName = 'Query')]
[string]$Slug,
[Parameter(ParameterSetName = 'Query')]
[string]$Facility,
[Parameter(ParameterSetName = 'Query')]
[uint64]$ASN,
[Parameter(ParameterSetName = 'Query')]
[decimal]$Latitude,
[Parameter(ParameterSetName = 'Query')]
[decimal]$Longitude,
[Parameter(ParameterSetName = 'Query')]
[string]$Contact_Name,
[Parameter(ParameterSetName = 'Query')]
[string]$Contact_Phone,
[Parameter(ParameterSetName = 'Query')]
[string]$Contact_Email,
[Parameter(ParameterSetName = 'Query')]
[uint64]$Tenant_Group_ID,
[Parameter(ParameterSetName = 'Query')]
[string]$Tenant_Group,
[Parameter(ParameterSetName = 'Query')]
[uint64]$Tenant_ID,
[Parameter(ParameterSetName = 'Query')]
[string]$Tenant,
[Parameter(ParameterSetName = 'Query')]
[string]$Status,
[Parameter(ParameterSetName = 'Query')]
[uint64]$Region_ID,
[Parameter(ParameterSetName = 'Query')]
[string]$Region,
[Parameter(ParameterSetName = 'Query')]
[uint16]$Limit,
[Parameter(ParameterSetName = 'Query')]
[uint16]$Offset,
[switch]$Raw
)
process {
switch ($PSCmdlet.ParameterSetName) {
'ById' {
foreach ($Site_ID in $ID) {
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'sites', $Site_Id))
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters -SkipParameterByName "Id"
$URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $URI -Raw:$Raw
}
}
default {
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'sites'))
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters
$URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $URI -Raw:$Raw
}
}
}
}

View file

@ -1,86 +0,0 @@
<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.181
Created on: 2020-10-02 15:52
Created by: Claussen
Organization: NEOnet
Filename: New-NetboxDCIMSite.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function New-NetboxDCIMSite {
<#
.SYNOPSIS
Create a new Site to Netbox
.DESCRIPTION
Create a new Site to Netbox
.EXAMPLE
New-NetboxDCIMSite -name MySite
Add new Site MySite on Netbox
#>
[CmdletBinding(ConfirmImpact = 'Low',
SupportsShouldProcess = $true)]
[OutputType([pscustomobject])]
param
(
[Parameter(Mandatory = $true)]
[string]$Name,
[string]$Slug,
[string]$Facility,
[uint64]$ASN,
[decimal]$Latitude,
[decimal]$Longitude,
[string]$Contact_Name,
[string]$Contact_Phone,
[string]$Contact_Email,
[uint64]$Tenant_Group,
[uint64]$Tenant,
[string]$Status,
[uint64]$Region,
[string]$Description,
[string]$Comments,
[switch]$Raw
)
process {
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'sites'))
$Method = 'POST'
if (-not $PSBoundParameters.ContainsKey('slug')) {
$PSBoundParameters.Add('slug', $name)
}
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters
$URI = BuildNewURI -Segments $URIComponents.Segments
if ($PSCmdlet.ShouldProcess($name, 'Create new Site')) {
InvokeNetboxRequest -URI $URI -Method $Method -Body $URIComponents.Parameters -Raw:$Raw
}
}
}

View file

@ -1,64 +0,0 @@
<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.181
Created on: 2020-10-02 15:52
Created by: Claussen
Organization: NEOnet
Filename: New-NetboxDCIMSite.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function Remove-NetboxDCIMSite {
<#
.SYNOPSIS
Remove a Site
.DESCRIPTION
Remove a DCIM Site from Netbox
.EXAMPLE
Remove-NetboxDCIMSite -Id 1
Remove DCM Site with id 1
.EXAMPLE
Get-NetboxDCIMSite -name My Site | Remove-NetboxDCIMSite -confirm:$false
Remove DCM Site with name My Site without confirmation
#>
[CmdletBinding(ConfirmImpact = 'High',
SupportsShouldProcess = $true)]
param
(
[Parameter(Mandatory = $true,
ValueFromPipelineByPropertyName = $true)]
[uint]$Id
)
begin {
}
process {
$CurrentSite = Get-NetboxDCIMSite -Id $Id -ErrorAction Stop
if ($pscmdlet.ShouldProcess("$($CurrentSite.Name)/$($CurrentSite.Id)", "Remove Site")) {
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'sites', $CurrentSite.Id))
$URI = BuildNewURI -Segments $Segments
InvokeNetboxRequest -URI $URI -Method DELETE
}
}
end {
}
}

View file

@ -0,0 +1,102 @@
function ValidateDCIMChoice {
<#
.SYNOPSIS
Internal function to validate provided values for static choices
.DESCRIPTION
When users connect to the API, choices for each major object are cached to the config variable.
These values are then utilized to validate if the provided value from a user is valid.
.PARAMETER ProvidedValue
The value to validate against static choices
.PARAMETER PowerConnectionStatus
Validate against power connection status values
.PARAMETER InterfaceTemplateFormFactor
Validate against interface template form factor values
.PARAMETER InterfaceConnectionStatus
Validate against interface connection status values
.PARAMETER InterfaceFormFactor
Validate against interface form factor values
.PARAMETER ConsolePortConnectionStatus
Validate against console port connection status values
.PARAMETER DeviceStatus
Validate against device status values
.PARAMETER DeviceFace
Validate against device face values
.PARAMETER RackType
Validate against rack type values
.PARAMETER RackWidth
Validate against rack width values.
.EXAMPLE
PS C:\> ValidateDCIMChoice -ProvidedValue 'rear' -DeviceFace
.EXAMPLE
PS C:\> ValidateDCIMChoice -ProvidedValue 'middle' -DeviceFace
>> Invalid value middle for device:face. Must be one of: 0, 1, Front, Rear
.OUTPUTS
This function returns the integer value if valid. Otherwise, it will throw an error.
.NOTES
Additional information about the function.
.FUNCTIONALITY
This cmdlet is intended to be used internally and not exposed to the user
#>
[CmdletBinding()]
[OutputType([uint16])]
param
(
[Parameter(Mandatory = $true)]
[object]$ProvidedValue,
[Parameter(ParameterSetName = 'power-port:connection_status',
Mandatory = $true)]
[switch]$PowerConnectionStatus,
[Parameter(ParameterSetName = 'interface-template:form_factor',
Mandatory = $true)]
[switch]$InterfaceTemplateFormFactor,
[Parameter(ParameterSetName = 'interface-connection:connection_status',
Mandatory = $true)]
[switch]$InterfaceConnectionStatus,
[Parameter(ParameterSetName = 'interface:form_factor',
Mandatory = $true)]
[switch]$InterfaceFormFactor,
[Parameter(ParameterSetName = 'console-port:connection_status',
Mandatory = $true)]
[switch]$ConsolePortConnectionStatus,
[Parameter(ParameterSetName = 'device:status',
Mandatory = $true)]
[switch]$DeviceStatus,
[Parameter(ParameterSetName = 'device:face',
Mandatory = $true)]
[switch]$DeviceFace,
[Parameter(ParameterSetName = 'rack:type',
Mandatory = $true)]
[switch]$RackType,
[Parameter(ParameterSetName = 'rack:width',
Mandatory = $true)]
[switch]$RackWidth
)
ValidateChoice -MajorObject 'DCIM' -ChoiceName $PSCmdlet.ParameterSetName -ProvidedValue $ProvidedValue
}

View file

@ -0,0 +1,11 @@
function Get-NetboxExtrasChoices {
[CmdletBinding()]
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseSingularNouns", "", Justification = "These are literally 'choices' in Netbox")]
param ()
$uriSegments = [System.Collections.ArrayList]::new(@('extras', '_choices'))
$uri = BuildNewURI -Segments $uriSegments
InvokeNetboxRequest -URI $uri
}

View file

@ -1,31 +0,0 @@

function Get-NetboxTag {
[CmdletBinding()]
[OutputType([pscustomobject])]
param
(
[Parameter(ValueFromPipelineByPropertyName = $true)]
[uint64]$Id,
[string]$Name,
[string]$Slug,
[uint16]$Limit,
[uint16]$Offset,
[switch]$Raw
)
process {
$Segments = [System.Collections.ArrayList]::new(@('extras', 'tags'))
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters
$URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $URI -Raw:$Raw
}
}

View file

@ -1,4 +1,17 @@

<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/26/2020 14:22
Created by: Claussen
Organization: NEOnet
Filename: BuildNewURI.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function BuildNewURI {
<#
.SYNOPSIS
@ -36,12 +49,21 @@ function BuildNewURI {
[OutputType([System.UriBuilder])]
param
(
[Parameter(Mandatory = $false)]
[string]$Hostname,
[Parameter(Mandatory = $false)]
[string[]]$Segments,
[Parameter(Mandatory = $false)]
[hashtable]$Parameters,
[Parameter(Mandatory = $false)]
[boolean]$HTTPS = $true,
[ValidateRange(1, 65535)]
[uint16]$Port = 443,
[switch]$SkipConnectedCheck
)
@ -52,8 +74,28 @@ function BuildNewURI {
$null = CheckNetboxIsConnected
}
if (-not $Hostname) {
$Hostname = Get-NetboxHostname
}
if ($HTTPS) {
Write-Verbose " Setting scheme to HTTPS"
$Scheme = 'https'
} else {
Write-Warning " Connecting via non-secure HTTP is not-recommended"
Write-Verbose " Setting scheme to HTTP"
$Scheme = 'http'
if (-not $PSBoundParameters.ContainsKey('Port')) {
# Set the port to 80 if the user did not supply it
Write-Verbose " Setting port to 80 as default because it was not supplied by the user"
$Port = 80
}
}
# Begin a URI builder with HTTP/HTTPS and the provided hostname
$uriBuilder = [System.UriBuilder]::new($script:NetboxConfig.HostScheme, $script:NetboxConfig.Hostname, $script:NetboxConfig.HostPort)
$uriBuilder = [System.UriBuilder]::new($Scheme, $Hostname, $Port)
# Generate the path by trimming excess slashes and whitespace from the $segments[] and joining together
$uriBuilder.Path = "api/{0}/" -f ($Segments.ForEach({

View file

@ -1,4 +1,17 @@

<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/26/2020 14:23
Created by: Claussen
Organization: NEOnet
Filename: BuildURIComponents.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function BuildURIComponents {
[CmdletBinding()]
[OutputType([hashtable])]

View file

@ -1,4 +1,17 @@

<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/26/2020 14:22
Created by: Claussen
Organization: NEOnet
Filename: CheckNetboxIsConnected.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function CheckNetboxIsConnected {
[CmdletBinding()]
param ()

View file

@ -1,4 +1,17 @@

<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/26/2020 14:25
Created by: Claussen
Organization: NEOnet
Filename: CreateEnum.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function CreateEnum {
[CmdletBinding()]
param

View file

@ -1,50 +0,0 @@

function Get-ModelDefinition {
[CmdletBinding(DefaultParameterSetName = 'ByName')]
param
(
[Parameter(ParameterSetName = 'ByName',
Mandatory = $true)]
[string]$ModelName,
[Parameter(ParameterSetName = 'ByPath',
Mandatory = $true)]
[string]$URIPath,
[Parameter(ParameterSetName = 'ByPath')]
[string]$Method = "post"
)
switch ($PsCmdlet.ParameterSetName) {
'ByName' {
$script:NetboxConfig.APIDefinition.definitions.$ModelName
break
}
'ByPath' {
switch ($Method) {
"get" {
break
}
"post" {
if (-not $URIPath.StartsWith('/')) {
$URIPath = "/$URIPath"
}
if (-not $URIPath.EndsWith('/')) {
$URIPath = "$URIPath/"
}
$ModelName = $script:NetboxConfig.APIDefinition.paths.$URIPath.post.parameters.schema.'$ref'.split('/')[-1]
$script:NetboxConfig.APIDefinition.definitions.$ModelName
break
}
}
break
}
}
}

View file

@ -0,0 +1,41 @@
<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/26/2020 14:23
Created by: Claussen
Organization: NEOnet
Filename: GetChoiceValidValues.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function GetChoiceValidValues {
[CmdletBinding()]
[OutputType([System.Collections.ArrayList])]
param
(
[Parameter(Mandatory = $true)]
[string]$MajorObject,
[Parameter(Mandatory = $true)]
[object]$Choice
)
$ValidValues = New-Object System.Collections.ArrayList
if (-not $script:NetboxConfig.Choices.$MajorObject.$Choice) {
throw "Missing choices for $Choice"
}
[void]$ValidValues.AddRange($script:NetboxConfig.Choices.$MajorObject.$Choice.value)
[void]$ValidValues.AddRange($script:NetboxConfig.Choices.$MajorObject.$Choice.label)
if ($ValidValues.Count -eq 0) {
throw "Missing valid values for $MajorObject.$Choice"
}
return [System.Collections.ArrayList]$ValidValues
}

View file

@ -1,4 +1,17 @@

<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/26/2020 14:23
Created by: Claussen
Organization: NEOnet
Filename: GetNetboxAPIErrorBody.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function GetNetboxAPIErrorBody {
param
(

View file

@ -1,4 +1,17 @@

<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/26/2020 14:24
Created by: Claussen
Organization: NEOnet
Filename: InvokeNetboxRequest.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function InvokeNetboxRequest {
[CmdletBinding()]
param
@ -11,10 +24,10 @@ function InvokeNetboxRequest {
[pscustomobject]$Body = $null,
[ValidateRange(1, 65535)]
[uint16]$Timeout = (Get-NetboxTimeout),
[ValidateRange(0, 60)]
[uint16]$Timeout = 5,
[ValidateSet('GET', 'PATCH', 'PUT', 'POST', 'DELETE', 'OPTIONS', IgnoreCase = $true)]
[ValidateSet('GET', 'PATCH', 'PUT', 'POST', 'DELETE', IgnoreCase = $true)]
[string]$Method = 'GET',
[switch]$Raw
@ -34,8 +47,6 @@ function InvokeNetboxRequest {
'Verbose' = $VerbosePreference
}
$splat += Get-NetboxInvokeParams
if ($Body) {
Write-Verbose "BODY: $($Body | ConvertTo-Json -Compress)"
$null = $splat.Add('Body', ($Body | ConvertTo-Json -Compress))

View file

@ -1,4 +1,17 @@

<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/26/2020 14:25
Created by: Claussen
Organization: NEOnet
Filename: ThrowNetboxRESTError.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function ThrowNetboxRESTError {
$uriSegments = [System.Collections.ArrayList]::new(@('fake', 'url'))

View file

@ -0,0 +1,76 @@
<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/26/2020 14:23
Created by: Claussen
Organization: NEOnet
Filename: ValidateChoice.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function ValidateChoice {
[CmdletBinding()]
[OutputType([uint16], [string], [bool])]
param
(
[Parameter(Mandatory = $true)]
[ValidateSet('Circuits', 'DCIM', 'Extras', 'IPAM', 'Virtualization', IgnoreCase = $true)]
[string]$MajorObject,
[Parameter(Mandatory = $true)]
[string]$ChoiceName,
[Parameter(Mandatory = $true)]
[object]$ProvidedValue
)
$ValidValues = GetChoiceValidValues -MajorObject $MajorObject -Choice $ChoiceName
Write-Verbose "Validating $ChoiceName"
Write-Verbose "Checking '$ProvidedValue' against [$($ValidValues -join ', ')]"
# Coercing everything to strings for matching...
# some values are integers, some are strings, some are booleans
# Join the valid values with a pipe as a delimeter, because some values have spaces
if (([string]($ValidValues -join '|') -split '\|') -inotcontains [string]$ProvidedValue) {
throw "Invalid value '$ProvidedValue' for '$ChoiceName'. Must be one of: $($ValidValues -join ', ')"
}
switch -wildcard ("$MajorObject/$ChoiceName") {
"Circuits" {
# This has things that are not integers
}
"DCIM/*connection_status" {
# This has true/false values instead of integers
try {
$val = [bool]::Parse($ProvidedValue)
} catch {
# It must not be a true/false value
$val = $script:NetboxConfig.Choices.$MajorObject.$ChoiceName.Where({
$_.Label -eq $ProvidedValue
}).Value
}
return $val
}
default {
# Convert the ProvidedValue to the integer value
try {
$intVal = [uint16]"$ProvidedValue"
} catch {
# It must not be a number, get the value from the label
$intVal = [uint16]$script:NetboxConfig.Choices.$MajorObject.$ChoiceName.Where({
$_.Label -eq $ProvidedValue
}).Value
}
return $intVal
}
}
}

View file

@ -1,84 +1,60 @@
function Get-NetboxIPAMAddress {
[CmdletBinding(DefaultParameterSetName = 'Query')]
[CmdletBinding()]
param
(
[Parameter(ParameterSetName = 'Query',
Position = 0)]
[string]$Address,
[Parameter(ParameterSetName = 'ByID')]
[uint64[]]$Id,
[uint16[]]$Id,
[Parameter(ParameterSetName = 'Query')]
[string]$Query,
[Parameter(ParameterSetName = 'Query')]
[object]$Family,
[Parameter(ParameterSetName = 'Query')]
[string]$Parent,
[uint16]$Parent,
[Parameter(ParameterSetName = 'Query')]
[byte]$Mask_Length,
[Parameter(ParameterSetName = 'Query')]
[string]$VRF,
[Parameter(ParameterSetName = 'Query')]
[uint64]$VRF_Id,
[uint16]$VRF_Id,
[Parameter(ParameterSetName = 'Query')]
[string]$Tenant,
[Parameter(ParameterSetName = 'Query')]
[uint64]$Tenant_Id,
[uint16]$Tenant_Id,
[Parameter(ParameterSetName = 'Query')]
[string]$Device,
[Parameter(ParameterSetName = 'Query')]
[uint64]$Device_ID,
[uint16]$Device_ID,
[Parameter(ParameterSetName = 'Query')]
[string]$Virtual_Machine,
[Parameter(ParameterSetName = 'Query')]
[uint64]$Virtual_Machine_Id,
[uint16]$Virtual_Machine_Id,
[Parameter(ParameterSetName = 'Query')]
[uint64]$Interface_Id,
[uint16]$Interface_Id,
[Parameter(ParameterSetName = 'Query')]
[object]$Status,
[Parameter(ParameterSetName = 'Query')]
[object]$Role,
[Parameter(ParameterSetName = 'Query')]
[uint16]$Limit,
[Parameter(ParameterSetName = 'Query')]
[uint16]$Offset,
[switch]$Raw
)
switch ($PSCmdlet.ParameterSetName) {
'ById' {
foreach ($IP_ID in $Id) {
$Segments = [System.Collections.ArrayList]::new(@('ipam', 'ip-addresses', $IP_ID))
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id'
$uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $uri -Raw:$Raw
if ($null -ne $Family) {
$PSBoundParameters.Family = ValidateIPAMChoice -ProvidedValue $Family -IPAddressFamily
}
break
if ($null -ne $Status) {
$PSBoundParameters.Status = ValidateIPAMChoice -ProvidedValue $Status -IPAddressStatus
}
if ($null -ne $Role) {
$PSBoundParameters.Role = ValidateIPAMChoice -ProvidedValue $Role -IPAddressRole
}
default {
$Segments = [System.Collections.ArrayList]::new(@('ipam', 'ip-addresses'))
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters
@ -86,8 +62,4 @@
$uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $uri -Raw:$Raw
break
}
}
}

View file

@ -1,6 +1,19 @@

<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/19/2020 11:50
Created by: Claussen
Organization: NEOnet
Filename: Get-NetboxIPAMAvailableIP.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function Get-NetboxIPAMAvailableIP {
<#
<#
.SYNOPSIS
A convenience method for returning available IP addresses within a prefix
@ -21,14 +34,7 @@ function Get-NetboxIPAMAvailableIP {
A description of the NumberOfIPs parameter.
.EXAMPLE
Get-NetboxIPAMAvailableIP -Prefix_ID (Get-NetboxIPAMPrefix -Prefix 192.0.2.0/24).id
Get (Next) Available IP on the Prefix 192.0.2.0/24
.EXAMPLE
Get-NetboxIPAMAvailableIP -Prefix_ID 2 -NumberOfIPs 3
Get 3 (Next) Available IP on the Prefix 192.0.2.0/24
PS C:\> Get-NetboxIPAMAvaiableIP -Prefix_ID $value1
.NOTES
Additional information about the function.
@ -40,15 +46,14 @@ function Get-NetboxIPAMAvailableIP {
[Parameter(Mandatory = $true,
ValueFromPipelineByPropertyName = $true)]
[Alias('Id')]
[uint64]$Prefix_ID,
[uint16]$Prefix_ID,
[Alias('NumberOfIPs')]
[uint64]$Limit,
[uint16]$Limit,
[switch]$Raw
)
process {
$Segments = [System.Collections.ArrayList]::new(@('ipam', 'prefixes', $Prefix_ID, 'available-ips'))
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters -SkipParameterByName 'prefix_id'
@ -56,5 +61,4 @@ function Get-NetboxIPAMAvailableIP {
$uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $uri -Raw:$Raw
}
}

View file

@ -1,6 +1,19 @@

<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/19/2020 11:51
Created by: Claussen
Organization: NEOnet
Filename: New-NetboxIPAMAddress.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function New-NetboxIPAMAddress {
<#
<#
.SYNOPSIS
Create a new IP address to Netbox
@ -34,77 +47,53 @@ function New-NetboxIPAMAddress {
.PARAMETER Description
Description of IP address
.PARAMETER Dns_name
DNS Name of IP address (example : netbox.example.com)
.PARAMETER Assigned_Object_Type
Assigned Object Type dcim.interface or virtualization.vminterface
.PARAMETER Assigned_Object_Id
Assigned Object ID
.PARAMETER Raw
Return raw results from API service
.EXAMPLE
New-NetboxIPAMAddress -Address 192.0.2.1/32
Add new IP Address 192.0.2.1/32 with status active
PS C:\> Create-NetboxIPAMAddress
.NOTES
Additional information about the function.
#>
[CmdletBinding(ConfirmImpact = 'Low',
SupportsShouldProcess = $true)]
[CmdletBinding()]
[OutputType([pscustomobject])]
param
(
[Parameter(Mandatory = $true,
ValueFromPipelineByPropertyName = $true)]
[Parameter(Mandatory = $true)]
[string]$Address,
[object]$Status = 'Active',
[uint64]$Tenant,
[uint16]$Tenant,
[uint64]$VRF,
[uint16]$VRF,
[object]$Role,
[uint64]$NAT_Inside,
[uint16]$NAT_Inside,
[hashtable]$Custom_Fields,
[uint64]$Interface,
[uint16]$Interface,
[string]$Description,
[string]$Dns_name,
[ValidateSet('dcim.interface', 'virtualization.vminterface', IgnoreCase = $true)]
[string]$Assigned_Object_Type,
[uint64]$Assigned_Object_Id,
[switch]$Raw
)
process {
$Segments = [System.Collections.ArrayList]::new(@('ipam', 'ip-addresses'))
$Method = 'POST'
$PSBoundParameters.Status = ValidateIPAMChoice -ProvidedValue $Status -IPAddressStatus
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters
if ($null -ne $Role) {
$PSBoundParameters.Role = ValidateIPAMChoice -ProvidedValue $Role -IPAddressRole
}
$segments = [System.Collections.ArrayList]::new(@('ipam', 'ip-addresses'))
$URIComponents = BuildURIComponents -URISegments $segments -ParametersDictionary $PSBoundParameters
$URI = BuildNewURI -Segments $URIComponents.Segments
if ($PSCmdlet.ShouldProcess($Address, 'Create new IP address')) {
InvokeNetboxRequest -URI $URI -Method $Method -Body $URIComponents.Parameters -Raw:$Raw
}
}
InvokeNetboxRequest -URI $URI -Method POST -Body $URIComponents.Parameters -Raw:$Raw
}

View file

@ -1,6 +1,18 @@

<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/19/2020 11:52
Created by: Claussen
Organization: NEOnet
Filename: Remove-NetboxIPAMAddress.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function Remove-NetboxIPAMAddress {
<#
<#
.SYNOPSIS
Remove an IP address from Netbox
@ -26,11 +38,14 @@ function Remove-NetboxIPAMAddress {
(
[Parameter(Mandatory = $true,
ValueFromPipelineByPropertyName = $true)]
[uint64[]]$Id,
[uint16[]]$Id,
[switch]$Force
)
begin {
}
process {
foreach ($IPId in $Id) {
$CurrentIP = Get-NetboxIPAMAddress -Id $IPId -ErrorAction Stop
@ -44,4 +59,7 @@ function Remove-NetboxIPAMAddress {
}
}
}
end {
}
}

View file

@ -1,4 +1,17 @@

<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/19/2020 11:53
Created by: Claussen
Organization: NEOnet
Filename: Set-NetboxIPAMAddress.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function Set-NetboxIPAMAddress {
[CmdletBinding(ConfirmImpact = 'Medium',
SupportsShouldProcess = $true)]
@ -6,69 +19,44 @@ function Set-NetboxIPAMAddress {
(
[Parameter(Mandatory = $true,
ValueFromPipelineByPropertyName = $true)]
[uint64[]]$Id,
[uint16[]]$Id,
[string]$Address,
[string]$Status,
[object]$Status,
[uint64]$Tenant,
[uint16]$Tenant,
[uint64]$VRF,
[uint16]$VRF,
[object]$Role,
[uint64]$NAT_Inside,
[uint16]$NAT_Inside,
[hashtable]$Custom_Fields,
[ValidateSet('dcim.interface', 'virtualization.vminterface', IgnoreCase = $true)]
[string]$Assigned_Object_Type,
[uint64]$Assigned_Object_Id,
[uint16]$Interface,
[string]$Description,
[string]$Dns_name,
[switch]$Force
)
begin {
# Write-Verbose "Validating enum properties"
# $Segments = [System.Collections.ArrayList]::new(@('ipam', 'ip-addresses', 0))
$Method = 'PATCH'
#
# # Value validation
# $ModelDefinition = GetModelDefinitionFromURIPath -Segments $Segments -Method $Method
# $EnumProperties = GetModelEnumProperties -ModelDefinition $ModelDefinition
#
# foreach ($Property in $EnumProperties.Keys) {
# if ($PSBoundParameters.ContainsKey($Property)) {
# Write-Verbose "Validating property [$Property] with value [$($PSBoundParameters.$Property)]"
# $PSBoundParameters.$Property = ValidateValue -ModelDefinition $ModelDefinition -Property $Property -ProvidedValue $PSBoundParameters.$Property
# } else {
# Write-Verbose "User did not provide a value for [$Property]"
# }
# }
#
# Write-Verbose "Finished enum validation"
if ($Status) {
$PSBoundParameters.Status = ValidateIPAMChoice -ProvidedValue $Status -IPAddressStatus
}
if ($Role) {
$PSBoundParameters.Role = ValidateIPAMChoice -ProvidedValue $Role -IPAddressRole
}
}
process {
foreach ($IPId in $Id) {
if ($PSBoundParameters.ContainsKey('Assigned_Object_Type') -or $PSBoundParameters.ContainsKey('Assigned_Object_Id')) {
if ((-not [string]::IsNullOrWhiteSpace($Assigned_Object_Id)) -and [string]::IsNullOrWhiteSpace($Assigned_Object_Type)) {
throw "Assigned_Object_Type is required when specifying Assigned_Object_Id"
}
elseif ((-not [string]::IsNullOrWhiteSpace($Assigned_Object_Type)) -and [string]::IsNullOrWhiteSpace($Assigned_Object_Id)) {
throw "Assigned_Object_Id is required when specifying Assigned_Object_Type"
}
}
$Segments = [System.Collections.ArrayList]::new(@('ipam', 'ip-addresses', $IPId))
Write-Verbose "Obtaining IP from ID $IPId"
Write-Verbose "Obtaining IPs from ID $IPId"
$CurrentIP = Get-NetboxIPAMAddress -Id $IPId -ErrorAction Stop
if ($Force -or $PSCmdlet.ShouldProcess($CurrentIP.Address, 'Set')) {
@ -76,8 +64,11 @@ function Set-NetboxIPAMAddress {
$URI = BuildNewURI -Segments $URIComponents.Segments
InvokeNetboxRequest -URI $URI -Body $URIComponents.Parameters -Method $Method
InvokeNetboxRequest -URI $URI -Body $URIComponents.Parameters -Method PATCH
}
}
}
end {
}
}

View file

@ -1,66 +1,49 @@

<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/19/2020 11:49
Created by: Claussen
Organization: NEOnet
Filename: Get-NetboxIPAMAggregate.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function Get-NetboxIPAMAggregate {
[CmdletBinding(DefaultParameterSetName = 'Query')]
[CmdletBinding()]
param
(
[Parameter(ParameterSetName = 'Query')]
[string]$Query,
[Parameter(ParameterSetName = 'ByID')]
[uint64[]]$Id,
[Parameter(ParameterSetName = 'Query')]
[string]$Prefix,
[Parameter(ParameterSetName = 'Query')]
[object]$Family,
[Parameter(ParameterSetName = 'Query')]
[uint64]$RIR_Id,
[Parameter(ParameterSetName = 'Query')]
[string]$RIR,
[Parameter(ParameterSetName = 'Query')]
[datetime]$Date_Added,
[Parameter(ParameterSetName = 'Query')]
[uint16]$Limit,
[Parameter(ParameterSetName = 'Query')]
[uint16]$Offset,
[object]$Family,
[datetime]$Date_Added,
[uint16[]]$Id,
[string]$Query,
[uint16]$RIR_Id,
[string]$RIR,
[switch]$Raw
)
# if ($null -ne $Family) {
# $PSBoundParameters.Family = ValidateIPAMChoice -ProvidedValue $Family -AggregateFamily
# }
switch ($PSCmdlet.ParameterSetName) {
'ById' {
foreach ($IP_ID in $Id) {
$Segments = [System.Collections.ArrayList]::new(@('ipam', 'aggregates', $IP_ID))
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id'
$uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $uri -Raw:$Raw
}
break
if ($null -ne $Family) {
$PSBoundParameters.Family = ValidateIPAMChoice -ProvidedValue $Family -AggregateFamily
}
default {
$Segments = [System.Collections.ArrayList]::new(@('ipam', 'aggregates'))
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters
$uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $uri -Raw:$Raw
break
}
}
}

View file

@ -0,0 +1,25 @@
<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/19/2020 11:54
Created by: Claussen
Organization: NEOnet
Filename: Get-NetboxIPAMChoices.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function Get-NetboxIPAMChoices {
[CmdletBinding()]
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseSingularNouns", "", Justification = "These are literally 'choices' in Netbox")]
param ()
$uriSegments = [System.Collections.ArrayList]::new(@('ipam', '_choices'))
$uri = BuildNewURI -Segments $uriSegments -Parameters $Parameters
InvokeNetboxRequest -URI $uri
}

View file

@ -1,4 +1,17 @@

<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/19/2020 11:51
Created by: Claussen
Organization: NEOnet
Filename: Get-NetboxIPAMPrefix.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function Get-NetboxIPAMPrefix {
<#
.SYNOPSIS
@ -80,104 +93,65 @@ function Get-NetboxIPAMPrefix {
Additional information about the function.
#>
[CmdletBinding(DefaultParameterSetName = 'Query')]
[CmdletBinding()]
param
(
[Parameter(ParameterSetName = 'Query',
Position = 0)]
[string]$Prefix,
[Parameter(ParameterSetName = 'Query')]
[string]$Query,
[Parameter(ParameterSetName = 'ByID')]
[uint64[]]$Id,
[uint16[]]$Id,
[Parameter(ParameterSetName = 'Query')]
[object]$Family,
[Parameter(ParameterSetName = 'Query')]
[boolean]$Is_Pool,
[Parameter(ParameterSetName = 'Query')]
[string]$Within,
[Parameter(ParameterSetName = 'Query')]
[string]$Within_Include,
[Parameter(ParameterSetName = 'Query')]
[string]$Contains,
[Parameter(ParameterSetName = 'Query')]
[ValidateRange(0, 127)]
[byte]$Mask_Length,
[Parameter(ParameterSetName = 'Query')]
[string]$VRF,
[Parameter(ParameterSetName = 'Query')]
[uint64]$VRF_Id,
[uint16]$VRF_Id,
[Parameter(ParameterSetName = 'Query')]
[string]$Tenant,
[Parameter(ParameterSetName = 'Query')]
[uint64]$Tenant_Id,
[uint16]$Tenant_Id,
[Parameter(ParameterSetName = 'Query')]
[string]$Site,
[Parameter(ParameterSetName = 'Query')]
[uint64]$Site_Id,
[uint16]$Site_Id,
[Parameter(ParameterSetName = 'Query')]
[string]$Vlan_VId,
[Parameter(ParameterSetName = 'Query')]
[uint64]$Vlan_Id,
[uint16]$Vlan_Id,
[Parameter(ParameterSetName = 'Query')]
[object]$Status,
[Parameter(ParameterSetName = 'Query')]
[string]$Role,
[Parameter(ParameterSetName = 'Query')]
[uint64]$Role_Id,
[uint16]$Role_Id,
[Parameter(ParameterSetName = 'Query')]
[uint16]$Limit,
[Parameter(ParameterSetName = 'Query')]
[uint16]$Offset,
[switch]$Raw
)
# if ($null -ne $Family) {
# $PSBoundParameters.Family = ValidateIPAMChoice -ProvidedValue $Family -PrefixFamily
# }
#
# if ($null -ne $Status) {
# $PSBoundParameters.Status = ValidateIPAMChoice -ProvidedValue $Status -PrefixStatus
# }
switch ($PSCmdlet.ParameterSetName) {
'ById' {
foreach ($Prefix_ID in $Id) {
$Segments = [System.Collections.ArrayList]::new(@('ipam', 'prefixes', $Prefix_ID))
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id'
$uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $uri -Raw:$Raw
if ($null -ne $Family) {
$PSBoundParameters.Family = ValidateIPAMChoice -ProvidedValue $Family -PrefixFamily
}
break
if ($null -ne $Status) {
$PSBoundParameters.Status = ValidateIPAMChoice -ProvidedValue $Status -PrefixStatus
}
default {
$Segments = [System.Collections.ArrayList]::new(@('ipam', 'prefixes'))
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters
@ -185,8 +159,4 @@ function Get-NetboxIPAMPrefix {
$uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $uri -Raw:$Raw
break
}
}
}

View file

@ -1,7 +1,18 @@

<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/19/2020 11:52
Created by: Claussen
Organization: NEOnet
Filename: New-NetboxIPAMPrefix.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function New-NetboxIPAMPrefix {
[CmdletBinding(ConfirmImpact = 'low',
SupportsShouldProcess = $true)]
[CmdletBinding()]
param
(
@ -10,7 +21,7 @@ function New-NetboxIPAMPrefix {
[object]$Status = 'Active',
[uint64]$Tenant,
[uint16]$Tenant,
[object]$Role,
@ -18,18 +29,18 @@ function New-NetboxIPAMPrefix {
[string]$Description,
[uint64]$Site,
[uint16]$Site,
[uint64]$VRF,
[uint16]$VRF,
[uint64]$VLAN,
[uint16]$VLAN,
[hashtable]$Custom_Fields,
[switch]$Raw
)
# $PSBoundParameters.Status = ValidateIPAMChoice -ProvidedValue $Status -PrefixStatus
$PSBoundParameters.Status = ValidateIPAMChoice -ProvidedValue $Status -PrefixStatus
<#
# As of 2018/10/18, this does not appear to be a validated IPAM choice
@ -44,7 +55,5 @@ function New-NetboxIPAMPrefix {
$URI = BuildNewURI -Segments $URIComponents.Segments
if ($PSCmdlet.ShouldProcess($Prefix, 'Create new Prefix')) {
InvokeNetboxRequest -URI $URI -Method POST -Body $URIComponents.Parameters -Raw:$Raw
}
}

View file

@ -1,79 +0,0 @@

function Set-NetboxIPAMPrefix {
[CmdletBinding(ConfirmImpact = 'Medium',
SupportsShouldProcess = $true)]
param
(
[Parameter(Mandatory = $true,
ValueFromPipelineByPropertyName = $true)]
[uint64[]]$Id,
[string]$Prefix,
[string]$Status,
[uint64]$Tenant,
[uint64]$Site,
[uint64]$VRF,
[uint64]$VLAN,
[object]$Role,
[hashtable]$Custom_Fields,
[string]$Description,
[switch]$Is_Pool,
[switch]$Force
)
begin {
# Write-Verbose "Validating enum properties"
# $Segments = [System.Collections.ArrayList]::new(@('ipam', 'ip-addresses', 0))
$Method = 'PATCH'
#
# # Value validation
# $ModelDefinition = GetModelDefinitionFromURIPath -Segments $Segments -Method $Method
# $EnumProperties = GetModelEnumProperties -ModelDefinition $ModelDefinition
#
# foreach ($Property in $EnumProperties.Keys) {
# if ($PSBoundParameters.ContainsKey($Property)) {
# Write-Verbose "Validating property [$Property] with value [$($PSBoundParameters.$Property)]"
# $PSBoundParameters.$Property = ValidateValue -ModelDefinition $ModelDefinition -Property $Property -ProvidedValue $PSBoundParameters.$Property
# } else {
# Write-Verbose "User did not provide a value for [$Property]"
# }
# }
#
# Write-Verbose "Finished enum validation"
}
process {
foreach ($PrefixId in $Id) {
$Segments = [System.Collections.ArrayList]::new(@('ipam', 'prefixes', $PrefixId))
Write-Verbose "Obtaining Prefix from ID $PrefixId"
$CurrentPrefix = Get-NetboxIPAMPrefix -Id $PrefixId -ErrorAction Stop
if ($Force -or $PSCmdlet.ShouldProcess($CurrentPrefix.Prefix, 'Set')) {
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id', 'Force'
$URI = BuildNewURI -Segments $URIComponents.Segments
InvokeNetboxRequest -URI $URI -Body $URIComponents.Parameters -Method $Method
}
}
}
}

View file

@ -1,73 +0,0 @@

function Get-NetboxIPAMAddressRange {
[CmdletBinding(DefaultParameterSetName = 'Query')]
param
(
[Parameter(ParameterSetName = 'Query',
Position = 0)]
[string]$Range,
[Parameter(ParameterSetName = 'ByID')]
[uint64[]]$Id,
[Parameter(ParameterSetName = 'Query')]
[string]$Query,
[Parameter(ParameterSetName = 'Query')]
[object]$Family,
[Parameter(ParameterSetName = 'Query')]
[string]$VRF,
[Parameter(ParameterSetName = 'Query')]
[uint32]$VRF_Id,
[Parameter(ParameterSetName = 'Query')]
[string]$Tenant,
[Parameter(ParameterSetName = 'Query')]
[uint32]$Tenant_Id,
[Parameter(ParameterSetName = 'Query')]
[object]$Status,
[Parameter(ParameterSetName = 'Query')]
[object]$Role,
[Parameter(ParameterSetName = 'Query')]
[uint16]$Limit,
[Parameter(ParameterSetName = 'Query')]
[uint16]$Offset,
[switch]$Raw
)
switch ($PSCmdlet.ParameterSetName) {
'ById' {
foreach ($Range_ID in $Id) {
$Segments = [System.Collections.ArrayList]::new(@('ipam', 'ip-ranges', $Range_ID))
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id'
$uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $uri -Raw:$Raw
}
break
}
default {
$Segments = [System.Collections.ArrayList]::new(@('ipam', 'ip-ranges'))
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters
$uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $uri -Raw:$Raw
break
}
}
}

View file

@ -1,106 +0,0 @@

function New-NetboxIPAMAddressRange {
<#
.SYNOPSIS
Create a new IP address range to Netbox
.DESCRIPTION
Create a new IP address range to Netbox with a status of Active by default. The maximum supported
size of an IP range is 2^32 - 1.
.PARAMETER Start_Address
Starting IPv4 or IPv6 address (with mask). The maximum supported size of an IP range is 2^32 - 1.
.PARAMETER End_Address
Ending IPv4 or IPv6 address (with mask). The maximum supported size of an IP range is 2^32 - 1.
.PARAMETER Status
Operational status of this range. Defaults to Active
.PARAMETER Tenant
Tenant ID
.PARAMETER VRF
VRF ID
.PARAMETER Role
Role such as backup, customer, development, etc... Defaults to nothing
.PARAMETER Custom_Fields
Custom field hash table. Will be validated by the API service
.PARAMETER Description
Description of IP address range
.PARAMETER Comments
Extra comments (markdown supported).
.PARAMETER Tags
One or more tags.
.PARAMETER Mark_Utilized
Treat as 100% utilized
.PARAMETER Raw
Return raw results from API service
.EXAMPLE
New-NetboxIPAMAddressRange -Start_Address 192.0.2.20/24 -End_Address 192.0.2.20/24
Add new IP Address range from 192.0.2.20/24 to 192.0.2.20/24 with status active
.NOTES
https://netbox.neonet.org/static/docs/models/ipam/iprange/
#>
[CmdletBinding(ConfirmImpact = 'Low',
SupportsShouldProcess = $true)]
[OutputType([pscustomobject])]
param
(
[Parameter(Mandatory = $true)]
[string]$Start_Address,
[Parameter(Mandatory = $true)]
[string]$End_Address,
[object]$Status = 'Active',
[uint64]$Tenant,
[uint64]$VRF,
[object]$Role,
[hashtable]$Custom_Fields,
[string]$Description,
[string]$Comments,
[object[]]$Tags,
[switch]$Mark_Utilized,
[switch]$Raw
)
process {
$Segments = [System.Collections.ArrayList]::new(@('ipam', 'ip-ranges'))
$Method = 'POST'
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters
$URI = BuildNewURI -Segments $URIComponents.Segments
if ($PSCmdlet.ShouldProcess($Start_Address, 'Create new IP address range')) {
InvokeNetboxRequest -URI $URI -Method $Method -Body $URIComponents.Parameters -Raw:$Raw
}
}
}

View file

@ -1,47 +0,0 @@

function Remove-NetboxIPAMAddressRange {
<#
.SYNOPSIS
Remove an IP address range from Netbox
.DESCRIPTION
Removes/deletes an IP address range from Netbox by ID
.PARAMETER Id
Database ID of the IP address range object.
.PARAMETER Force
Do not confirm.
.EXAMPLE
PS C:\> Remove-NetboxIPAMAddressRange -Id 1234
.NOTES
Additional information about the function.
#>
[CmdletBinding(ConfirmImpact = 'High',
SupportsShouldProcess = $true)]
param
(
[Parameter(Mandatory = $true,
ValueFromPipelineByPropertyName = $true)]
[uint64[]]$Id,
[switch]$Force
)
process {
foreach ($Range_Id in $Id) {
$CurrentRange = Get-NetboxIPAMAddressRange -Id $Range_Id -ErrorAction Stop
$Segments = [System.Collections.ArrayList]::new(@('ipam', 'ip-ranges', $Range_Id))
if ($Force -or $pscmdlet.ShouldProcess($CurrentRange.start_address, "Delete")) {
$URI = BuildNewURI -Segments $Segments
InvokeNetboxRequest -URI $URI -Method DELETE
}
}
}
}

View file

@ -1,58 +0,0 @@

function Set-NetboxIPAMAddressRange {
[CmdletBinding(ConfirmImpact = 'Medium',
SupportsShouldProcess = $true)]
param
(
[Parameter(Mandatory = $true,
ValueFromPipelineByPropertyName = $true)]
[uint64[]]$Id,
[string]$Start_Address,
[string]$End_Address,
[object]$Status,
[uint64]$Tenant,
[uint64]$VRF,
[object]$Role,
[hashtable]$Custom_Fields,
[string]$Description,
[string]$Comments,
[object[]]$Tags,
[switch]$Mark_Utilized,
[switch]$Force,
[switch]$Raw
)
begin {
$Method = 'PATCH'
}
process {
foreach ($RangeID in $Id) {
$Segments = [System.Collections.ArrayList]::new(@('ipam', 'ip-ranges', $RangeID))
Write-Verbose "Obtaining IP range from ID $RangeID"
$CurrentRange = Get-NetboxIPAMAddressRange -Id $RangeID -ErrorAction Stop
if ($Force -or $PSCmdlet.ShouldProcess("$($CurrentRange.Start_Address) - $($CurrentRange.End_Address)", 'Set')) {
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id', 'Force'
$URI = BuildNewURI -Segments $URIComponents.Segments
InvokeNetboxRequest -URI $URI -Body $URIComponents.Parameters -Method $Method
}
}
}
}

View file

@ -41,47 +41,23 @@ function Get-NetboxIPAMRole {
[CmdletBinding()]
param
(
[Parameter(ParameterSetName = 'Query',
Position = 0)]
[string]$Name,
[uint16[]]$Id,
[Parameter(ParameterSetName = 'Query')]
[string]$Query,
[Parameter(ParameterSetName = 'ByID')]
[uint64[]]$Id,
[string]$Name,
[Parameter(ParameterSetName = 'Query')]
[string]$Slug,
[Parameter(ParameterSetName = 'Query')]
[switch]$Brief,
[Parameter(ParameterSetName = 'Query')]
[uint16]$Limit,
[Parameter(ParameterSetName = 'Query')]
[uint16]$Offset,
[switch]$Raw
)
switch ($PSCmdlet.ParameterSetName) {
'ById' {
foreach ($Role_ID in $Id) {
$Segments = [System.Collections.ArrayList]::new(@('ipam', 'roles', $Role_ID))
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id'
$uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $uri -Raw:$Raw
}
break
}
default {
$Segments = [System.Collections.ArrayList]::new(@('ipam', 'roles'))
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters
@ -89,8 +65,4 @@ function Get-NetboxIPAMRole {
$uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $uri -Raw:$Raw
break
}
}
}

View file

@ -1,83 +1,64 @@

<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/16/2020 16:34
Created by: Claussen
Organization: NEOnet
Filename: Get-NetboxIPAMVLAN.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function Get-NetboxIPAMVLAN {
[CmdletBinding(DefaultParameterSetName = 'Query')]
[CmdletBinding()]
param
(
[Parameter(ParameterSetName = 'Query',
Position = 0)]
[ValidateRange(1, 4096)]
[uint16]$VID,
[Parameter(ParameterSetName = 'ByID')]
[uint64[]]$Id,
[Parameter(ParameterSetName = 'Query')]
[string]$Query,
[Parameter(ParameterSetName = 'Query')]
[string]$Name,
[Parameter(ParameterSetName = 'Query')]
[string]$Tenant,
[Parameter(ParameterSetName = 'Query')]
[uint64]$Tenant_Id,
[Parameter(ParameterSetName = 'Query')]
[string]$TenantGroup,
[Parameter(ParameterSetName = 'Query')]
[uint64]$TenantGroup_Id,
[Parameter(ParameterSetName = 'Query')]
[object]$Status,
[Parameter(ParameterSetName = 'Query')]
[string]$Region,
[Parameter(ParameterSetName = 'Query')]
[string]$Site,
[Parameter(ParameterSetName = 'Query')]
[uint64]$Site_Id,
[Parameter(ParameterSetName = 'Query')]
[string]$Group,
[Parameter(ParameterSetName = 'Query')]
[uint64]$Group_Id,
[Parameter(ParameterSetName = 'Query')]
[string]$Role,
[Parameter(ParameterSetName = 'Query')]
[uint64]$Role_Id,
[Parameter(ParameterSetName = 'Query')]
[uint16]$Limit,
[Parameter(ParameterSetName = 'Query')]
[uint16]$Offset,
[uint16]$VID,
[uint16[]]$Id,
[string]$Query,
[string]$Name,
[string]$Tenant,
[uint16]$Tenant_Id,
[string]$TenantGroup,
[uint16]$TenantGroup_Id,
[object]$Status,
[string]$Region,
[string]$Site,
[uint16]$Site_Id,
[string]$Group,
[uint16]$Group_Id,
[string]$Role,
[uint16]$Role_Id,
[switch]$Raw
)
switch ($PSCmdlet.ParameterSetName) {
'ById' {
foreach ($VLAN_ID in $Id) {
$Segments = [System.Collections.ArrayList]::new(@('ipam', 'vlans', $VLAN_ID))
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id'
$uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $uri -Raw:$Raw
if ($null -ne $Status) {
$PSBoundParameters.Status = ValidateIPAMChoice -ProvidedValue $Status -VLANStatus
}
break
}
default {
$Segments = [System.Collections.ArrayList]::new(@('ipam', 'vlans'))
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters
@ -85,10 +66,6 @@ function Get-NetboxIPAMVLAN {
$uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $uri -Raw:$Raw
break
}
}
}

View file

@ -1,5 +1,5 @@
function New-NetboxIPAMVLAN {
<#
<#
.SYNOPSIS
Create a new VLAN
@ -40,8 +40,7 @@
Additional information about the function.
#>
[CmdletBinding(ConfirmImpact = 'low',
SupportsShouldProcess = $true)]
[CmdletBinding()]
[OutputType([pscustomobject])]
param
(
@ -53,7 +52,7 @@
[object]$Status = 'Active',
[uint64]$Tenant,
[uint16]$Tenant,
[object]$Role,
@ -64,11 +63,11 @@
[switch]$Raw
)
# $PSBoundParameters.Status = ValidateIPAMChoice -ProvidedValue $Status -VLANStatus
$PSBoundParameters.Status = ValidateIPAMChoice -ProvidedValue $Status -VLANStatus
# if ($null -ne $Role) {
# $PSBoundParameters.Role = ValidateIPAMChoice -ProvidedValue $Role -IPAddressRole
# }
if ($null -ne $Role) {
$PSBoundParameters.Role = ValidateIPAMChoice -ProvidedValue $Role -IPAddressRole
}
$segments = [System.Collections.ArrayList]::new(@('ipam', 'vlans'))
@ -76,7 +75,5 @@
$URI = BuildNewURI -Segments $URIComponents.Segments
if ($PSCmdlet.ShouldProcess($nae, 'Create new Vlan $($vid)')) {
InvokeNetboxRequest -URI $URI -Method POST -Body $URIComponents.Parameters -Raw:$Raw
}
}

View file

@ -0,0 +1,109 @@
<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/19/2020 11:54
Created by: Claussen
Organization: NEOnet
Filename: ValidateIPAMChoice.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function ValidateIPAMChoice {
<#
.SYNOPSIS
Internal function to verify provided values for static choices
.DESCRIPTION
When users connect to the API, choices for each major object are cached to the config variable.
These values are then utilized to verify if the provided value from a user is valid.
.PARAMETER ProvidedValue
The value to validate against static choices
.PARAMETER AggregateFamily
Verify against aggregate family values
.PARAMETER PrefixFamily
Verify against prefix family values
.PARAMETER PrefixStatus
Verify against prefix status values
.PARAMETER IPAddressFamily
Verify against ip-address family values
.PARAMETER IPAddressStatus
Verify against ip-address status values
.PARAMETER IPAddressRole
Verify against ip-address role values
.PARAMETER VLANStatus
Verify against VLAN status values
.PARAMETER ServiceProtocol
Verify against service protocol values
.EXAMPLE
PS C:\> ValidateIPAMChoice -ProvidedValue 'loopback' -IPAddressRole
.EXAMPLE
PS C:\> ValidateIPAMChoice -ProvidedValue 'Loopback' -IPAddressFamily
>> Invalid value Loopback for ip-address:family. Must be one of: 4, 6, IPv4, IPv6
.OUTPUTS
This function returns the integer value if valid. Otherwise, it will throw an error.
.NOTES
Additional information about the function.
.FUNCTIONALITY
This cmdlet is intended to be used internally and not exposed to the user
#>
[CmdletBinding(DefaultParameterSetName = 'service:protocol')]
[OutputType([uint16])]
param
(
[Parameter(Mandatory = $true)]
[object]$ProvidedValue,
[Parameter(ParameterSetName = 'aggregate:family',
Mandatory = $true)]
[switch]$AggregateFamily,
[Parameter(ParameterSetName = 'prefix:family',
Mandatory = $true)]
[switch]$PrefixFamily,
[Parameter(ParameterSetName = 'prefix:status',
Mandatory = $true)]
[switch]$PrefixStatus,
[Parameter(ParameterSetName = 'ip-address:family',
Mandatory = $true)]
[switch]$IPAddressFamily,
[Parameter(ParameterSetName = 'ip-address:status',
Mandatory = $true)]
[switch]$IPAddressStatus,
[Parameter(ParameterSetName = 'ip-address:role',
Mandatory = $true)]
[switch]$IPAddressRole,
[Parameter(ParameterSetName = 'vlan:status',
Mandatory = $true)]
[switch]$VLANStatus,
[Parameter(ParameterSetName = 'service:protocol',
Mandatory = $true)]
[switch]$ServiceProtocol
)
ValidateChoice -MajorObject 'IPAM' -ChoiceName $PSCmdlet.ParameterSetName -ProvidedValue $ProvidedValue
}

View file

@ -1,11 +0,0 @@
function Clear-NetboxCredential {
[CmdletBinding(ConfirmImpact = 'Medium', SupportsShouldProcess = $true)]
param
(
[switch]$Force
)
if ($Force -or ($PSCmdlet.ShouldProcess('Netbox Credentials', 'Clear'))) {
$script:NetboxConfig.Credential = $null
}
}

View file

@ -4,28 +4,13 @@
Connects to the Netbox API and ensures Credential work properly
.DESCRIPTION
Connects to the Netbox API and ensures Credential work properly
A detailed description of the Connect-NetboxAPI function.
.PARAMETER Hostname
The hostname for the resource such as netbox.domain.com
A description of the Hostname parameter.
.PARAMETER Credential
Credential object containing the API key in the password. Username is not applicable
.PARAMETER Scheme
Scheme for the URI such as HTTP or HTTPS. Defaults to HTTPS
.PARAMETER Port
Port for the resource. Value between 1-65535
.PARAMETER URI
The full URI for the resource such as "https://netbox.domain.com:8443"
.PARAMETER SkipCertificateCheck
A description of the SkipCertificateCheck parameter.
.PARAMETER TimeoutSeconds
The number of seconds before the HTTP call times out. Defaults to 30 seconds
A description of the Credential parameter.
.EXAMPLE
PS C:\> Connect-NetboxAPI -Hostname "netbox.domain.com"
@ -36,33 +21,14 @@
Additional information about the function.
#>
[CmdletBinding(DefaultParameterSetName = 'Manual')]
[CmdletBinding()]
param
(
[Parameter(ParameterSetName = 'Manual',
Mandatory = $true)]
[Parameter(Mandatory = $true)]
[string]$Hostname,
[Parameter(Mandatory = $false)]
[pscredential]$Credential,
[Parameter(ParameterSetName = 'Manual')]
[ValidateSet('https', 'http', IgnoreCase = $true)]
[string]$Scheme = 'https',
[Parameter(ParameterSetName = 'Manual')]
[uint16]$Port = 443,
[Parameter(ParameterSetName = 'URI',
Mandatory = $true)]
[string]$URI,
[Parameter(Mandatory = $false)]
[switch]$SkipCertificateCheck = $false,
[ValidateNotNullOrEmpty()]
[ValidateRange(1, 65535)]
[uint16]$TimeoutSeconds = 30
[pscredential]$Credential
)
if (-not $Credential) {
@ -76,48 +42,14 @@
}
}
$invokeParams = @{ SkipCertificateCheck = $SkipCertificateCheck; }
if ("Desktop" -eq $PSVersionTable.PsEdition) {
#Remove -SkipCertificateCheck from Invoke Parameter (not supported <= PS 5)
$invokeParams.remove("SkipCertificateCheck")
}
#for PowerShell (<=) 5 (Desktop), Enable TLS 1.1, 1.2 and Disable SSL chain trust
if ("Desktop" -eq $PSVersionTable.PsEdition) {
#Add System.web (Need for ParseQueryString)
Add-Type -AssemblyName System.Web
#Enable TLS 1.1 and 1.2
Set-NetboxCipherSSL
if ($SkipCertificateCheck) {
#Disable SSL chain trust...
Set-NetboxuntrustedSSL
}
}
switch ($PSCmdlet.ParameterSetName) {
'Manual' {
$uriBuilder = [System.UriBuilder]::new($Scheme, $Hostname, $Port)
}
'URI' {
$uriBuilder = [System.UriBuilder]::new($URI)
if ([string]::IsNullOrWhiteSpace($uriBuilder.Host)) {
throw "URI appears to be invalid. Must be in format [host.name], [scheme://host.name], or [scheme://host.name:port]"
}
}
}
$null = Set-NetboxHostName -Hostname $uriBuilder.Host
$null = Set-NetboxHostName -Hostname $Hostname
$null = Set-NetboxCredential -Credential $Credential
$null = Set-NetboxHostScheme -Scheme $uriBuilder.Scheme
$null = Set-NetboxHostPort -Port $uriBuilder.Port
$null = Set-NetboxInvokeParams -invokeParams $invokeParams
$null = Set-NetboxTimeout -TimeoutSeconds $TimeoutSeconds
try {
Write-Verbose "Verifying API connectivity..."
$null = VerifyAPIConnectivity
$script:NetboxConfig.Connected = $true
Write-Verbose "Successfully connected!"
} catch {
Write-Verbose "Failed to connect. Generating error"
Write-Verbose $_.Exception.Message
@ -128,27 +60,14 @@
}
}
# Write-Verbose "Caching API definition"
# $script:NetboxConfig.APIDefinition = Get-NetboxAPIDefinition
#
# if ([version]$script:NetboxConfig.APIDefinition.info.version -lt 2.8) {
# $Script:NetboxConfig.Connected = $false
# throw "Netbox version is incompatible with this PS module. Requires >=2.8.*, found version $($script:NetboxConfig.APIDefinition.info.version)"
# }
Write-Verbose "Checking Netbox version compatibility"
$script:NetboxConfig.NetboxVersion = Get-NetboxVersion
if ([version]$script:NetboxConfig.NetboxVersion.'netbox-version' -lt 2.8) {
$Script:NetboxConfig.Connected = $false
throw "Netbox version is incompatible with this PS module. Requires >=2.8.*, found version $($script:NetboxConfig.NetboxVersion.'netbox-version')"
} else {
Write-Verbose "Found compatible version [$($script:NetboxConfig.NetboxVersion.'netbox-version')]!"
}
$script:NetboxConfig.Connected = $true
Write-Verbose "Successfully connected!"
$script:NetboxConfig.ContentTypes = Get-NetboxContentType -Limit 500
Write-Verbose "Caching static choices"
$script:NetboxConfig.Choices.Circuits = Get-NetboxCircuitsChoices
$script:NetboxConfig.Choices.DCIM = Get-NetboxDCIMChoices # Not completed yet
$script:NetboxConfig.Choices.Extras = Get-NetboxExtrasChoices
$script:NetboxConfig.Choices.IPAM = Get-NetboxIPAMChoices
#$script:NetboxConfig.Choices.Secrets = Get-NetboxSecretsChoices # Not completed yet
#$script:NetboxConfig.Choices.Tenancy = Get-NetboxTenancyChoices
$script:NetboxConfig.Choices.Virtualization = Get-NetboxVirtualizationChoices
Write-Verbose "Connection process completed"
}

View file

@ -1,11 +0,0 @@
function Get-NetboxHostPort {
[CmdletBinding()]
param ()
Write-Verbose "Getting Netbox host port"
if ($null -eq $script:NetboxConfig.HostPort) {
throw "Netbox host port is not set! You may set it with Set-NetboxHostPort -Port 'https'"
}
$script:NetboxConfig.HostPort
}

View file

@ -1,11 +0,0 @@
function Get-NetboxHostScheme {
[CmdletBinding()]
param ()
Write-Verbose "Getting Netbox host scheme"
if ($null -eq $script:NetboxConfig.Hostscheme) {
throw "Netbox host sceme is not set! You may set it with Set-NetboxHostScheme -Scheme 'https'"
}
$script:NetboxConfig.HostScheme
}

View file

@ -1,11 +0,0 @@
function Get-NetboxInvokeParams {
[CmdletBinding()]
param ()
Write-Verbose "Getting Netbox InvokeParams"
if ($null -eq $script:NetboxConfig.InvokeParams) {
throw "Netbox Invoke Params is not set! You may set it with Set-NetboxInvokeParams -InvokeParams ..."
}
$script:NetboxConfig.InvokeParams
}

View file

@ -1,13 +0,0 @@

function Get-NetboxTimeout {
[CmdletBinding()]
[OutputType([uint16])]
param ()
Write-Verbose "Getting Netbox Timeout"
if ($null -eq $script:NetboxConfig.Timeout) {
throw "Netbox Timeout is not set! You may set it with Set-NetboxTimeout -TimeoutSeconds [uint16]"
}
$script:NetboxConfig.Timeout
}

View file

@ -1,15 +0,0 @@

function Get-NetboxVersion {
[CmdletBinding()]
param ()
$Segments = [System.Collections.ArrayList]::new(@('status'))
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary @{
'format' = 'json'
}
$URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters -SkipConnectedCheck
InvokeNetboxRequest -URI $URI
}

View file

@ -1,8 +0,0 @@
Function Set-NetboxCipherSSL {
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseShouldProcessforStateChangingFunctions", "")]
Param( )
# Hack for allowing TLS 1.1 and TLS 1.2 (by default it is only SSL3 and TLS (1.0))
$AllProtocols = [System.Net.SecurityProtocolType]'Ssl3,Tls,Tls11,Tls12'
[System.Net.ServicePointManager]::SecurityProtocol = $AllProtocols
}

View file

@ -1,15 +0,0 @@
function Set-NetboxHostPort {
[CmdletBinding(ConfirmImpact = 'Low',
SupportsShouldProcess = $true)]
[OutputType([string])]
param
(
[Parameter(Mandatory = $true)]
[uint16]$Port
)
if ($PSCmdlet.ShouldProcess('Netbox Port', 'Set')) {
$script:NetboxConfig.HostPort = $Port
$script:NetboxConfig.HostPort
}
}

View file

@ -1,20 +0,0 @@
function Set-NetboxHostScheme {
[CmdletBinding(ConfirmImpact = 'Low',
SupportsShouldProcess = $true)]
[OutputType([string])]
param
(
[Parameter(Mandatory = $false)]
[ValidateSet('https', 'http', IgnoreCase = $true)]
[string]$Scheme = 'https'
)
if ($PSCmdlet.ShouldProcess('Netbox Host Scheme', 'Set')) {
if ($Scheme -eq 'http') {
Write-Warning "Connecting via non-secure HTTP is not-recommended"
}
$script:NetboxConfig.HostScheme = $Scheme
$script:NetboxConfig.HostScheme
}
}

View file

@ -1,14 +0,0 @@
function Set-NetboxInvokeParams {
[CmdletBinding(ConfirmImpact = 'Low',
SupportsShouldProcess = $true)]
[OutputType([string])]
param(
[Parameter(Mandatory = $true)]
[array]$InvokeParams
)
if ($PSCmdlet.ShouldProcess('Netbox Invoke Params', 'Set')) {
$script:NetboxConfig.InvokeParams = $InvokeParams
$script:NetboxConfig.InvokeParams
}
}

View file

@ -1,17 +0,0 @@

function Set-NetboxTimeout {
[CmdletBinding(ConfirmImpact = 'Low',
SupportsShouldProcess = $true)]
[OutputType([uint16])]
param
(
[Parameter(Mandatory = $false)]
[ValidateRange(1, 65535)]
[uint16]$TimeoutSeconds = 30
)
if ($PSCmdlet.ShouldProcess('Netbox Timeout', 'Set')) {
$script:NetboxConfig.Timeout = $TimeoutSeconds
$script:NetboxConfig.Timeout
}
}

View file

@ -1,19 +0,0 @@
Function Set-NetboxUntrustedSSL {
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseShouldProcessforStateChangingFunctions", "")]
Param( )
# Hack for allowing untrusted SSL certs with https connections
Add-Type -TypeDefinition @"
using System.Net;
using System.Security.Cryptography.X509Certificates;
public class TrustAllCertsPolicy : ICertificatePolicy {
public bool CheckValidationResult(
ServicePoint srvPoint, X509Certificate certificate,
WebRequest request, int certificateProblem) {
return true;
}
}
"@
[System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName TrustAllCertsPolicy
}

View file

@ -1,21 +0,0 @@

function Get-NetboxAPIDefinition {
[CmdletBinding()]
param
(
[ValidateSet('json', 'yaml', IgnoreCase = $true)]
[string]$Format = 'json'
)
#$URI = "https://netbox.neonet.org/api/schema/?format=json"
$Segments = [System.Collections.ArrayList]::new(@('schema'))
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary @{
'format' = $Format.ToLower()
}
$URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters -SkipConnectedCheck
InvokeNetboxRequest -URI $URI
}

View file

@ -1,89 +0,0 @@
function Get-NetboxContentType {
<#
.SYNOPSIS
Get a content type definition from Netbox
.DESCRIPTION
A detailed description of the Get-NetboxContentType function.
.PARAMETER Model
A description of the Model parameter.
.PARAMETER Id
The database ID of the contact role
.PARAMETER App_Label
A description of the App_Label parameter.
.PARAMETER Query
A standard search query that will match one or more contact roles.
.PARAMETER Limit
Limit the number of results to this number
.PARAMETER Offset
Start the search at this index in results
.PARAMETER Raw
Return the unparsed data from the HTTP request
.EXAMPLE
PS C:\> Get-NetboxContentType
.NOTES
Additional information about the function.
#>
[CmdletBinding(DefaultParameterSetName = 'Query')]
param
(
[Parameter(ParameterSetName = 'Query',
Position = 0)]
[string]$Model,
[Parameter(ParameterSetName = 'ByID')]
[uint64[]]$Id,
[Parameter(ParameterSetName = 'Query')]
[string]$App_Label,
[Parameter(ParameterSetName = 'Query')]
[string]$Query,
[Parameter(ParameterSetName = 'Query')]
[uint16]$Limit,
[Parameter(ParameterSetName = 'Query')]
[uint16]$Offset,
[switch]$Raw
)
switch ($PSCmdlet.ParameterSetName) {
'ById' {
foreach ($ContentType_ID in $Id) {
$Segments = [System.Collections.ArrayList]::new(@('extras', 'content-types', $ContentType_ID))
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id'
$uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $uri -Raw:$Raw
}
break
}
default {
$Segments = [System.Collections.ArrayList]::new(@('extras', 'content-types'))
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters
$uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $uri -Raw:$Raw
break
}
}
}

View file

@ -12,8 +12,6 @@
'Connected' = $false
'Choices' = @{
}
'APIDefinition' = $null
'ContentTypes' = $null
}
}

View file

@ -1,7 +0,0 @@

function Test-NetboxAPIConnected {
[CmdletBinding()]
param ()
$script:NetboxConfig.Connected
}

View file

@ -2,9 +2,9 @@
[CmdletBinding()]
param ()
$uriSegments = [System.Collections.ArrayList]::new(@('extras'))
$uriSegments = [System.Collections.ArrayList]::new(@('extras', '_choices'))
$uri = BuildNewURI -Segments $uriSegments -Parameters @{'format' = 'json' } -SkipConnectedCheck
$uri = BuildNewURI -Segments $uriSegments -SkipConnectedCheck
InvokeNetboxRequest -URI $uri
}

View file

@ -1,108 +0,0 @@

function Get-NetboxContactAssignment {
<#
.SYNOPSIS
Get a contact Assignment from Netbox
.DESCRIPTION
A detailed description of the Get-NetboxContactAssignment function.
.PARAMETER Name
The specific name of the contact Assignment. Must match exactly as is defined in Netbox
.PARAMETER Id
The database ID of the contact Assignment
.PARAMETER Content_Type_Id
A description of the Content_Type_Id parameter.
.PARAMETER Content_Type
A description of the Content_Type parameter.
.PARAMETER Object_Id
A description of the Object_Id parameter.
.PARAMETER Contact_Id
A description of the Contact_Id parameter.
.PARAMETER Role_Id
A description of the Role_Id parameter.
.PARAMETER Limit
Limit the number of results to this number
.PARAMETER Offset
Start the search at this index in results
.PARAMETER Raw
Return the unparsed data from the HTTP request
.EXAMPLE
PS C:\> Get-NetboxContactAssignment
.NOTES
Additional information about the function.
#>
[CmdletBinding(DefaultParameterSetName = 'Query')]
param
(
[Parameter(ParameterSetName = 'Query',
Position = 0)]
[string]$Name,
[Parameter(ParameterSetName = 'ByID')]
[uint64[]]$Id,
[Parameter(ParameterSetName = 'Query')]
[uint64]$Content_Type_Id,
[Parameter(ParameterSetName = 'Query')]
[string]$Content_Type,
[Parameter(ParameterSetName = 'Query')]
[uint64]$Object_Id,
[Parameter(ParameterSetName = 'Query')]
[uint64]$Contact_Id,
[Parameter(ParameterSetName = 'Query')]
[uint64]$Role_Id,
[Parameter(ParameterSetName = 'Query')]
[uint16]$Limit,
[Parameter(ParameterSetName = 'Query')]
[uint16]$Offset,
[switch]$Raw
)
switch ($PSCmdlet.ParameterSetName) {
'ById' {
foreach ($ContactAssignment_ID in $Id) {
$Segments = [System.Collections.ArrayList]::new(@('tenancy', 'contact-assignments', $ContactAssignment_ID))
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id'
$uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $uri -Raw:$Raw
}
break
}
default {
$Segments = [System.Collections.ArrayList]::new(@('tenancy', 'contact-assignments'))
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters
$uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $uri -Raw:$Raw
break
}
}
}

View file

@ -1,79 +0,0 @@

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 '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)]
[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,
[Parameter(Mandatory = $true)]
[uint64]$Contact,
[Parameter(Mandatory = $true)]
[uint64]$Role,
[ValidateSet('primary', 'secondary', 'tertiary', 'inactive', IgnoreCase = $true)]
[string]$Priority,
[switch]$Raw
)
begin {
$Method = 'POST'
}
process {
$Segments = [System.Collections.ArrayList]::new(@('tenancy', 'contact-assignments'))
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters
$URI = BuildNewURI -Segments $URIComponents.Segments
if ($PSCmdlet.ShouldProcess($Content_Type, 'Create new contact assignment')) {
InvokeNetboxRequest -URI $URI -Method $Method -Body $URIComponents.Parameters -Raw:$Raw
}
}
}

View file

@ -1,84 +0,0 @@

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
}
}
}
}

View file

@ -1,90 +0,0 @@

function Get-NetboxContactRole {
<#
.SYNOPSIS
Get a contact role from Netbox
.DESCRIPTION
A detailed description of the Get-NetboxContactRole function.
.PARAMETER Name
The specific name of the contact role. Must match exactly as is defined in Netbox
.PARAMETER Id
The database ID of the contact role
.PARAMETER Query
A standard search query that will match one or more contact roles.
.PARAMETER Limit
Limit the number of results to this number
.PARAMETER Offset
Start the search at this index in results
.PARAMETER Raw
Return the unparsed data from the HTTP request
.EXAMPLE
PS C:\> Get-NetboxContactRole
.NOTES
Additional information about the function.
#>
[CmdletBinding(DefaultParameterSetName = 'Query')]
param
(
[Parameter(ParameterSetName = 'Query',
Position = 0)]
[string]$Name,
[Parameter(ParameterSetName = 'ByID')]
[uint64[]]$Id,
[Parameter(ParameterSetName = 'Query')]
[string]$Query,
[Parameter(ParameterSetName = 'Query')]
[string]$Slug,
[Parameter(ParameterSetName = 'Query')]
[string]$Description,
[Parameter(ParameterSetName = 'Query')]
[uint16]$Limit,
[Parameter(ParameterSetName = 'Query')]
[uint16]$Offset,
[switch]$Raw
)
switch ($PSCmdlet.ParameterSetName) {
'ById' {
foreach ($ContactRole_ID in $Id) {
$Segments = [System.Collections.ArrayList]::new(@('tenancy', 'contact-roles', $ContactRole_ID))
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id'
$uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $uri -Raw:$Raw
}
break
}
default {
$Segments = [System.Collections.ArrayList]::new(@('tenancy', 'contact-roles'))
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters
$uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $uri -Raw:$Raw
break
}
}
}

View file

@ -1,71 +0,0 @@

function New-NetboxContactRole {
<#
.SYNOPSIS
Create a new contact role in Netbox
.DESCRIPTION
Creates a new contact role object 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)]
[ValidateLength(1, 100)]
[string]$Name,
[Parameter(Mandatory = $true)]
[ValidateLength(1, 100)]
[ValidatePattern('^[-a-zA-Z0-9_]+$')]
[string]$Slug,
[ValidateLength(0, 200)]
[string]$Description,
[hashtable]$Custom_Fields,
[switch]$Raw
)
process {
$Segments = [System.Collections.ArrayList]::new(@('tenancy', 'contacts'))
$Method = 'POST'
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters
$URI = BuildNewURI -Segments $URIComponents.Segments
if ($PSCmdlet.ShouldProcess($Name, 'Create new contact')) {
InvokeNetboxRequest -URI $URI -Method $Method -Body $URIComponents.Parameters -Raw:$Raw
}
}
}

View file

@ -1,80 +0,0 @@
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
}
}
}
}

View file

@ -1,120 +0,0 @@

function Get-NetboxContact {
<#
.SYNOPSIS
Get a contact from Netbox
.DESCRIPTION
Obtain a contact or contacts from Netbox by ID or query
.PARAMETER Name
The specific name of the Contact. Must match exactly as is defined in Netbox
.PARAMETER Id
The database ID of the Contact
.PARAMETER Query
A standard search query that will match one or more Contacts.
.PARAMETER Email
Email address of the contact
.PARAMETER Title
Title of the contact
.PARAMETER Phone
Telephone number of the contact
.PARAMETER Address
Physical address of the contact
.PARAMETER Group
The specific group as defined in Netbox.
.PARAMETER GroupID
The database ID of the group in Netbox
.PARAMETER Limit
Limit the number of results to this number
.PARAMETER Offset
Start the search at this index in results
.PARAMETER Raw
Return the unparsed data from the HTTP request
.EXAMPLE
PS C:\> Get-NetboxContact
.NOTES
Additional information about the function.
#>
[CmdletBinding(DefaultParameterSetName = 'Query')]
param
(
[Parameter(ParameterSetName = 'Query',
Position = 0)]
[string]$Name,
[Parameter(ParameterSetName = 'ByID')]
[uint64[]]$Id,
[Parameter(ParameterSetName = 'Query')]
[string]$Query,
[Parameter(ParameterSetName = 'Query')]
[string]$Email,
[Parameter(ParameterSetName = 'Query')]
[string]$Title,
[Parameter(ParameterSetName = 'Query')]
[string]$Phone,
[Parameter(ParameterSetName = 'Query')]
[string]$Address,
[Parameter(ParameterSetName = 'Query')]
[string]$Group,
[Parameter(ParameterSetName = 'Query')]
[uint64]$GroupID,
[Parameter(ParameterSetName = 'Query')]
[uint16]$Limit,
[Parameter(ParameterSetName = 'Query')]
[uint16]$Offset,
[switch]$Raw
)
switch ($PSCmdlet.ParameterSetName) {
'ById' {
foreach ($Contact_ID in $Id) {
$Segments = [System.Collections.ArrayList]::new(@('tenancy', 'contacts', $Contact_ID))
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id'
$uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $uri -Raw:$Raw
}
break
}
default {
$Segments = [System.Collections.ArrayList]::new(@('tenancy', 'contacts'))
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters
$uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
InvokeNetboxRequest -URI $uri -Raw:$Raw
break
}
}
}

View file

@ -1,99 +0,0 @@

function New-NetboxContact {
<#
.SYNOPSIS
Create a new contact in Netbox
.DESCRIPTION
Creates a new contact object in Netbox which can be linked to other objects
.PARAMETER Name
The contacts full name, e.g "Leroy Jenkins"
.PARAMETER Email
Email address of the contact
.PARAMETER Title
Job title or other title related to the contact
.PARAMETER Phone
Telephone number
.PARAMETER Address
Physical address, usually mailing address
.PARAMETER Description
Short description of the contact
.PARAMETER Comments
Detailed comments. Markdown supported.
.PARAMETER Link
URI related to the contact
.PARAMETER Custom_Fields
A description of the Custom_Fields parameter.
.PARAMETER Raw
A description of the Raw parameter.
.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)]
[ValidateLength(1, 100)]
[string]$Name,
[Parameter(Mandatory = $true)]
[ValidateLength(0, 254)]
[string]$Email,
[ValidateLength(0, 100)]
[string]$Title,
[ValidateLength(0, 50)]
[string]$Phone,
[ValidateLength(0, 200)]
[string]$Address,
[ValidateLength(0, 200)]
[string]$Description,
[string]$Comments,
[ValidateLength(0, 200)]
[string]$Link,
[hashtable]$Custom_Fields,
[switch]$Raw
)
process {
$Segments = [System.Collections.ArrayList]::new(@('tenancy', 'contacts'))
$Method = 'POST'
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters
$URI = BuildNewURI -Segments $URIComponents.Segments
if ($PSCmdlet.ShouldProcess($Name, 'Create new contact')) {
InvokeNetboxRequest -URI $URI -Method $Method -Body $URIComponents.Parameters -Raw:$Raw
}
}
}

View file

@ -1,120 +0,0 @@

function Set-NetboxContact {
<#
.SYNOPSIS
Update a contact in Netbox
.DESCRIPTION
Updates a contact object in Netbox which can be linked to other objects
.PARAMETER Id
A description of the Id parameter.
.PARAMETER Name
The contacts full name, e.g "Leroy Jenkins"
.PARAMETER Email
Email address of the contact
.PARAMETER Group
Database ID of assigned group
.PARAMETER Title
Job title or other title related to the contact
.PARAMETER Phone
Telephone number
.PARAMETER Address
Physical address, usually mailing address
.PARAMETER Description
Short description of the contact
.PARAMETER Comments
Detailed comments. Markdown supported.
.PARAMETER Link
URI related to the contact
.PARAMETER Custom_Fields
A description of the Custom_Fields parameter.
.PARAMETER Force
A description of the Force parameter.
.PARAMETER Raw
A description of the Raw parameter.
.EXAMPLE
PS C:\> Set-NetboxContact -Id 10 -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,
[ValidateLength(1, 100)]
[string]$Name,
[ValidateLength(0, 254)]
[string]$Email,
[uint64]$Group,
[ValidateLength(0, 100)]
[string]$Title,
[ValidateLength(0, 50)]
[string]$Phone,
[ValidateLength(0, 200)]
[string]$Address,
[ValidateLength(0, 200)]
[string]$Description,
[string]$Comments,
[ValidateLength(0, 200)]
[string]$Link,
[hashtable]$Custom_Fields,
[switch]$Force,
[switch]$Raw
)
begin {
$Method = 'PATCH'
}
process {
foreach ($ContactId in $Id) {
$Segments = [System.Collections.ArrayList]::new(@('tenancy', 'contacts', $ContactId))
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id', 'Force'
$URI = BuildNewURI -Segments $URIComponents.Segments
$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
}
}
}
}

View file

@ -0,0 +1,25 @@
<#
.NOTES
===========================================================================
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
Created on: 3/19/2020 11:56
Created by: Claussen
Organization: NEOnet
Filename: Get-NetboxTenancyChoices.ps1
===========================================================================
.DESCRIPTION
A description of the file.
#>
function Get-NetboxTenancyChoices {
[CmdletBinding()]
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseSingularNouns", "", Justification = "These are literally 'choices' in Netbox")]
param ()
$uriSegments = [System.Collections.ArrayList]::new(@('tenancy', '_choices'))
$uri = BuildNewURI -Segments $uriSegments
InvokeNetboxRequest -URI $uri
}

Some files were not shown because too many files have changed in this diff Show more