mirror of
https://github.com/benclaussen/NetboxPS.git
synced 2025-12-12 17:32:29 +00:00
v1.5.0 (#22)
* Connect(Setup): Fix indent (using Visual code Formatter) * Setup(Functions): Fix indent (using Visual Code Formatter) * Support(Setup): Fix indent (using Visual Code Formatter) * InvokeNetboxRequest(Helpers): Fix indent (using Visual Code Formatter) * Add Set-netboxCipherSSL for enable TLS1.1 and TLS1.2 (for PS 5.0) From PowerAruba/FortiPower Module :) * Add Set-NetboxUnstrustedSSL for disable SSL chain test (for PS 5.0 From PowerAruba/FortiPwoer Module :) * Add Get/Set netboxInvokeParms for Get and Set Invoke Params (array) Like -SkipCertificate, Timeout... * InvokeNetboxRequest: Add to Splat NetboxInvokeParams * Connect: Add SkipCertificateCheck parameter (for PS5 and Core) Also enable TLS 1.1 and 1.2 for PS5 * PSSA: Add Github Actions for launch PSSA (PowerShell Script Analyzer) when launch PR (#11) Add also vscode/PSScriptAnalyzerSettings.psd1 for Settings for PSSA (can be reuse also for vscode...) * Update psproj * Correct typo * Correct brace formatting * Add Get/Set timeout functions * Add Get/Set timeout functions * Add TimeoutSeconds parameter and logic to Connect-NetboxAPI - Updated `InvokeNetboxRequest` to use `NetboxConfig.Timeout` - Updated `Get-NetboxAPIDefinition` to use `NetboxConfig.Timeout` * Trim whitespaces * Add Get-NetboxVersion function * Remove API Definition caching and replace with Netbox version check * Increment version to 1.4 * Fix Typo and Enhance AvailableIP Example (#18) * AvailableIP(IPAM/Address): Fix typo * AvailableIP(IAPM/Address): Enhance Example * NetboxPS(.psm1): Fix typo (paramters => parameters * Update deployment files * Add Assigned Object (Type and ID) to New IPAM Address (#19) * IPAMAddress(New): Remove tab (use 4 spaces) * IPAMAddress(New): Remove not longer needed code about value validation * IPAMAddress(New): Add Assigned Object Type and ID Fix #17 * IPAMAddress(New): add Parameter example * IPAMAddress(New): Add Validate for Assigned Object Type Can be only dcim.interface or virtualization.vminterface * IPAMAddress(New): Fix Example (it is New and not Create Verb !) * IPAMAddress(New): Remove -Force parameter, use -Confirm if you want a confirmation it is the standard with ShouldProcess * Fix PSSA Warning (#20) * Fix trailing white space using Invoke-ScriptAnalyzer -Fix -Path . -Recurse * add settings.json for configure Visual Code (Formatter) * PSSA: Fix Command accepts pipeline input but has not defined a process block * PSSA: Fix PSUseDeclaredVarsMoreThanAssignments The variable 'I_B' is assigned but never used The variable 'I_A' is assigned but never used * PSSA: Fix PSUseShouldProcessForStateChangingFunctions Function New-/Set-... has verb that could change system state. Therefore, the function has to support 'ShouldProcess' * Add release.(yml) Github Actions (#21) It will push on PSGallery module when release a new version ! * Update deploy.ps1 docs * Update readme * Remove unused files * Increment version to 1.5.0 Co-authored-by: Alexis La Goutte <alexis.lagoutte@gmail.com> Co-authored-by: Ben Claussen <claussen@neonet.org>
This commit is contained in:
parent
739f5e98e2
commit
26c7ccfdd0
68 changed files with 3017 additions and 2997 deletions
16
.github/workflows/release.yml
vendored
Normal file
16
.github/workflows/release.yml
vendored
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
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 }}"
|
||||
10
.vscode/settings.json
vendored
Normal file
10
.vscode/settings.json
vendored
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
// 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,
|
||||
"[markdown]": {
|
||||
"files.trimTrailingWhitespace": false,
|
||||
}
|
||||
}
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
<#
|
||||
.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
|
||||
#>
|
||||
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -13,119 +13,121 @@
|
|||
|
||||
|
||||
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 [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 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')]
|
||||
[uint16[]]$Id,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[string]$CID,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[datetime]$InstallDate,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[uint32]$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
|
||||
)
|
||||
|
||||
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"
|
||||
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.181
|
||||
|
|
@ -15,53 +15,55 @@
|
|||
|
||||
function New-NetboxCircuit {
|
||||
[CmdletBinding(ConfirmImpact = 'Low',
|
||||
SupportsShouldProcess = $true)]
|
||||
SupportsShouldProcess = $true)]
|
||||
[OutputType([pscustomobject])]
|
||||
param
|
||||
(
|
||||
[Parameter(Mandatory = $true,
|
||||
ValueFromPipelineByPropertyName = $true)]
|
||||
ValueFromPipelineByPropertyName = $true)]
|
||||
[string]$CID,
|
||||
|
||||
|
||||
[Parameter(Mandatory = $true)]
|
||||
[uint32]$Provider,
|
||||
|
||||
|
||||
[Parameter(Mandatory = $true)]
|
||||
[uint32]$Type,
|
||||
|
||||
|
||||
#[ValidateSet('Active', 'Planned', 'Provisioning', 'Offline', 'Deprovisioning', 'Decommissioned ')]
|
||||
[uint16]$Status = 'Active',
|
||||
|
||||
|
||||
[string]$Description,
|
||||
|
||||
|
||||
[uint32]$Tenant,
|
||||
|
||||
|
||||
[string]$Termination_A,
|
||||
|
||||
|
||||
[datetime]$Install_Date,
|
||||
|
||||
|
||||
[string]$Termination_Z,
|
||||
|
||||
|
||||
[ValidateRange(0, 2147483647)]
|
||||
[uint32]$Commit_Rate,
|
||||
|
||||
|
||||
[string]$Comments,
|
||||
|
||||
|
||||
[hashtable]$Custom_Fields,
|
||||
|
||||
|
||||
[switch]$Force,
|
||||
|
||||
|
||||
[switch]$Raw
|
||||
)
|
||||
|
||||
$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
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.181
|
||||
|
|
@ -20,52 +20,52 @@ function Get-NetboxCircuitProvider {
|
|||
[Parameter(ParameterSetName = 'ById',
|
||||
Mandatory = $true)]
|
||||
[uint16[]]$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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.181
|
||||
|
|
@ -20,58 +20,58 @@ function Get-NetboxCircuitTermination {
|
|||
[Parameter(ParameterSetName = 'ById',
|
||||
ValueFromPipelineByPropertyName = $true)]
|
||||
[uint32[]]$Id,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[string]$Circuit_ID,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[string]$Term_Side,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[uint32]$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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.181
|
||||
|
|
@ -19,45 +19,45 @@ function Get-NetboxCircuitType {
|
|||
(
|
||||
[Parameter(ParameterSetName = 'ById')]
|
||||
[uint16[]]$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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -18,82 +18,84 @@ function Get-NetboxDCIMDevice {
|
|||
param
|
||||
(
|
||||
[uint16]$Limit,
|
||||
|
||||
|
||||
[uint16]$Offset,
|
||||
|
||||
|
||||
[Parameter(ValueFromPipelineByPropertyName = $true)]
|
||||
[uint16[]]$Id,
|
||||
|
||||
|
||||
[string]$Query,
|
||||
|
||||
|
||||
[string]$Name,
|
||||
|
||||
|
||||
[uint16]$Manufacturer_Id,
|
||||
|
||||
|
||||
[string]$Manufacturer,
|
||||
|
||||
|
||||
[uint16]$Device_Type_Id,
|
||||
|
||||
|
||||
[uint16]$Role_Id,
|
||||
|
||||
|
||||
[string]$Role,
|
||||
|
||||
|
||||
[uint16]$Tenant_Id,
|
||||
|
||||
|
||||
[string]$Tenant,
|
||||
|
||||
|
||||
[uint16]$Platform_Id,
|
||||
|
||||
|
||||
[string]$Platform,
|
||||
|
||||
|
||||
[string]$Asset_Tag,
|
||||
|
||||
|
||||
[uint16]$Site_Id,
|
||||
|
||||
|
||||
[string]$Site,
|
||||
|
||||
|
||||
[uint16]$Rack_Group_Id,
|
||||
|
||||
|
||||
[uint16]$Rack_Id,
|
||||
|
||||
|
||||
[uint16]$Cluster_Id,
|
||||
|
||||
|
||||
[uint16]$Model,
|
||||
|
||||
|
||||
[object]$Status,
|
||||
|
||||
|
||||
[bool]$Is_Full_Depth,
|
||||
|
||||
|
||||
[bool]$Is_Console_Server,
|
||||
|
||||
|
||||
[bool]$Is_PDU,
|
||||
|
||||
|
||||
[bool]$Is_Network_Device,
|
||||
|
||||
|
||||
[string]$MAC_Address,
|
||||
|
||||
|
||||
[bool]$Has_Primary_IP,
|
||||
|
||||
|
||||
[uint16]$Virtual_Chassis_Id,
|
||||
|
||||
|
||||
[uint16]$Position,
|
||||
|
||||
|
||||
[string]$Serial,
|
||||
|
||||
|
||||
[switch]$Raw
|
||||
)
|
||||
|
||||
|
||||
#endregion Parameters
|
||||
|
||||
if ($null -ne $Status) {
|
||||
$PSBoundParameters.Status = ValidateDCIMChoice -ProvidedValue $Status -DeviceStatus
|
||||
|
||||
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'
|
||||
|
||||
$URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
|
||||
|
||||
InvokeNetboxRequest -URI $URI -Raw:$Raw
|
||||
}
|
||||
|
||||
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'devices'))
|
||||
|
||||
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Raw'
|
||||
|
||||
$URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
|
||||
|
||||
InvokeNetboxRequest -URI $URI -Raw:$Raw
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -17,45 +17,45 @@ function Get-NetboxDCIMDeviceRole {
|
|||
param
|
||||
(
|
||||
[uint16]$Limit,
|
||||
|
||||
|
||||
[uint16]$Offset,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'ById')]
|
||||
[uint16[]]$Id,
|
||||
|
||||
|
||||
[string]$Name,
|
||||
|
||||
|
||||
[string]$Slug,
|
||||
|
||||
|
||||
[string]$Color,
|
||||
|
||||
|
||||
[bool]$VM_Role,
|
||||
|
||||
|
||||
[switch]$Raw
|
||||
)
|
||||
|
||||
|
||||
switch ($PSCmdlet.ParameterSetName) {
|
||||
'ById' {
|
||||
foreach ($DRId in $Id) {
|
||||
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'device-roles', $DRId))
|
||||
|
||||
|
||||
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id', 'Raw'
|
||||
|
||||
|
||||
$URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
|
||||
|
||||
|
||||
InvokeNetboxRequest -URI $URI -Raw:$Raw
|
||||
}
|
||||
|
||||
|
||||
break
|
||||
}
|
||||
|
||||
|
||||
default {
|
||||
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'device-roles'))
|
||||
|
||||
|
||||
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Raw'
|
||||
|
||||
|
||||
$URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
|
||||
|
||||
|
||||
InvokeNetboxRequest -URI $URI -Raw:$Raw
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -18,44 +18,44 @@ function Get-NetboxDCIMDeviceType {
|
|||
param
|
||||
(
|
||||
[uint16]$Offset,
|
||||
|
||||
|
||||
[uint16]$Limit,
|
||||
|
||||
|
||||
[uint16[]]$Id,
|
||||
|
||||
|
||||
[string]$Query,
|
||||
|
||||
|
||||
[string]$Slug,
|
||||
|
||||
|
||||
[string]$Manufacturer,
|
||||
|
||||
|
||||
[uint16]$Manufacturer_Id,
|
||||
|
||||
|
||||
[string]$Model,
|
||||
|
||||
|
||||
[string]$Part_Number,
|
||||
|
||||
|
||||
[uint16]$U_Height,
|
||||
|
||||
|
||||
[bool]$Is_Full_Depth,
|
||||
|
||||
|
||||
[bool]$Is_Console_Server,
|
||||
|
||||
|
||||
[bool]$Is_PDU,
|
||||
|
||||
|
||||
[bool]$Is_Network_Device,
|
||||
|
||||
|
||||
[uint16]$Subdevice_Role,
|
||||
|
||||
|
||||
[switch]$Raw
|
||||
)
|
||||
#endregion Parameters
|
||||
|
||||
|
||||
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'device-types'))
|
||||
|
||||
|
||||
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Raw'
|
||||
|
||||
|
||||
$URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
|
||||
|
||||
|
||||
InvokeNetboxRequest -URI $URI -Raw:$Raw
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -13,78 +13,81 @@
|
|||
|
||||
|
||||
function New-NetboxDCIMDevice {
|
||||
[CmdletBinding()]
|
||||
[CmdletBinding(ConfirmImpact = 'low',
|
||||
SupportsShouldProcess = $true)]
|
||||
[OutputType([pscustomobject])]
|
||||
#region Parameters
|
||||
param
|
||||
(
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$Name,
|
||||
|
||||
|
||||
[Parameter(Mandatory = $true)]
|
||||
[object]$Device_Role,
|
||||
|
||||
|
||||
[Parameter(Mandatory = $true)]
|
||||
[object]$Device_Type,
|
||||
|
||||
|
||||
[Parameter(Mandatory = $true)]
|
||||
[uint16]$Site,
|
||||
|
||||
|
||||
[object]$Status = 'Active',
|
||||
|
||||
|
||||
[uint16]$Platform,
|
||||
|
||||
|
||||
[uint16]$Tenant,
|
||||
|
||||
|
||||
[uint16]$Cluster,
|
||||
|
||||
|
||||
[uint16]$Rack,
|
||||
|
||||
|
||||
[uint16]$Position,
|
||||
|
||||
|
||||
[object]$Face,
|
||||
|
||||
|
||||
[string]$Serial,
|
||||
|
||||
|
||||
[string]$Asset_Tag,
|
||||
|
||||
|
||||
[uint16]$Virtual_Chassis,
|
||||
|
||||
|
||||
[uint16]$VC_Priority,
|
||||
|
||||
|
||||
[uint16]$VC_Position,
|
||||
|
||||
|
||||
[uint16]$Primary_IP4,
|
||||
|
||||
|
||||
[uint16]$Primary_IP6,
|
||||
|
||||
|
||||
[string]$Comments,
|
||||
|
||||
|
||||
[hashtable]$Custom_Fields
|
||||
)
|
||||
#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
|
||||
# }
|
||||
|
||||
|
||||
# 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
|
||||
|
||||
InvokeNetboxRequest -URI $URI -Body $URIComponents.Parameters -Method POST
|
||||
|
||||
if ($PSCmdlet.ShouldProcess($Name, 'Create new Device')) {
|
||||
InvokeNetboxRequest -URI $URI -Body $URIComponents.Parameters -Method POST
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -16,23 +16,23 @@ function Remove-NetboxDCIMDevice {
|
|||
<#
|
||||
.SYNOPSIS
|
||||
Delete a device
|
||||
|
||||
|
||||
.DESCRIPTION
|
||||
Deletes a device from Netbox by ID
|
||||
|
||||
|
||||
.PARAMETER Id
|
||||
Database ID of the device
|
||||
|
||||
|
||||
.PARAMETER Force
|
||||
Force deletion without any prompts
|
||||
|
||||
|
||||
.EXAMPLE
|
||||
PS C:\> Remove-NetboxDCIMDevice -Id $value1
|
||||
|
||||
|
||||
.NOTES
|
||||
Additional information about the function.
|
||||
#>
|
||||
|
||||
|
||||
[CmdletBinding(ConfirmImpact = 'High',
|
||||
SupportsShouldProcess = $true)]
|
||||
param
|
||||
|
|
@ -40,29 +40,29 @@ function Remove-NetboxDCIMDevice {
|
|||
[Parameter(Mandatory = $true,
|
||||
ValueFromPipelineByPropertyName = $true)]
|
||||
[uint16[]]$Id,
|
||||
|
||||
|
||||
[switch]$Force
|
||||
)
|
||||
|
||||
|
||||
begin {
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
process {
|
||||
foreach ($DeviceID in $Id) {
|
||||
$CurrentDevice = Get-NetboxDCIMDevice -Id $DeviceID -ErrorAction Stop
|
||||
|
||||
|
||||
if ($Force -or $pscmdlet.ShouldProcess("Name: $($CurrentDevice.Name) | ID: $($CurrentDevice.Id)", "Remove")) {
|
||||
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'devices', $CurrentDevice.Id))
|
||||
|
||||
|
||||
$URI = BuildNewURI -Segments $Segments
|
||||
|
||||
|
||||
InvokeNetboxRequest -URI $URI -Method DELETE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
end {
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -19,77 +19,77 @@ function Set-NetboxDCIMDevice {
|
|||
[Parameter(Mandatory = $true,
|
||||
ValueFromPipelineByPropertyName = $true)]
|
||||
[uint16[]]$Id,
|
||||
|
||||
|
||||
[string]$Name,
|
||||
|
||||
|
||||
[object]$Device_Role,
|
||||
|
||||
|
||||
[object]$Device_Type,
|
||||
|
||||
|
||||
[uint16]$Site,
|
||||
|
||||
|
||||
[object]$Status,
|
||||
|
||||
|
||||
[uint16]$Platform,
|
||||
|
||||
|
||||
[uint16]$Tenant,
|
||||
|
||||
|
||||
[uint16]$Cluster,
|
||||
|
||||
|
||||
[uint16]$Rack,
|
||||
|
||||
|
||||
[uint16]$Position,
|
||||
|
||||
|
||||
[object]$Face,
|
||||
|
||||
|
||||
[string]$Serial,
|
||||
|
||||
|
||||
[string]$Asset_Tag,
|
||||
|
||||
|
||||
[uint16]$Virtual_Chassis,
|
||||
|
||||
|
||||
[uint16]$VC_Priority,
|
||||
|
||||
|
||||
[uint16]$VC_Position,
|
||||
|
||||
|
||||
[uint16]$Primary_IP4,
|
||||
|
||||
|
||||
[uint16]$Primary_IP6,
|
||||
|
||||
|
||||
[string]$Comments,
|
||||
|
||||
|
||||
[hashtable]$Custom_Fields,
|
||||
|
||||
|
||||
[switch]$Force
|
||||
)
|
||||
|
||||
|
||||
begin {
|
||||
# if ($null -ne $Status) {
|
||||
# $PSBoundParameters.Status = ValidateDCIMChoice -ProvidedValue $Status -DeviceStatus
|
||||
# }
|
||||
#
|
||||
|
||||
# if ($null -ne $Face) {
|
||||
# $PSBoundParameters.Face = ValidateDCIMChoice -ProvidedValue $Face -DeviceFace
|
||||
# }
|
||||
}
|
||||
|
||||
|
||||
process {
|
||||
foreach ($DeviceID in $Id) {
|
||||
$CurrentDevice = Get-NetboxDCIMDevice -Id $DeviceID -ErrorAction Stop
|
||||
|
||||
|
||||
if ($Force -or $pscmdlet.ShouldProcess("$($CurrentDevice.Name)", "Set")) {
|
||||
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'devices', $CurrentDevice.Id))
|
||||
|
||||
|
||||
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id', 'Force'
|
||||
|
||||
|
||||
$URI = BuildNewURI -Segments $URIComponents.Segments
|
||||
|
||||
|
||||
InvokeNetboxRequest -URI $URI -Body $URIComponents.Parameters -Method PATCH
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
end {
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -18,45 +18,45 @@ function Get-NetboxDCIMPlatform {
|
|||
param
|
||||
(
|
||||
[uint16]$Limit,
|
||||
|
||||
|
||||
[uint16]$Offset,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'ById')]
|
||||
[uint16[]]$Id,
|
||||
|
||||
|
||||
[string]$Name,
|
||||
|
||||
|
||||
[string]$Slug,
|
||||
|
||||
|
||||
[uint16]$Manufacturer_Id,
|
||||
|
||||
|
||||
[string]$Manufacturer,
|
||||
|
||||
|
||||
[switch]$Raw
|
||||
)
|
||||
|
||||
|
||||
switch ($PSCmdlet.ParameterSetName) {
|
||||
'ById' {
|
||||
foreach ($PlatformID in $Id) {
|
||||
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'platforms', $PlatformID))
|
||||
|
||||
|
||||
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id', 'Raw'
|
||||
|
||||
|
||||
$URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
|
||||
|
||||
|
||||
InvokeNetboxRequest -URI $URI -Raw:$Raw
|
||||
}
|
||||
|
||||
|
||||
break
|
||||
}
|
||||
|
||||
|
||||
default {
|
||||
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'platforms'))
|
||||
|
||||
|
||||
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Raw'
|
||||
|
||||
|
||||
$URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
|
||||
|
||||
|
||||
InvokeNetboxRequest -URI $URI -Raw:$Raw
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -19,66 +19,66 @@ function Add-NetboxDCIMInterface {
|
|||
(
|
||||
[Parameter(Mandatory = $true)]
|
||||
[uint16]$Device,
|
||||
|
||||
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$Name,
|
||||
|
||||
|
||||
[bool]$Enabled,
|
||||
|
||||
|
||||
[object]$Form_Factor,
|
||||
|
||||
|
||||
[uint16]$MTU,
|
||||
|
||||
|
||||
[string]$MAC_Address,
|
||||
|
||||
|
||||
[bool]$MGMT_Only,
|
||||
|
||||
|
||||
[uint16]$LAG,
|
||||
|
||||
|
||||
[string]$Description,
|
||||
|
||||
|
||||
[ValidateSet('Access', 'Tagged', 'Tagged All', '100', '200', '300', IgnoreCase = $true)]
|
||||
[string]$Mode,
|
||||
|
||||
|
||||
[ValidateRange(1, 4094)]
|
||||
[uint16]$Untagged_VLAN,
|
||||
|
||||
|
||||
[ValidateRange(1, 4094)]
|
||||
[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' {
|
||||
100
|
||||
break
|
||||
}
|
||||
|
||||
|
||||
'Tagged' {
|
||||
200
|
||||
break
|
||||
}
|
||||
|
||||
|
||||
'Tagged All' {
|
||||
300
|
||||
break
|
||||
}
|
||||
|
||||
|
||||
default {
|
||||
$_
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'interfaces'))
|
||||
|
||||
|
||||
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters
|
||||
|
||||
|
||||
$URI = BuildNewURI -Segments $URIComponents.Segments
|
||||
|
||||
|
||||
InvokeNetboxRequest -URI $URI -Body $URIComponents.Parameters -Method POST
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -13,55 +13,55 @@
|
|||
|
||||
|
||||
function Add-NetboxDCIMInterfaceConnection {
|
||||
<#
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Create a new connection between two interfaces
|
||||
|
||||
|
||||
.DESCRIPTION
|
||||
Create a new connection between two interfaces
|
||||
|
||||
|
||||
.PARAMETER Connection_Status
|
||||
Is it connected or planned?
|
||||
|
||||
|
||||
.PARAMETER Interface_A
|
||||
Database ID of interface A
|
||||
|
||||
|
||||
.PARAMETER Interface_B
|
||||
Database ID of interface B
|
||||
|
||||
|
||||
.EXAMPLE
|
||||
PS C:\> Add-NetboxDCIMInterfaceConnection -Interface_A $value1 -Interface_B $value2
|
||||
|
||||
|
||||
.NOTES
|
||||
Additional information about the function.
|
||||
#>
|
||||
|
||||
|
||||
[CmdletBinding()]
|
||||
[OutputType([pscustomobject])]
|
||||
param
|
||||
(
|
||||
[object]$Connection_Status,
|
||||
|
||||
|
||||
[Parameter(Mandatory = $true)]
|
||||
[uint16]$Interface_A,
|
||||
|
||||
|
||||
[Parameter(Mandatory = $true)]
|
||||
[uint16]$Interface_B
|
||||
)
|
||||
|
||||
|
||||
if ($null -ne $Connection_Status) {
|
||||
$PSBoundParameters.Connection_Status = ValidateDCIMChoice -ProvidedValue $Connection_Status -InterfaceConnectionStatus
|
||||
}
|
||||
|
||||
|
||||
# Verify if both Interfaces exist
|
||||
$I_A = Get-NetboxDCIMInterface -Id $Interface_A -ErrorAction Stop
|
||||
$I_B = Get-NetboxDCIMInterface -Id $Interface_B -ErrorAction Stop
|
||||
|
||||
Get-NetboxDCIMInterface -Id $Interface_A -ErrorAction Stop | Out-null
|
||||
Get-NetboxDCIMInterface -Id $Interface_B -ErrorAction Stop | Out-null
|
||||
|
||||
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'interface-connections'))
|
||||
|
||||
|
||||
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters
|
||||
|
||||
|
||||
$URI = BuildNewURI -Segments $URIComponents.Segments
|
||||
|
||||
|
||||
InvokeNetboxRequest -URI $URI -Body $URIComponents.Parameters -Method POST
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -18,44 +18,46 @@ function Get-NetboxDCIMInterface {
|
|||
param
|
||||
(
|
||||
[uint16]$Limit,
|
||||
|
||||
|
||||
[uint16]$Offset,
|
||||
|
||||
|
||||
[Parameter(ValueFromPipelineByPropertyName = $true)]
|
||||
[uint16]$Id,
|
||||
|
||||
|
||||
[uint16]$Name,
|
||||
|
||||
|
||||
[object]$Form_Factor,
|
||||
|
||||
|
||||
[bool]$Enabled,
|
||||
|
||||
|
||||
[uint16]$MTU,
|
||||
|
||||
|
||||
[bool]$MGMT_Only,
|
||||
|
||||
|
||||
[string]$Device,
|
||||
|
||||
|
||||
[uint16]$Device_Id,
|
||||
|
||||
|
||||
[uint16]$Type,
|
||||
|
||||
|
||||
[uint16]$LAG_Id,
|
||||
|
||||
|
||||
[string]$MAC_Address,
|
||||
|
||||
|
||||
[switch]$Raw
|
||||
)
|
||||
|
||||
if ($null -ne $Form_Factor) {
|
||||
$PSBoundParameters.Form_Factor = ValidateDCIMChoice -ProvidedValue $Form_Factor -InterfaceFormFactor
|
||||
|
||||
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
|
||||
|
||||
$URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
|
||||
|
||||
InvokeNetboxRequest -URI $URI -Raw:$Raw
|
||||
}
|
||||
|
||||
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'interfaces'))
|
||||
|
||||
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters
|
||||
|
||||
$URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
|
||||
|
||||
InvokeNetboxRequest -URI $URI -Raw:$Raw
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -18,29 +18,29 @@ function Get-NetboxDCIMInterfaceConnection {
|
|||
param
|
||||
(
|
||||
[uint16]$Limit,
|
||||
|
||||
|
||||
[uint16]$Offset,
|
||||
|
||||
|
||||
[uint16]$Id,
|
||||
|
||||
|
||||
[object]$Connection_Status,
|
||||
|
||||
|
||||
[uint16]$Site,
|
||||
|
||||
|
||||
[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'
|
||||
|
||||
|
||||
$URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
|
||||
|
||||
|
||||
InvokeNetboxRequest -URI $URI -Raw:$Raw
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -16,23 +16,23 @@ function Remove-NetboxDCIMInterface {
|
|||
<#
|
||||
.SYNOPSIS
|
||||
Removes an interface
|
||||
|
||||
|
||||
.DESCRIPTION
|
||||
Removes an interface by ID from a device
|
||||
|
||||
|
||||
.PARAMETER Id
|
||||
A description of the Id parameter.
|
||||
|
||||
|
||||
.PARAMETER Force
|
||||
A description of the Force parameter.
|
||||
|
||||
|
||||
.EXAMPLE
|
||||
PS C:\> Remove-NetboxDCIMInterface -Id $value1
|
||||
|
||||
|
||||
.NOTES
|
||||
Additional information about the function.
|
||||
#>
|
||||
|
||||
|
||||
[CmdletBinding(ConfirmImpact = 'High',
|
||||
SupportsShouldProcess = $true)]
|
||||
param
|
||||
|
|
@ -40,29 +40,29 @@ function Remove-NetboxDCIMInterface {
|
|||
[Parameter(Mandatory = $true,
|
||||
ValueFromPipelineByPropertyName = $true)]
|
||||
[uint16[]]$Id,
|
||||
|
||||
|
||||
[switch]$Force
|
||||
)
|
||||
|
||||
|
||||
begin {
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
process {
|
||||
foreach ($InterfaceId in $Id) {
|
||||
$CurrentInterface = Get-NetboxDCIMInterface -Id $InterfaceId -ErrorAction Stop
|
||||
|
||||
|
||||
if ($Force -or $pscmdlet.ShouldProcess("Name: $($CurrentInterface.Name) | ID: $($CurrentInterface.Id)", "Remove")) {
|
||||
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'interfaces', $CurrentInterface.Id))
|
||||
|
||||
|
||||
$URI = BuildNewURI -Segments $Segments
|
||||
|
||||
|
||||
InvokeNetboxRequest -URI $URI -Method DELETE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
end {
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -21,31 +21,31 @@ function Remove-NetboxDCIMInterfaceConnection {
|
|||
[Parameter(Mandatory = $true,
|
||||
ValueFromPipelineByPropertyName = $true)]
|
||||
[uint16[]]$Id,
|
||||
|
||||
|
||||
[switch]$Force
|
||||
)
|
||||
|
||||
|
||||
begin {
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
process {
|
||||
foreach ($ConnectionID in $Id) {
|
||||
$CurrentConnection = Get-NetboxDCIMInterfaceConnection -Id $ConnectionID -ErrorAction Stop
|
||||
|
||||
|
||||
if ($Force -or $pscmdlet.ShouldProcess("Connection ID $($ConnectionID.Id)", "REMOVE")) {
|
||||
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'interface-connections', $CurrentConnection.Id))
|
||||
|
||||
|
||||
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id', 'Force'
|
||||
|
||||
|
||||
$URI = BuildNewURI -Segments $URIComponents.Segments
|
||||
|
||||
|
||||
InvokeNetboxRequest -URI $URI -Method DELETE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
end {
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -13,86 +13,89 @@
|
|||
|
||||
|
||||
function Set-NetboxDCIMInterface {
|
||||
[CmdletBinding()]
|
||||
[CmdletBinding(ConfirmImpact = 'Medium',
|
||||
SupportsShouldProcess = $true)]
|
||||
[OutputType([pscustomobject])]
|
||||
param
|
||||
(
|
||||
[Parameter(Mandatory = $true,
|
||||
ValueFromPipelineByPropertyName = $true)]
|
||||
ValueFromPipelineByPropertyName = $true)]
|
||||
[uint16[]]$Id,
|
||||
|
||||
|
||||
[uint16]$Device,
|
||||
|
||||
|
||||
[string]$Name,
|
||||
|
||||
|
||||
[bool]$Enabled,
|
||||
|
||||
|
||||
[object]$Form_Factor,
|
||||
|
||||
|
||||
[uint16]$MTU,
|
||||
|
||||
|
||||
[string]$MAC_Address,
|
||||
|
||||
|
||||
[bool]$MGMT_Only,
|
||||
|
||||
|
||||
[uint16]$LAG,
|
||||
|
||||
|
||||
[string]$Description,
|
||||
|
||||
|
||||
[ValidateSet('Access', 'Tagged', 'Tagged All', '100', '200', '300', IgnoreCase = $true)]
|
||||
[string]$Mode,
|
||||
|
||||
|
||||
[ValidateRange(1, 4094)]
|
||||
[uint16]$Untagged_VLAN,
|
||||
|
||||
|
||||
[ValidateRange(1, 4094)]
|
||||
[uint16[]]$Tagged_VLANs
|
||||
)
|
||||
|
||||
|
||||
begin {
|
||||
# if ($null -ne $Form_Factor) {
|
||||
# $PSBoundParameters.Form_Factor = ValidateDCIMChoice -ProvidedValue $Form_Factor -InterfaceFormFactor
|
||||
# }
|
||||
|
||||
# if ($null -ne $Form_Factor) {
|
||||
# $PSBoundParameters.Form_Factor = ValidateDCIMChoice -ProvidedValue $Form_Factor -InterfaceFormFactor
|
||||
# }
|
||||
|
||||
if (-not [System.String]::IsNullOrWhiteSpace($Mode)) {
|
||||
$PSBoundParameters.Mode = switch ($Mode) {
|
||||
'Access' {
|
||||
100
|
||||
break
|
||||
}
|
||||
|
||||
|
||||
'Tagged' {
|
||||
200
|
||||
break
|
||||
}
|
||||
|
||||
|
||||
'Tagged All' {
|
||||
300
|
||||
break
|
||||
}
|
||||
|
||||
|
||||
default {
|
||||
$_
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
process {
|
||||
foreach ($InterfaceId in $Id) {
|
||||
$CurrentInterface = Get-NetboxDCIMInterface -Id $InterfaceId -ErrorAction Stop
|
||||
|
||||
|
||||
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'interfaces', $CurrentInterface.Id))
|
||||
|
||||
|
||||
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id'
|
||||
|
||||
|
||||
$URI = BuildNewURI -Segments $Segments
|
||||
|
||||
InvokeNetboxRequest -URI $URI -Body $URIComponents.Parameters -Method PATCH
|
||||
|
||||
if ($Force -or $pscmdlet.ShouldProcess("Interface ID $($CurrentInterface.Id)", "Set")) {
|
||||
InvokeNetboxRequest -URI $URI -Body $URIComponents.Parameters -Method PATCH
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
end {
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -16,32 +16,32 @@ function Set-NetboxDCIMInterfaceConnection {
|
|||
<#
|
||||
.SYNOPSIS
|
||||
Update an interface connection
|
||||
|
||||
|
||||
.DESCRIPTION
|
||||
Update an interface connection
|
||||
|
||||
|
||||
.PARAMETER Id
|
||||
A description of the Id parameter.
|
||||
|
||||
|
||||
.PARAMETER Connection_Status
|
||||
A description of the Connection_Status parameter.
|
||||
|
||||
|
||||
.PARAMETER Interface_A
|
||||
A description of the Interface_A parameter.
|
||||
|
||||
|
||||
.PARAMETER Interface_B
|
||||
A description of the Interface_B parameter.
|
||||
|
||||
|
||||
.PARAMETER Force
|
||||
A description of the Force parameter.
|
||||
|
||||
|
||||
.EXAMPLE
|
||||
PS C:\> Set-NetboxDCIMInterfaceConnection -Id $value1
|
||||
|
||||
|
||||
.NOTES
|
||||
Additional information about the function.
|
||||
#>
|
||||
|
||||
|
||||
[CmdletBinding(ConfirmImpact = 'Medium',
|
||||
SupportsShouldProcess = $true)]
|
||||
param
|
||||
|
|
@ -49,44 +49,44 @@ function Set-NetboxDCIMInterfaceConnection {
|
|||
[Parameter(Mandatory = $true,
|
||||
ValueFromPipelineByPropertyName = $true)]
|
||||
[uint16[]]$Id,
|
||||
|
||||
|
||||
[object]$Connection_Status,
|
||||
|
||||
|
||||
[uint16]$Interface_A,
|
||||
|
||||
|
||||
[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"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
process {
|
||||
foreach ($ConnectionID in $Id) {
|
||||
$CurrentConnection = Get-NetboxDCIMInterfaceConnection -Id $ConnectionID -ErrorAction Stop
|
||||
|
||||
|
||||
$Segments = [System.Collections.ArrayList]::new(@('dcim', 'interface-connections', $CurrentConnection.Id))
|
||||
|
||||
|
||||
if ($Force -or $pscmdlet.ShouldProcess("Connection ID $($CurrentConnection.Id)", "Set")) {
|
||||
|
||||
|
||||
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id', 'Force'
|
||||
|
||||
|
||||
$URI = BuildNewURI -Segments $URIComponents.Segments
|
||||
|
||||
|
||||
InvokeNetboxRequest -URI $URI -Body $URIComponents.Parameters -Method PATCH
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
end {
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.181
|
||||
|
|
@ -20,89 +20,91 @@ function Get-NetboxDCIMSite {
|
|||
(
|
||||
[Parameter(ParameterSetName = 'ByID', ValueFromPipelineByPropertyName = $true)]
|
||||
[uint32]$Id,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[string]$Name,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[string]$Query,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[string]$Slug,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[string]$Facility,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[uint32]$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')]
|
||||
[uint32]$Tenant_Group_ID,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[string]$Tenant_Group,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[uint32]$Tenant_ID,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[string]$Tenant,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[string]$Status,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[uint32]$Region_ID,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[string]$Region,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[uint16]$Limit,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[uint16]$Offset,
|
||||
|
||||
|
||||
[switch]$Raw
|
||||
)
|
||||
|
||||
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"
|
||||
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -16,77 +16,77 @@ function BuildNewURI {
|
|||
<#
|
||||
.SYNOPSIS
|
||||
Create a new URI for Netbox
|
||||
|
||||
|
||||
.DESCRIPTION
|
||||
Internal function used to build a URIBuilder object.
|
||||
|
||||
|
||||
.PARAMETER Hostname
|
||||
Hostname of the Netbox API
|
||||
|
||||
|
||||
.PARAMETER Segments
|
||||
Array of strings for each segment in the URL path
|
||||
|
||||
|
||||
.PARAMETER Parameters
|
||||
Hashtable of query parameters to include
|
||||
|
||||
|
||||
.PARAMETER HTTPS
|
||||
Whether to use HTTPS or HTTP
|
||||
|
||||
|
||||
.PARAMETER Port
|
||||
A description of the Port parameter.
|
||||
|
||||
|
||||
.PARAMETER APIInfo
|
||||
A description of the APIInfo parameter.
|
||||
|
||||
|
||||
.EXAMPLE
|
||||
PS C:\> BuildNewURI
|
||||
|
||||
|
||||
.NOTES
|
||||
Additional information about the function.
|
||||
#>
|
||||
|
||||
|
||||
[CmdletBinding()]
|
||||
[OutputType([System.UriBuilder])]
|
||||
param
|
||||
(
|
||||
[Parameter(Mandatory = $false)]
|
||||
[string[]]$Segments,
|
||||
|
||||
|
||||
[Parameter(Mandatory = $false)]
|
||||
[hashtable]$Parameters,
|
||||
|
||||
|
||||
[switch]$SkipConnectedCheck
|
||||
)
|
||||
|
||||
|
||||
Write-Verbose "Building URI"
|
||||
|
||||
|
||||
if (-not $SkipConnectedCheck) {
|
||||
# There is no point in continuing if we have not successfully connected to an API
|
||||
$null = CheckNetboxIsConnected
|
||||
}
|
||||
|
||||
|
||||
# Begin a URI builder with HTTP/HTTPS and the provided hostname
|
||||
$uriBuilder = [System.UriBuilder]::new($script:NetboxConfig.HostScheme, $script:NetboxConfig.Hostname, $script:NetboxConfig.HostPort)
|
||||
|
||||
|
||||
# Generate the path by trimming excess slashes and whitespace from the $segments[] and joining together
|
||||
$uriBuilder.Path = "api/{0}/" -f ($Segments.ForEach({
|
||||
$_.trim('/').trim()
|
||||
}) -join '/')
|
||||
|
||||
|
||||
Write-Verbose " URIPath: $($uriBuilder.Path)"
|
||||
|
||||
|
||||
if ($parameters) {
|
||||
# Loop through the parameters and use the HttpUtility to create a Query string
|
||||
[System.Collections.Specialized.NameValueCollection]$URIParams = [System.Web.HttpUtility]::ParseQueryString([String]::Empty)
|
||||
|
||||
|
||||
foreach ($param in $Parameters.GetEnumerator()) {
|
||||
Write-Verbose " Adding URI parameter $($param.Key):$($param.Value)"
|
||||
$URIParams[$param.Key] = $param.Value
|
||||
}
|
||||
|
||||
|
||||
$uriBuilder.Query = $URIParams.ToString()
|
||||
}
|
||||
|
||||
|
||||
Write-Verbose " Completed building URIBuilder"
|
||||
# Return the entire UriBuilder object
|
||||
$uriBuilder
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -19,30 +19,30 @@ function BuildURIComponents {
|
|||
(
|
||||
[Parameter(Mandatory = $true)]
|
||||
[System.Collections.ArrayList]$URISegments,
|
||||
|
||||
|
||||
[Parameter(Mandatory = $true)]
|
||||
[object]$ParametersDictionary,
|
||||
|
||||
|
||||
[string[]]$SkipParameterByName
|
||||
)
|
||||
|
||||
|
||||
Write-Verbose "Building URI components"
|
||||
|
||||
|
||||
$URIParameters = @{
|
||||
}
|
||||
|
||||
|
||||
foreach ($CmdletParameterName in $ParametersDictionary.Keys) {
|
||||
if ($CmdletParameterName -in $script:CommonParameterNames) {
|
||||
# These are common parameters and should not be appended to the URI
|
||||
Write-Debug "Skipping common parameter $CmdletParameterName"
|
||||
continue
|
||||
}
|
||||
|
||||
|
||||
if ($CmdletParameterName -in $SkipParameterByName) {
|
||||
Write-Debug "Skipping parameter $CmdletParameterName by SkipParameterByName"
|
||||
continue
|
||||
}
|
||||
|
||||
|
||||
switch ($CmdletParameterName) {
|
||||
"id" {
|
||||
# Check if there is one or more values for Id and build a URI or query as appropriate
|
||||
|
|
@ -53,26 +53,26 @@ function BuildURIComponents {
|
|||
Write-Verbose " Adding ID to segments"
|
||||
[void]$uriSegments.Add($ParametersDictionary[$CmdletParameterName])
|
||||
}
|
||||
|
||||
|
||||
break
|
||||
}
|
||||
|
||||
|
||||
'Query' {
|
||||
Write-Verbose " Adding query parameter"
|
||||
$URIParameters['q'] = $ParametersDictionary[$CmdletParameterName]
|
||||
break
|
||||
}
|
||||
|
||||
|
||||
'CustomFields' {
|
||||
Write-Verbose " Adding custom field query parameters"
|
||||
foreach ($field in $ParametersDictionary[$CmdletParameterName].GetEnumerator()) {
|
||||
Write-Verbose " Adding parameter 'cf_$($field.Key) = $($field.Value)"
|
||||
$URIParameters["cf_$($field.Key.ToLower())"] = $field.Value
|
||||
}
|
||||
|
||||
|
||||
break
|
||||
}
|
||||
|
||||
|
||||
default {
|
||||
Write-Verbose " Adding $($CmdletParameterName.ToLower()) parameter"
|
||||
$URIParameters[$CmdletParameterName.ToLower()] = $ParametersDictionary[$CmdletParameterName]
|
||||
|
|
@ -80,7 +80,7 @@ function BuildURIComponents {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return @{
|
||||
'Segments' = [System.Collections.ArrayList]$URISegments
|
||||
'Parameters' = $URIParameters
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -15,7 +15,7 @@
|
|||
function CheckNetboxIsConnected {
|
||||
[CmdletBinding()]
|
||||
param ()
|
||||
|
||||
|
||||
Write-Verbose "Checking connection status"
|
||||
if (-not $script:NetboxConfig.Connected) {
|
||||
throw "Not connected to a Netbox API! Please run 'Connect-NetboxAPI'"
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -18,13 +18,13 @@ function CreateEnum {
|
|||
(
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$EnumName,
|
||||
|
||||
|
||||
[Parameter(Mandatory = $true)]
|
||||
[pscustomobject]$Values,
|
||||
|
||||
|
||||
[switch]$PassThru
|
||||
)
|
||||
|
||||
|
||||
$definition = @"
|
||||
public enum $EnumName
|
||||
{`n$(foreach ($value in $values) {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.181
|
||||
|
|
@ -20,45 +20,45 @@ function Get-ModelDefinition {
|
|||
[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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -18,10 +18,10 @@ function GetNetboxAPIErrorBody {
|
|||
[Parameter(Mandatory = $true)]
|
||||
[System.Net.HttpWebResponse]$Response
|
||||
)
|
||||
|
||||
|
||||
# This takes the $Response stream and turns it into a useable object... generally a string.
|
||||
# If the body is JSON, you should be able to use ConvertFrom-Json
|
||||
|
||||
|
||||
$reader = New-Object System.IO.StreamReader($Response.GetResponseStream())
|
||||
$reader.BaseStream.Position = 0
|
||||
$reader.DiscardBufferedData()
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -14,11 +14,11 @@
|
|||
|
||||
function ThrowNetboxRESTError {
|
||||
$uriSegments = [System.Collections.ArrayList]::new(@('fake', 'url'))
|
||||
|
||||
|
||||
$URIParameters = @{
|
||||
}
|
||||
|
||||
|
||||
$uri = BuildNewURI -Segments $uriSegments -Parameters $URIParameters
|
||||
|
||||
|
||||
InvokeNetboxRequest -URI $uri -Raw
|
||||
}
|
||||
|
|
@ -34,7 +34,14 @@ function Get-NetboxIPAMAvailableIP {
|
|||
A description of the NumberOfIPs parameter.
|
||||
|
||||
.EXAMPLE
|
||||
PS C:\> Get-NetboxIPAMAvaiableIP -Prefix_ID $value1
|
||||
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
|
||||
|
||||
.NOTES
|
||||
Additional information about the function.
|
||||
|
|
|
|||
|
|
@ -1,14 +1,14 @@
|
|||
<#
|
||||
.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.
|
||||
.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.
|
||||
#>
|
||||
|
||||
|
||||
|
|
@ -50,14 +50,19 @@ function New-NetboxIPAMAddress {
|
|||
.PARAMETER Dns_name
|
||||
DNS Name of IP address (example : netbox.example.com)
|
||||
|
||||
.PARAMETER Force
|
||||
Do not prompt for confirmation to create IP.
|
||||
.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
|
||||
PS C:\> Create-NetboxIPAMAddress
|
||||
New-NetboxIPAMAddress -Address 192.0.2.1/32
|
||||
|
||||
Add new IP Address 192.0.2.1/32 with status active
|
||||
|
||||
.NOTES
|
||||
Additional information about the function.
|
||||
|
|
@ -90,7 +95,10 @@ function New-NetboxIPAMAddress {
|
|||
|
||||
[string]$Dns_name,
|
||||
|
||||
[switch]$Force,
|
||||
[ValidateSet('dcim.interface', 'virtualization.vminterface', IgnoreCase = $true)]
|
||||
[string]$Assigned_Object_Type,
|
||||
|
||||
[int]$Assigned_Object_Id,
|
||||
|
||||
[switch]$Raw
|
||||
)
|
||||
|
|
@ -99,22 +107,11 @@ function New-NetboxIPAMAddress {
|
|||
$Segments = [System.Collections.ArrayList]::new(@('ipam', 'ip-addresses'))
|
||||
$Method = 'POST'
|
||||
|
||||
# # 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
|
||||
# }
|
||||
# }
|
||||
#
|
||||
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters
|
||||
|
||||
$URI = BuildNewURI -Segments $URIComponents.Segments
|
||||
|
||||
if ($Force -or $PSCmdlet.ShouldProcess($Address, 'Create new IP address')) {
|
||||
if ($PSCmdlet.ShouldProcess($Address, 'Create new IP address')) {
|
||||
InvokeNetboxRequest -URI $URI -Method $Method -Body $URIComponents.Parameters -Raw:$Raw
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -18,61 +18,61 @@ function Get-NetboxIPAMAggregate {
|
|||
(
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[string]$Query,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'ByID')]
|
||||
[uint16[]]$Id,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[string]$Prefix,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[object]$Family,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[uint16]$RIR_Id,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[string]$RIR,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[datetime]$Date_Added,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[uint16]$Limit,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[uint16]$Offset,
|
||||
|
||||
|
||||
[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
|
||||
}
|
||||
|
||||
|
||||
default {
|
||||
$Segments = [System.Collections.ArrayList]::new(@('ipam', 'aggregates'))
|
||||
|
||||
|
||||
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters
|
||||
|
||||
|
||||
$uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
|
||||
|
||||
|
||||
InvokeNetboxRequest -URI $uri -Raw:$Raw
|
||||
|
||||
|
||||
break
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -16,189 +16,189 @@ function Get-NetboxIPAMPrefix {
|
|||
<#
|
||||
.SYNOPSIS
|
||||
A brief description of the Get-NetboxIPAMPrefix function.
|
||||
|
||||
|
||||
.DESCRIPTION
|
||||
A detailed description of the Get-NetboxIPAMPrefix function.
|
||||
|
||||
|
||||
.PARAMETER Query
|
||||
A description of the Query parameter.
|
||||
|
||||
|
||||
.PARAMETER Id
|
||||
A description of the Id parameter.
|
||||
|
||||
|
||||
.PARAMETER Limit
|
||||
A description of the Limit parameter.
|
||||
|
||||
|
||||
.PARAMETER Offset
|
||||
A description of the Offset parameter.
|
||||
|
||||
|
||||
.PARAMETER Family
|
||||
A description of the Family parameter.
|
||||
|
||||
|
||||
.PARAMETER Is_Pool
|
||||
A description of the Is_Pool parameter.
|
||||
|
||||
|
||||
.PARAMETER Within
|
||||
Should be a CIDR notation prefix such as '10.0.0.0/16'
|
||||
|
||||
|
||||
.PARAMETER Within_Include
|
||||
Should be a CIDR notation prefix such as '10.0.0.0/16'
|
||||
|
||||
|
||||
.PARAMETER Contains
|
||||
A description of the Contains parameter.
|
||||
|
||||
|
||||
.PARAMETER Mask_Length
|
||||
CIDR mask length value
|
||||
|
||||
|
||||
.PARAMETER VRF
|
||||
A description of the VRF parameter.
|
||||
|
||||
|
||||
.PARAMETER VRF_Id
|
||||
A description of the VRF_Id parameter.
|
||||
|
||||
|
||||
.PARAMETER Tenant
|
||||
A description of the Tenant parameter.
|
||||
|
||||
|
||||
.PARAMETER Tenant_Id
|
||||
A description of the Tenant_Id parameter.
|
||||
|
||||
|
||||
.PARAMETER Site
|
||||
A description of the Site parameter.
|
||||
|
||||
|
||||
.PARAMETER Site_Id
|
||||
A description of the Site_Id parameter.
|
||||
|
||||
|
||||
.PARAMETER Vlan_VId
|
||||
A description of the Vlan_VId parameter.
|
||||
|
||||
|
||||
.PARAMETER Vlan_Id
|
||||
A description of the Vlan_Id parameter.
|
||||
|
||||
|
||||
.PARAMETER Status
|
||||
A description of the Status parameter.
|
||||
|
||||
|
||||
.PARAMETER Role
|
||||
A description of the Role parameter.
|
||||
|
||||
|
||||
.PARAMETER Role_Id
|
||||
A description of the Role_Id parameter.
|
||||
|
||||
|
||||
.PARAMETER Raw
|
||||
A description of the Raw parameter.
|
||||
|
||||
|
||||
.EXAMPLE
|
||||
PS C:\> Get-NetboxIPAMPrefix
|
||||
|
||||
|
||||
.NOTES
|
||||
Additional information about the function.
|
||||
#>
|
||||
|
||||
|
||||
[CmdletBinding(DefaultParameterSetName = 'Query')]
|
||||
param
|
||||
(
|
||||
[Parameter(ParameterSetName = 'Query',
|
||||
Position = 0)]
|
||||
[string]$Prefix,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[string]$Query,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'ByID')]
|
||||
[uint32[]]$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')]
|
||||
[uint32]$VRF_Id,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[string]$Tenant,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[uint32]$Tenant_Id,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[string]$Site,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[uint32]$Site_Id,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[string]$Vlan_VId,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[uint32]$Vlan_Id,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[object]$Status,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[string]$Role,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[uint32]$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
|
||||
}
|
||||
|
||||
|
||||
break
|
||||
}
|
||||
|
||||
|
||||
default {
|
||||
$Segments = [System.Collections.ArrayList]::new(@('ipam', 'prefixes'))
|
||||
|
||||
|
||||
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters
|
||||
|
||||
|
||||
$uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
|
||||
|
||||
|
||||
InvokeNetboxRequest -URI $uri -Raw:$Raw
|
||||
|
||||
|
||||
break
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -13,47 +13,51 @@
|
|||
|
||||
|
||||
function New-NetboxIPAMPrefix {
|
||||
[CmdletBinding(ConfirmImpact = 'low',
|
||||
SupportsShouldProcess = $true)]
|
||||
[CmdletBinding()]
|
||||
param
|
||||
(
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$Prefix,
|
||||
|
||||
|
||||
[object]$Status = 'Active',
|
||||
|
||||
|
||||
[uint16]$Tenant,
|
||||
|
||||
|
||||
[object]$Role,
|
||||
|
||||
|
||||
[bool]$IsPool,
|
||||
|
||||
|
||||
[string]$Description,
|
||||
|
||||
|
||||
[uint16]$Site,
|
||||
|
||||
|
||||
[uint16]$VRF,
|
||||
|
||||
|
||||
[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
|
||||
if ($null -ne $Role) {
|
||||
$PSBoundParameters.Role = ValidateIPAMChoice -ProvidedValue $Role -PrefixRole
|
||||
}
|
||||
#>
|
||||
|
||||
|
||||
$segments = [System.Collections.ArrayList]::new(@('ipam', 'prefixes'))
|
||||
|
||||
|
||||
$URIComponents = BuildURIComponents -URISegments $segments -ParametersDictionary $PSBoundParameters
|
||||
|
||||
|
||||
$URI = BuildNewURI -Segments $URIComponents.Segments
|
||||
|
||||
InvokeNetboxRequest -URI $URI -Method POST -Body $URIComponents.Parameters -Raw:$Raw
|
||||
|
||||
if ($PSCmdlet.ShouldProcess($Prefix, 'Create new Prefix')) {
|
||||
InvokeNetboxRequest -URI $URI -Method POST -Body $URIComponents.Parameters -Raw:$Raw
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2021 v5.8.186
|
||||
|
|
@ -20,39 +20,39 @@ function Set-NetboxIPAMPrefix {
|
|||
[Parameter(Mandatory = $true,
|
||||
ValueFromPipelineByPropertyName = $true)]
|
||||
[uint16[]]$Id,
|
||||
|
||||
|
||||
[string]$Prefix,
|
||||
|
||||
|
||||
[string]$Status,
|
||||
|
||||
|
||||
[uint16]$Tenant,
|
||||
|
||||
|
||||
[uint16]$Site,
|
||||
|
||||
|
||||
[uint16]$VRF,
|
||||
|
||||
|
||||
[uint16]$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)]"
|
||||
|
|
@ -61,22 +61,22 @@ function Set-NetboxIPAMPrefix {
|
|||
# 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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,93 +3,93 @@ function Get-NetboxIPAMRole {
|
|||
<#
|
||||
.SYNOPSIS
|
||||
Get IPAM Prefix/VLAN roles
|
||||
|
||||
|
||||
.DESCRIPTION
|
||||
A role indicates the function of a prefix or VLAN. For example, you might define Data, Voice, and Security roles. Generally, a prefix will be assigned the same functional role as the VLAN to which it is assigned (if any).
|
||||
|
||||
|
||||
.PARAMETER Id
|
||||
Unique ID
|
||||
|
||||
|
||||
.PARAMETER Query
|
||||
Search query
|
||||
|
||||
|
||||
.PARAMETER Name
|
||||
Role name
|
||||
|
||||
|
||||
.PARAMETER Slug
|
||||
Role URL slug
|
||||
|
||||
|
||||
.PARAMETER Brief
|
||||
Brief format
|
||||
|
||||
|
||||
.PARAMETER Limit
|
||||
Result limit
|
||||
|
||||
|
||||
.PARAMETER Offset
|
||||
Result offset
|
||||
|
||||
|
||||
.PARAMETER Raw
|
||||
A description of the Raw parameter.
|
||||
|
||||
|
||||
.EXAMPLE
|
||||
PS C:\> Get-NetboxIPAMRole
|
||||
|
||||
|
||||
.NOTES
|
||||
Additional information about the function.
|
||||
#>
|
||||
|
||||
|
||||
[CmdletBinding()]
|
||||
param
|
||||
(
|
||||
[Parameter(ParameterSetName = 'Query',
|
||||
Position = 0)]
|
||||
[string]$Name,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[string]$Query,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'ByID')]
|
||||
[uint32[]]$Id,
|
||||
|
||||
|
||||
[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
|
||||
|
||||
|
||||
$uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
|
||||
|
||||
|
||||
InvokeNetboxRequest -URI $uri -Raw:$Raw
|
||||
|
||||
|
||||
break
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -20,89 +20,89 @@ function Get-NetboxIPAMVLAN {
|
|||
Position = 0)]
|
||||
[ValidateRange(1, 4096)]
|
||||
[uint16]$VID,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'ByID')]
|
||||
[uint32[]]$Id,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[string]$Query,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[string]$Name,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[string]$Tenant,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[uint32]$Tenant_Id,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[string]$TenantGroup,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[uint32]$TenantGroup_Id,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[object]$Status,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[string]$Region,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[string]$Site,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[uint32]$Site_Id,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[string]$Group,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[uint32]$Group_Id,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[string]$Role,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[uint32]$Role_Id,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[uint16]$Limit,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[uint16]$Offset,
|
||||
|
||||
|
||||
[switch]$Raw
|
||||
)
|
||||
|
||||
|
||||
# if ($null -ne $Status) {
|
||||
# $PSBoundParameters.Status = ValidateIPAMChoice -ProvidedValue $Status -VLANStatus
|
||||
# }
|
||||
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
|
||||
break
|
||||
}
|
||||
|
||||
|
||||
default {
|
||||
$Segments = [System.Collections.ArrayList]::new(@('ipam', 'vlans'))
|
||||
|
||||
|
||||
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters
|
||||
|
||||
|
||||
$uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
|
||||
|
||||
|
||||
InvokeNetboxRequest -URI $uri -Raw:$Raw
|
||||
|
||||
|
||||
break
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,79 +1,82 @@
|
|||
function New-NetboxIPAMVLAN {
|
||||
<#
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Create a new VLAN
|
||||
|
||||
|
||||
.DESCRIPTION
|
||||
Create a new VLAN in Netbox with a status of Active by default.
|
||||
|
||||
|
||||
.PARAMETER VID
|
||||
The VLAN ID.
|
||||
|
||||
|
||||
.PARAMETER Name
|
||||
The name of the VLAN.
|
||||
|
||||
|
||||
.PARAMETER Status
|
||||
Status of the VLAN. Defaults to Active
|
||||
|
||||
|
||||
.PARAMETER Tenant
|
||||
Tenant ID
|
||||
|
||||
|
||||
.PARAMETER Role
|
||||
Role such as anycast, loopback, etc... Defaults to nothing
|
||||
|
||||
|
||||
.PARAMETER Description
|
||||
Description of IP address
|
||||
|
||||
|
||||
.PARAMETER Custom_Fields
|
||||
Custom field hash table. Will be validated by the API service
|
||||
|
||||
|
||||
.PARAMETER Raw
|
||||
Return raw results from API service
|
||||
|
||||
|
||||
.PARAMETER Address
|
||||
IP address in CIDR notation: 192.168.1.1/24
|
||||
|
||||
|
||||
.EXAMPLE
|
||||
PS C:\> Create-NetboxIPAMAddress
|
||||
|
||||
|
||||
.NOTES
|
||||
Additional information about the function.
|
||||
#>
|
||||
|
||||
[CmdletBinding()]
|
||||
|
||||
[CmdletBinding(ConfirmImpact = 'low',
|
||||
SupportsShouldProcess = $true)]
|
||||
[OutputType([pscustomobject])]
|
||||
param
|
||||
(
|
||||
[Parameter(Mandatory = $true)]
|
||||
[uint16]$VID,
|
||||
|
||||
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$Name,
|
||||
|
||||
|
||||
[object]$Status = 'Active',
|
||||
|
||||
|
||||
[uint16]$Tenant,
|
||||
|
||||
|
||||
[object]$Role,
|
||||
|
||||
|
||||
[string]$Description,
|
||||
|
||||
|
||||
[hashtable]$Custom_Fields,
|
||||
|
||||
|
||||
[switch]$Raw
|
||||
)
|
||||
|
||||
# $PSBoundParameters.Status = ValidateIPAMChoice -ProvidedValue $Status -VLANStatus
|
||||
#
|
||||
# if ($null -ne $Role) {
|
||||
# $PSBoundParameters.Role = ValidateIPAMChoice -ProvidedValue $Role -IPAddressRole
|
||||
# }
|
||||
|
||||
|
||||
# $PSBoundParameters.Status = ValidateIPAMChoice -ProvidedValue $Status -VLANStatus
|
||||
|
||||
# if ($null -ne $Role) {
|
||||
# $PSBoundParameters.Role = ValidateIPAMChoice -ProvidedValue $Role -IPAddressRole
|
||||
# }
|
||||
|
||||
$segments = [System.Collections.ArrayList]::new(@('ipam', 'vlans'))
|
||||
|
||||
|
||||
$URIComponents = BuildURIComponents -URISegments $segments -ParametersDictionary $PSBoundParameters
|
||||
|
||||
|
||||
$URI = BuildNewURI -Segments $URIComponents.Segments
|
||||
|
||||
InvokeNetboxRequest -URI $URI -Method POST -Body $URIComponents.Parameters -Raw:$Raw
|
||||
|
||||
if ($PSCmdlet.ShouldProcess($nae, 'Create new Vlan $($vid)')) {
|
||||
InvokeNetboxRequest -URI $URI -Method POST -Body $URIComponents.Parameters -Raw:$Raw
|
||||
}
|
||||
}
|
||||
|
|
@ -1,11 +1,11 @@
|
|||
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
|
||||
}
|
||||
|
|
@ -1,11 +1,11 @@
|
|||
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
|
||||
}
|
||||
|
|
@ -7,7 +7,7 @@
|
|||
[Parameter(Mandatory = $true)]
|
||||
[uint16]$Port
|
||||
)
|
||||
|
||||
|
||||
if ($PSCmdlet.ShouldProcess('Netbox Port', 'Set')) {
|
||||
$script:NetboxConfig.HostPort = $Port
|
||||
$script:NetboxConfig.HostPort
|
||||
|
|
|
|||
|
|
@ -8,12 +8,12 @@
|
|||
[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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -16,105 +16,105 @@ function Get-NetboxTenant {
|
|||
<#
|
||||
.SYNOPSIS
|
||||
Get a tenent from Netbox
|
||||
|
||||
|
||||
.DESCRIPTION
|
||||
A detailed description of the Get-NetboxTenant function.
|
||||
|
||||
|
||||
.PARAMETER Name
|
||||
The specific name of the tenant. Must match exactly as is defined in Netbox
|
||||
|
||||
|
||||
.PARAMETER Id
|
||||
The database ID of the tenant
|
||||
|
||||
|
||||
.PARAMETER Query
|
||||
A standard search query that will match one or more tenants.
|
||||
|
||||
|
||||
.PARAMETER Slug
|
||||
The specific slug of the tenant. Must match exactly as is defined in Netbox
|
||||
|
||||
|
||||
.PARAMETER Group
|
||||
The specific group as defined in Netbox.
|
||||
|
||||
|
||||
.PARAMETER GroupID
|
||||
The database ID of the group in Netbox
|
||||
|
||||
|
||||
.PARAMETER CustomFields
|
||||
Hashtable in the format @{"field_name" = "value"} to search
|
||||
|
||||
|
||||
.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-NetboxTenant
|
||||
|
||||
|
||||
.NOTES
|
||||
Additional information about the function.
|
||||
#>
|
||||
|
||||
|
||||
[CmdletBinding(DefaultParameterSetName = 'Query')]
|
||||
param
|
||||
(
|
||||
[Parameter(ParameterSetName = 'Query',
|
||||
Position = 0)]
|
||||
[string]$Name,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'ByID')]
|
||||
[uint32[]]$Id,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[string]$Query,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[string]$Slug,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[string]$Group,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[uint16]$GroupID,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[hashtable]$CustomFields,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[uint16]$Limit,
|
||||
|
||||
|
||||
[Parameter(ParameterSetName = 'Query')]
|
||||
[uint16]$Offset,
|
||||
|
||||
|
||||
[switch]$Raw
|
||||
)
|
||||
|
||||
|
||||
switch ($PSCmdlet.ParameterSetName) {
|
||||
'ById' {
|
||||
foreach ($Tenant_ID in $Id) {
|
||||
$Segments = [System.Collections.ArrayList]::new(@('tenancy', 'tenants', $Tenant_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', 'tenants'))
|
||||
|
||||
|
||||
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters
|
||||
|
||||
|
||||
$uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
|
||||
|
||||
|
||||
InvokeNetboxRequest -URI $uri -Raw:$Raw
|
||||
|
||||
|
||||
break
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,36 +0,0 @@
|
|||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2018 v5.5.152
|
||||
Created on: 5/29/2018 1:45 PM
|
||||
Created by: Ben Claussen
|
||||
Organization: NEOnet
|
||||
Filename: Tenancy.ps1
|
||||
===========================================================================
|
||||
.DESCRIPTION
|
||||
A description of the file.
|
||||
#>
|
||||
|
||||
|
||||
|
||||
|
||||
#region GET commands
|
||||
|
||||
|
||||
|
||||
#endregion GET commands
|
||||
|
||||
|
||||
#region SET commands
|
||||
|
||||
#endregion SET commands
|
||||
|
||||
|
||||
#region ADD/NEW commands
|
||||
|
||||
#endregion ADD/NEW commands
|
||||
|
||||
|
||||
#region REMOVE commands
|
||||
|
||||
#endregion REMOVE commands
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -13,143 +13,145 @@
|
|||
|
||||
|
||||
function Get-NetboxVirtualMachine {
|
||||
<#
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Obtains virtual machines from Netbox.
|
||||
|
||||
|
||||
.DESCRIPTION
|
||||
Obtains one or more virtual machines based on provided filters.
|
||||
|
||||
|
||||
.PARAMETER Limit
|
||||
Number of results to return per page
|
||||
|
||||
|
||||
.PARAMETER Offset
|
||||
The initial index from which to return the results
|
||||
|
||||
|
||||
.PARAMETER Query
|
||||
A general query used to search for a VM
|
||||
|
||||
|
||||
.PARAMETER Name
|
||||
Name of the VM
|
||||
|
||||
|
||||
.PARAMETER Id
|
||||
Database ID of the VM
|
||||
|
||||
|
||||
.PARAMETER Status
|
||||
Status of the VM
|
||||
|
||||
|
||||
.PARAMETER Tenant
|
||||
String value of tenant
|
||||
|
||||
|
||||
.PARAMETER Tenant_ID
|
||||
Database ID of the tenant.
|
||||
|
||||
|
||||
.PARAMETER Platform
|
||||
String value of the platform
|
||||
|
||||
|
||||
.PARAMETER Platform_ID
|
||||
Database ID of the platform
|
||||
|
||||
|
||||
.PARAMETER Cluster_Group
|
||||
String value of the cluster group.
|
||||
|
||||
|
||||
.PARAMETER Cluster_Group_Id
|
||||
Database ID of the cluster group.
|
||||
|
||||
|
||||
.PARAMETER Cluster_Type
|
||||
String value of the Cluster type.
|
||||
|
||||
|
||||
.PARAMETER Cluster_Type_Id
|
||||
Database ID of the cluster type.
|
||||
|
||||
|
||||
.PARAMETER Cluster_Id
|
||||
Database ID of the cluster.
|
||||
|
||||
|
||||
.PARAMETER Site
|
||||
String value of the site.
|
||||
|
||||
|
||||
.PARAMETER Site_Id
|
||||
Database ID of the site.
|
||||
|
||||
|
||||
.PARAMETER Role
|
||||
String value of the role.
|
||||
|
||||
|
||||
.PARAMETER Role_Id
|
||||
Database ID of the role.
|
||||
|
||||
|
||||
.PARAMETER Raw
|
||||
A description of the Raw parameter.
|
||||
|
||||
|
||||
.PARAMETER TenantID
|
||||
Database ID of tenant
|
||||
|
||||
|
||||
.PARAMETER PlatformID
|
||||
Database ID of the platform
|
||||
|
||||
|
||||
.PARAMETER id__in
|
||||
Database IDs of VMs
|
||||
|
||||
|
||||
.EXAMPLE
|
||||
PS C:\> Get-NetboxVirtualMachine
|
||||
|
||||
|
||||
.NOTES
|
||||
Additional information about the function.
|
||||
#>
|
||||
|
||||
|
||||
[CmdletBinding()]
|
||||
param
|
||||
(
|
||||
[Alias('q')]
|
||||
[string]$Query,
|
||||
|
||||
|
||||
[string]$Name,
|
||||
|
||||
|
||||
[uint16[]]$Id,
|
||||
|
||||
|
||||
[object]$Status,
|
||||
|
||||
|
||||
[string]$Tenant,
|
||||
|
||||
|
||||
[uint16]$Tenant_ID,
|
||||
|
||||
|
||||
[string]$Platform,
|
||||
|
||||
|
||||
[uint16]$Platform_ID,
|
||||
|
||||
|
||||
[string]$Cluster_Group,
|
||||
|
||||
|
||||
[uint16]$Cluster_Group_Id,
|
||||
|
||||
|
||||
[string]$Cluster_Type,
|
||||
|
||||
|
||||
[uint16]$Cluster_Type_Id,
|
||||
|
||||
|
||||
[uint16]$Cluster_Id,
|
||||
|
||||
|
||||
[string]$Site,
|
||||
|
||||
|
||||
[uint16]$Site_Id,
|
||||
|
||||
|
||||
[string]$Role,
|
||||
|
||||
|
||||
[uint16]$Role_Id,
|
||||
|
||||
|
||||
[uint16]$Limit,
|
||||
|
||||
|
||||
[uint16]$Offset,
|
||||
|
||||
|
||||
[switch]$Raw
|
||||
)
|
||||
|
||||
if ($null -ne $Status) {
|
||||
$PSBoundParameters.Status = ValidateVirtualizationChoice -ProvidedValue $Status -VirtualMachineStatus
|
||||
|
||||
process {
|
||||
if ($null -ne $Status) {
|
||||
$PSBoundParameters.Status = ValidateVirtualizationChoice -ProvidedValue $Status -VirtualMachineStatus
|
||||
}
|
||||
|
||||
$Segments = [System.Collections.ArrayList]::new(@('virtualization', 'virtual-machines'))
|
||||
|
||||
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters
|
||||
|
||||
$uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
|
||||
|
||||
InvokeNetboxRequest -URI $uri -Raw:$Raw
|
||||
}
|
||||
|
||||
$Segments = [System.Collections.ArrayList]::new(@('virtualization', 'virtual-machines'))
|
||||
|
||||
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters
|
||||
|
||||
$uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
|
||||
|
||||
InvokeNetboxRequest -URI $uri -Raw:$Raw
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -13,55 +13,58 @@
|
|||
|
||||
|
||||
function New-NetboxVirtualMachine {
|
||||
[CmdletBinding()]
|
||||
[CmdletBinding(ConfirmImpact = 'low',
|
||||
SupportsShouldProcess = $true)]
|
||||
[OutputType([pscustomobject])]
|
||||
param
|
||||
(
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$Name,
|
||||
|
||||
|
||||
[Parameter(Mandatory = $true)]
|
||||
[uint16]$Cluster,
|
||||
|
||||
|
||||
[uint16]$Tenant,
|
||||
|
||||
|
||||
[object]$Status = 'Active',
|
||||
|
||||
|
||||
[uint16]$Role,
|
||||
|
||||
|
||||
[uint16]$Platform,
|
||||
|
||||
|
||||
[uint16]$vCPUs,
|
||||
|
||||
|
||||
[uint16]$Memory,
|
||||
|
||||
|
||||
[uint16]$Disk,
|
||||
|
||||
|
||||
[uint16]$Primary_IP4,
|
||||
|
||||
|
||||
[uint16]$Primary_IP6,
|
||||
|
||||
|
||||
[hashtable]$Custom_Fields,
|
||||
|
||||
|
||||
[string]$Comments
|
||||
)
|
||||
|
||||
# $ModelDefinition = $script:NetboxConfig.APIDefinition.definitions.WritableVirtualMachineWithConfigContext
|
||||
#
|
||||
# # Validate the status against the APIDefinition
|
||||
# if ($ModelDefinition.properties.status.enum -inotcontains $Status) {
|
||||
# throw ("Invalid value [] for Status. Must be one of []" -f $Status, ($ModelDefinition.properties.status.enum -join ', '))
|
||||
# }
|
||||
#
|
||||
|
||||
# $ModelDefinition = $script:NetboxConfig.APIDefinition.definitions.WritableVirtualMachineWithConfigContext
|
||||
|
||||
# # Validate the status against the APIDefinition
|
||||
# if ($ModelDefinition.properties.status.enum -inotcontains $Status) {
|
||||
# throw ("Invalid value [] for Status. Must be one of []" -f $Status, ($ModelDefinition.properties.status.enum -join ', '))
|
||||
# }
|
||||
|
||||
#$PSBoundParameters.Status = ValidateVirtualizationChoice -ProvidedValue $Status -VirtualMachineStatus
|
||||
|
||||
|
||||
$Segments = [System.Collections.ArrayList]::new(@('virtualization', 'virtual-machines'))
|
||||
|
||||
|
||||
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters
|
||||
|
||||
|
||||
$URI = BuildNewURI -Segments $URIComponents.Segments
|
||||
|
||||
InvokeNetboxRequest -URI $URI -Method POST -Body $URIComponents.Parameters
|
||||
|
||||
if ($PSCmdlet.ShouldProcess($name, 'Create new Virtual Machine')) {
|
||||
InvokeNetboxRequest -URI $URI -Method POST -Body $URIComponents.Parameters
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -16,23 +16,23 @@ function Remove-NetboxVirtualMachine {
|
|||
<#
|
||||
.SYNOPSIS
|
||||
Delete a virtual machine
|
||||
|
||||
|
||||
.DESCRIPTION
|
||||
Deletes a virtual machine from Netbox by ID
|
||||
|
||||
|
||||
.PARAMETER Id
|
||||
Database ID of the virtual machine
|
||||
|
||||
|
||||
.PARAMETER Force
|
||||
Force deletion without any prompts
|
||||
|
||||
|
||||
.EXAMPLE
|
||||
PS C:\> Remove-NetboxVirtualMachine -Id $value1
|
||||
|
||||
|
||||
.NOTES
|
||||
Additional information about the function.
|
||||
#>
|
||||
|
||||
|
||||
[CmdletBinding(ConfirmImpact = 'High',
|
||||
SupportsShouldProcess = $true)]
|
||||
param
|
||||
|
|
@ -40,29 +40,29 @@ function Remove-NetboxVirtualMachine {
|
|||
[Parameter(Mandatory = $true,
|
||||
ValueFromPipelineByPropertyName = $true)]
|
||||
[uint16[]]$Id,
|
||||
|
||||
|
||||
[switch]$Force
|
||||
)
|
||||
|
||||
|
||||
begin {
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
process {
|
||||
foreach ($VMId in $Id) {
|
||||
$CurrentVM = Get-NetboxVirtualMachine -Id $VMId -ErrorAction Stop
|
||||
|
||||
|
||||
if ($Force -or $pscmdlet.ShouldProcess("$($CurrentVM.Name)/$($CurrentVM.Id)", "Remove")) {
|
||||
$Segments = [System.Collections.ArrayList]::new(@('virtualization', 'virtual-machines', $CurrentVM.Id))
|
||||
|
||||
|
||||
$URI = BuildNewURI -Segments $Segments
|
||||
|
||||
|
||||
InvokeNetboxRequest -URI $URI -Method DELETE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
end {
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -14,59 +14,61 @@
|
|||
|
||||
function Set-NetboxVirtualMachine {
|
||||
[CmdletBinding(ConfirmImpact = 'Medium',
|
||||
SupportsShouldProcess = $true)]
|
||||
SupportsShouldProcess = $true)]
|
||||
param
|
||||
(
|
||||
[Parameter(Mandatory = $true,
|
||||
ValueFromPipelineByPropertyName = $true)]
|
||||
ValueFromPipelineByPropertyName = $true)]
|
||||
[uint16]$Id,
|
||||
|
||||
|
||||
[string]$Name,
|
||||
|
||||
|
||||
[uint16]$Role,
|
||||
|
||||
|
||||
[uint16]$Cluster,
|
||||
|
||||
|
||||
[object]$Status,
|
||||
|
||||
|
||||
[uint16]$Platform,
|
||||
|
||||
|
||||
[uint16]$Primary_IP4,
|
||||
|
||||
|
||||
[uint16]$Primary_IP6,
|
||||
|
||||
|
||||
[byte]$VCPUs,
|
||||
|
||||
|
||||
[uint16]$Memory,
|
||||
|
||||
|
||||
[uint16]$Disk,
|
||||
|
||||
|
||||
[uint16]$Tenant,
|
||||
|
||||
|
||||
[string]$Comments,
|
||||
|
||||
|
||||
[hashtable]$Custom_Fields,
|
||||
|
||||
|
||||
[switch]$Force
|
||||
)
|
||||
|
||||
# if ($null -ne $Status) {
|
||||
# $PSBoundParameters.Status = ValidateVirtualizationChoice -ProvidedValue $Status -VirtualMachineStatus
|
||||
# }
|
||||
#
|
||||
$Segments = [System.Collections.ArrayList]::new(@('virtualization', 'virtual-machines', $Id))
|
||||
|
||||
Write-Verbose "Obtaining VM from ID $Id"
|
||||
|
||||
#$CurrentVM = Get-NetboxVirtualMachine -Id $Id -ErrorAction Stop
|
||||
|
||||
Write-Verbose "Finished obtaining VM"
|
||||
|
||||
if ($Force -or $pscmdlet.ShouldProcess($ID, "Set properties on VM ID")) {
|
||||
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id', 'Force'
|
||||
|
||||
$URI = BuildNewURI -Segments $URIComponents.Segments
|
||||
|
||||
InvokeNetboxRequest -URI $URI -Body $URIComponents.Parameters -Method PATCH
|
||||
|
||||
# if ($null -ne $Status) {
|
||||
# $PSBoundParameters.Status = ValidateVirtualizationChoice -ProvidedValue $Status -VirtualMachineStatus
|
||||
# }
|
||||
|
||||
process {
|
||||
$Segments = [System.Collections.ArrayList]::new(@('virtualization', 'virtual-machines', $Id))
|
||||
|
||||
Write-Verbose "Obtaining VM from ID $Id"
|
||||
|
||||
#$CurrentVM = Get-NetboxVirtualMachine -Id $Id -ErrorAction Stop
|
||||
|
||||
Write-Verbose "Finished obtaining VM"
|
||||
|
||||
if ($Force -or $pscmdlet.ShouldProcess($ID, "Set properties on VM ID")) {
|
||||
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id', 'Force'
|
||||
|
||||
$URI = BuildNewURI -Segments $URIComponents.Segments
|
||||
|
||||
InvokeNetboxRequest -URI $URI -Body $URIComponents.Parameters -Method PATCH
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -18,28 +18,28 @@ function Add-NetboxVirtualMachineInterface {
|
|||
(
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string]$Name,
|
||||
|
||||
|
||||
[Parameter(Mandatory = $true)]
|
||||
[uint16]$Virtual_Machine,
|
||||
|
||||
|
||||
[boolean]$Enabled = $true,
|
||||
|
||||
|
||||
[string]$MAC_Address,
|
||||
|
||||
|
||||
[uint16]$MTU,
|
||||
|
||||
|
||||
[string]$Description,
|
||||
|
||||
|
||||
[switch]$Raw
|
||||
)
|
||||
|
||||
|
||||
$Segments = [System.Collections.ArrayList]::new(@('virtualization', 'interfaces'))
|
||||
|
||||
|
||||
$PSBoundParameters.Enabled = $Enabled
|
||||
|
||||
|
||||
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters
|
||||
|
||||
|
||||
$uri = BuildNewURI -Segments $URIComponents.Segments
|
||||
|
||||
|
||||
InvokeNetboxRequest -URI $uri -Method POST -Body $URIComponents.Parameters
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -13,82 +13,84 @@
|
|||
|
||||
|
||||
function Get-NetboxVirtualMachineInterface {
|
||||
<#
|
||||
<#
|
||||
.SYNOPSIS
|
||||
Gets VM interfaces
|
||||
|
||||
|
||||
.DESCRIPTION
|
||||
Obtains the interface objects for one or more VMs
|
||||
|
||||
|
||||
.PARAMETER Limit
|
||||
Number of results to return per page.
|
||||
|
||||
|
||||
.PARAMETER Offset
|
||||
The initial index from which to return the results.
|
||||
|
||||
|
||||
.PARAMETER Id
|
||||
Database ID of the interface
|
||||
|
||||
|
||||
.PARAMETER Name
|
||||
Name of the interface
|
||||
|
||||
|
||||
.PARAMETER Enabled
|
||||
True/False if the interface is enabled
|
||||
|
||||
|
||||
.PARAMETER MTU
|
||||
Maximum Transmission Unit size. Generally 1500 or 9000
|
||||
|
||||
|
||||
.PARAMETER Virtual_Machine_Id
|
||||
ID of the virtual machine to which the interface(s) are assigned.
|
||||
|
||||
|
||||
.PARAMETER Virtual_Machine
|
||||
Name of the virtual machine to get interfaces
|
||||
|
||||
|
||||
.PARAMETER MAC_Address
|
||||
MAC address assigned to the interface
|
||||
|
||||
|
||||
.PARAMETER Raw
|
||||
A description of the Raw parameter.
|
||||
|
||||
|
||||
.EXAMPLE
|
||||
PS C:\> Get-NetboxVirtualMachineInterface
|
||||
|
||||
|
||||
.NOTES
|
||||
Additional information about the function.
|
||||
#>
|
||||
|
||||
|
||||
[CmdletBinding()]
|
||||
param
|
||||
(
|
||||
[Parameter(ValueFromPipeline = $true)]
|
||||
[uint16]$Id,
|
||||
|
||||
|
||||
[string]$Name,
|
||||
|
||||
|
||||
[string]$Query,
|
||||
|
||||
|
||||
[boolean]$Enabled,
|
||||
|
||||
|
||||
[uint16]$MTU,
|
||||
|
||||
|
||||
[uint16]$Virtual_Machine_Id,
|
||||
|
||||
|
||||
[string]$Virtual_Machine,
|
||||
|
||||
|
||||
[string]$MAC_Address,
|
||||
|
||||
|
||||
[uint16]$Limit,
|
||||
|
||||
|
||||
[uint16]$Offset,
|
||||
|
||||
|
||||
[switch]$Raw
|
||||
)
|
||||
|
||||
$Segments = [System.Collections.ArrayList]::new(@('virtualization', 'interfaces'))
|
||||
|
||||
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters
|
||||
|
||||
$uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
|
||||
|
||||
InvokeNetboxRequest -URI $uri -Raw:$Raw
|
||||
|
||||
process {
|
||||
$Segments = [System.Collections.ArrayList]::new(@('virtualization', 'interfaces'))
|
||||
|
||||
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters
|
||||
|
||||
$uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
|
||||
|
||||
InvokeNetboxRequest -URI $uri -Raw:$Raw
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -21,45 +21,45 @@ function Set-NetboxVirtualMachineInterface {
|
|||
[Parameter(Mandatory = $true,
|
||||
ValueFromPipelineByPropertyName = $true)]
|
||||
[uint16[]]$Id,
|
||||
|
||||
|
||||
[string]$Name,
|
||||
|
||||
|
||||
[string]$MAC_Address,
|
||||
|
||||
|
||||
[uint16]$MTU,
|
||||
|
||||
|
||||
[string]$Description,
|
||||
|
||||
|
||||
[boolean]$Enabled,
|
||||
|
||||
|
||||
[uint16]$Virtual_Machine,
|
||||
|
||||
|
||||
[switch]$Force
|
||||
)
|
||||
|
||||
|
||||
begin {
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
process {
|
||||
foreach ($VMI_ID in $Id) {
|
||||
Write-Verbose "Obtaining VM Interface..."
|
||||
$CurrentVMI = Get-NetboxVirtualMachineInterface -Id $VMI_ID -ErrorAction Stop
|
||||
Write-Verbose "Finished obtaining VM Interface"
|
||||
|
||||
|
||||
$Segments = [System.Collections.ArrayList]::new(@('virtualization', 'interfaces', $CurrentVMI.Id))
|
||||
|
||||
|
||||
if ($Force -or $pscmdlet.ShouldProcess("Interface $($CurrentVMI.Id) on VM $($CurrentVMI.Virtual_Machine.Name)", "Set")) {
|
||||
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id', 'Force'
|
||||
|
||||
|
||||
$URI = BuildNewURI -Segments $URIComponents.Segments
|
||||
|
||||
|
||||
InvokeNetboxRequest -URI $URI -Body $URIComponents.Parameters -Method PATCH
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
end {
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -16,87 +16,87 @@ function Get-NetboxVirtualizationCluster {
|
|||
<#
|
||||
.SYNOPSIS
|
||||
Obtains virtualization clusters from Netbox.
|
||||
|
||||
|
||||
.DESCRIPTION
|
||||
Obtains one or more virtualization clusters based on provided filters.
|
||||
|
||||
|
||||
.PARAMETER Limit
|
||||
Number of results to return per page
|
||||
|
||||
|
||||
.PARAMETER Offset
|
||||
The initial index from which to return the results
|
||||
|
||||
|
||||
.PARAMETER Query
|
||||
A general query used to search for a cluster
|
||||
|
||||
|
||||
.PARAMETER Name
|
||||
Name of the cluster
|
||||
|
||||
|
||||
.PARAMETER Id
|
||||
Database ID(s) of the cluster
|
||||
|
||||
|
||||
.PARAMETER Group
|
||||
String value of the cluster group.
|
||||
|
||||
|
||||
.PARAMETER Group_Id
|
||||
Database ID of the cluster group.
|
||||
|
||||
|
||||
.PARAMETER Type
|
||||
String value of the Cluster type.
|
||||
|
||||
|
||||
.PARAMETER Type_Id
|
||||
Database ID of the cluster type.
|
||||
|
||||
|
||||
.PARAMETER Site
|
||||
String value of the site.
|
||||
|
||||
|
||||
.PARAMETER Site_Id
|
||||
Database ID of the site.
|
||||
|
||||
|
||||
.PARAMETER Raw
|
||||
A description of the Raw parameter.
|
||||
|
||||
|
||||
.EXAMPLE
|
||||
PS C:\> Get-NetboxVirtualizationCluster
|
||||
|
||||
|
||||
.NOTES
|
||||
Additional information about the function.
|
||||
#>
|
||||
|
||||
|
||||
[CmdletBinding()]
|
||||
param
|
||||
(
|
||||
[string]$Name,
|
||||
|
||||
|
||||
[Alias('q')]
|
||||
[string]$Query,
|
||||
|
||||
|
||||
[uint16[]]$Id,
|
||||
|
||||
|
||||
[string]$Group,
|
||||
|
||||
|
||||
[uint16]$Group_Id,
|
||||
|
||||
|
||||
[string]$Type,
|
||||
|
||||
|
||||
[uint16]$Type_Id,
|
||||
|
||||
|
||||
[string]$Site,
|
||||
|
||||
|
||||
[uint16]$Site_Id,
|
||||
|
||||
|
||||
[uint16]$Limit,
|
||||
|
||||
|
||||
[uint16]$Offset,
|
||||
|
||||
|
||||
[switch]$Raw
|
||||
)
|
||||
|
||||
|
||||
$Segments = [System.Collections.ArrayList]::new(@('virtualization', 'clusters'))
|
||||
|
||||
|
||||
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters
|
||||
|
||||
|
||||
$uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
|
||||
|
||||
|
||||
InvokeNetboxRequest -URI $uri -Raw:$Raw
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
||||
|
|
@ -17,27 +17,27 @@ function Get-NetboxVirtualizationClusterGroup {
|
|||
param
|
||||
(
|
||||
[string]$Name,
|
||||
|
||||
|
||||
[string]$Slug,
|
||||
|
||||
|
||||
[string]$Description,
|
||||
|
||||
|
||||
[string]$Query,
|
||||
|
||||
|
||||
[uint32[]]$Id,
|
||||
|
||||
|
||||
[uint16]$Limit,
|
||||
|
||||
|
||||
[uint16]$Offset,
|
||||
|
||||
|
||||
[switch]$Raw
|
||||
)
|
||||
|
||||
|
||||
$Segments = [System.Collections.ArrayList]::new(@('virtualization', 'cluster-groups'))
|
||||
|
||||
|
||||
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters
|
||||
|
||||
|
||||
$uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
|
||||
|
||||
|
||||
InvokeNetboxRequest -URI $uri -Raw:$Raw
|
||||
}
|
||||
|
|
@ -3,7 +3,7 @@
|
|||
#
|
||||
# Generated by: Ben Claussen
|
||||
#
|
||||
# Generated on: 2021-07-22
|
||||
# Generated on: 2021-07-23
|
||||
#
|
||||
|
||||
@{
|
||||
|
|
@ -12,7 +12,7 @@
|
|||
RootModule = 'NetboxPS.psm1'
|
||||
|
||||
# Version number of this module.
|
||||
ModuleVersion = '1.4'
|
||||
ModuleVersion = '1.5.0'
|
||||
|
||||
# Supported PSEditions
|
||||
# CompatiblePSEditions = @()
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
Script generated by PowerShell Studio 2020
|
||||
#>
|
||||
|
||||
# Build a list of common paramters so we can omit them to build URI parameters
|
||||
# Build a list of common parameters so we can omit them to build URI parameters
|
||||
$script:CommonParameterNames = New-Object System.Collections.ArrayList
|
||||
[void]$script:CommonParameterNames.AddRange(@([System.Management.Automation.PSCmdlet]::CommonParameters))
|
||||
[void]$script:CommonParameterNames.AddRange(@([System.Management.Automation.PSCmdlet]::OptionalCommonParameters))
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
#
|
||||
# Generated by: Ben Claussen
|
||||
#
|
||||
# Generated on: 2021-07-22
|
||||
# Generated on: 2021-07-23
|
||||
#
|
||||
|
||||
@{
|
||||
|
|
@ -12,7 +12,7 @@
|
|||
RootModule = 'NetboxPS.psm1'
|
||||
|
||||
# Version number of this module.
|
||||
ModuleVersion = '1.4'
|
||||
ModuleVersion = '1.5.0'
|
||||
|
||||
# Supported PSEditions
|
||||
# CompatiblePSEditions = @()
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
21
README.md
21
README.md
|
|
@ -4,10 +4,29 @@
|
|||
# Disclaimer
|
||||
This module is beta. Use it at your own risk. I have only added functions as I have needed them, so not everything is available.
|
||||
|
||||
All functions are exported at the moment, including internal/private functions.
|
||||
|
||||
# Description
|
||||
This module is a wrapper for the [Netbox](https://github.com/netbox-community/netbox) API.
|
||||
|
||||
# Usage
|
||||
1. Install module from the `netboxPS` folder
|
||||
2. Import module
|
||||
3. Connect to an API endpoint by using `Connect-NetboxAPI -Hostname netbox.example.com`
|
||||
3. Connect to an API endpoint by using `Connect-NetboxAPI -Hostname netbox.example.com`
|
||||
|
||||
# Notes
|
||||
I started this project years ago with Powershell Studio using the built in deployment methods, learning Git, and learning PS best practices. So please forgive any "obvious" mistakes 😅
|
||||
Over time I have had to adjust my methods for deployment... change the design of functions, and refactor code as I learn new and better things.
|
||||
|
||||
This was built out of a need at my job to interact with Netbox for automation. Only recently has it become a "public" project with other collaborators (which I truly appreciate!).
|
||||
I have done my best to ensure each function does exactly one thing according to the API.
|
||||
|
||||
I will do my best to keep up, but please understand it is given attention as I can at work. As time permits, I will open issues for TODOs for things I have wanted to do for a while, just haven't had time or enough "need" to do them.
|
||||
|
||||
# Contributing
|
||||
- Follow [Powershell Practice and Style Guidelines](https://poshcode.gitbook.io/powershell-practice-and-style/) when writing code
|
||||
- Use discussions for general questions
|
||||
- Open issues for bug fixes or enhancements
|
||||
- Submit all pull requests against the dev branch
|
||||
|
||||
I am always open to suggestions for improvement with reasons and data to back up the suggestion.
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2018 v5.5.152
|
||||
|
|
@ -24,7 +24,7 @@ Describe -Name "DCIM Devices Tests" -Tag 'DCIM', 'Devices' -Fixture {
|
|||
Mock -CommandName 'CheckNetboxIsConnected' -Verifiable -ModuleName 'NetboxPS' -MockWith {
|
||||
return $true
|
||||
}
|
||||
|
||||
|
||||
Mock -CommandName 'Invoke-RestMethod' -Verifiable -ModuleName 'NetboxPS' -MockWith {
|
||||
# Return a hashtable of the items we would normally pass to Invoke-RestMethod
|
||||
return [ordered]@{
|
||||
|
|
@ -36,375 +36,375 @@ Describe -Name "DCIM Devices Tests" -Tag 'DCIM', 'Devices' -Fixture {
|
|||
'Body' = $Body
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Mock -CommandName 'Get-NetboxCredential' -Verifiable -ModuleName 'NetboxPS' -MockWith {
|
||||
return [PSCredential]::new('notapplicable', (ConvertTo-SecureString -String "faketoken" -AsPlainText -Force))
|
||||
}
|
||||
|
||||
|
||||
Mock -CommandName 'Get-NetboxHostname' -Verifiable -ModuleName 'NetboxPS' -MockWith {
|
||||
return 'netbox.domain.com'
|
||||
}
|
||||
|
||||
|
||||
InModuleScope -ModuleName 'NetboxPS' -ScriptBlock {
|
||||
$script:NetboxConfig.Choices.DCIM = (Get-Content "$PSScriptRoot\DCIMChoices.json" -ErrorAction Stop | ConvertFrom-Json)
|
||||
|
||||
|
||||
Context -Name "Get-NetboxDCIMDevice" -Fixture {
|
||||
It "Should request the default number of devices" {
|
||||
$Result = Get-NetboxDCIMDevice
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/devices/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with a limit and offset" {
|
||||
$Result = Get-NetboxDCIMDevice -Limit 10 -Offset 100
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/devices/?offset=100&limit=10'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with a query" {
|
||||
$Result = Get-NetboxDCIMDevice -Query 'testdevice'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/devices/?q=testdevice'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with an escaped query" {
|
||||
$Result = Get-NetboxDCIMDevice -Query 'test device'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/devices/?q=test+device'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with a name" {
|
||||
$Result = Get-NetboxDCIMDevice -Name 'testdevice'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/devices/?name=testdevice'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with a single ID" {
|
||||
$Result = Get-NetboxDCIMDevice -Id 10
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/devices/10/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request a device by ID from the pipeline" {
|
||||
$Result = [pscustomobject]@{
|
||||
'id' = 10
|
||||
} | Get-NetboxDCIMDevice
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/devices/10/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with multiple IDs" {
|
||||
$Result = Get-NetboxDCIMDevice -Id 10, 12, 15
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/devices/?id__in=10,12,15'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request a status" {
|
||||
$Result = Get-NetboxDCIMDevice -Status 'Active'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/devices/?status=1'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should throw for an invalid status" {
|
||||
{
|
||||
Get-NetboxDCIMDevice -Status 'Fake'
|
||||
} | Should -Throw
|
||||
}
|
||||
|
||||
|
||||
It "Should request devices that are a PDU" {
|
||||
$Result = Get-NetboxDCIMDevice -Is_PDU $True
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -BeExactly 'https://netbox.domain.com/api/dcim/devices/?is_pdu=True'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "Get-NetboxDCIMDeviceType" -Fixture {
|
||||
It "Should request the default number of devices types" {
|
||||
$Result = Get-NetboxDCIMDeviceType
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/device-types/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with a limit and offset" {
|
||||
$Result = Get-NetboxDCIMDeviceType -Limit 10 -Offset 100
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/device-types/?offset=100&limit=10'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with a query" {
|
||||
$Result = Get-NetboxDCIMDeviceType -Query 'testdevice'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/device-types/?q=testdevice'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with an escaped query" {
|
||||
$Result = Get-NetboxDCIMDeviceType -Query 'test device'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/device-types/?q=test+device'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with a slug" {
|
||||
$Result = Get-NetboxDCIMDeviceType -Slug 'testdevice'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/device-types/?slug=testdevice'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with a single ID" {
|
||||
$Result = Get-NetboxDCIMDeviceType -Id 10
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/device-types/10/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with multiple IDs" {
|
||||
$Result = Get-NetboxDCIMDeviceType -Id 10, 12, 15
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/device-types/?id__in=10,12,15'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request a device type that is PDU" {
|
||||
$Result = Get-NetboxDCIMDeviceType -Is_PDU $true
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/device-types/?is_pdu=True'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "Get-NetboxDCIMDeviceRole" -Fixture {
|
||||
It "Should request the default number of devices types" {
|
||||
$Result = Get-NetboxDCIMDeviceRole
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName "Invoke-RestMethod" -Times 1 -Scope 'It' -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/device-roles/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request a device role by Id" {
|
||||
$Result = Get-NetboxDCIMDeviceRole -Id 10
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName "Invoke-RestMethod" -Times 1 -Scope 'It' -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/device-roles/10/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request multiple roles by Id" {
|
||||
$Result = Get-NetboxDCIMDeviceRole -Id 10, 12
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName "Invoke-RestMethod" -Times 2 -Scope 'It' -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET', 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/device-roles/10/', 'https://netbox.domain.com/api/dcim/device-roles/12/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 2
|
||||
}
|
||||
|
||||
|
||||
It "Should request single role by Id and color" {
|
||||
$Result = Get-NetboxDCIMDeviceRole -Id 10 -Color '0fab12'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName "Invoke-RestMethod" -Times 1 -Scope 'It' -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/device-roles/10/?color=0fab12'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request multiple roles by Id and color" {
|
||||
$Result = Get-NetboxDCIMDeviceRole -Id 10, 12 -Color '0fab12'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName "Invoke-RestMethod" -Times 2 -Scope 'It' -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET', 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/device-roles/10/?color=0fab12', 'https://netbox.domain.com/api/dcim/device-roles/12/?color=0fab12'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 2
|
||||
}
|
||||
|
||||
|
||||
It "Should request with a limit and offset" {
|
||||
$Result = Get-NetboxDCIMDeviceRole -Limit 10 -Offset 100
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName "Invoke-RestMethod" -Times 1 -Scope 'It' -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/device-roles/?offset=100&limit=10'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with a slug" {
|
||||
$Result = Get-NetboxDCIMDeviceRole -Slug 'testdevice'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName "Invoke-RestMethod" -Times 1 -Scope 'It' -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/device-roles/?slug=testdevice'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with a name" {
|
||||
$Result = Get-NetboxDCIMDeviceRole -Name 'TestRole'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName "Invoke-RestMethod" -Times 1 -Scope 'It' -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/device-roles/?name=TestRole'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request those that are VM role" {
|
||||
$Result = Get-NetboxDCIMDeviceRole -VM_Role $true
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName "Invoke-RestMethod" -Times 1 -Scope 'It' -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/device-roles/?vm_role=True'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "New-NetboxDCIMDevice" -Fixture {
|
||||
It "Should create a new device" {
|
||||
$Result = New-NetboxDCIMDevice -Name "newdevice" -Device_Role 4 -Device_Type 10 -Site 1 -Face 0
|
||||
|
||||
|
||||
Assert-MockCalled -CommandName 'Invoke-RestMethod' -Times 1 -Exactly -Scope 'It'
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'POST'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/devices/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Body | Should -Be '{"site":1,"face":0,"name":"newdevice","status":1,"device_type":10,"device_role":4}'
|
||||
}
|
||||
|
||||
|
||||
It "Should throw because of an invalid status" {
|
||||
{
|
||||
New-NetboxDCIMDevice -Name "newdevice" -Device_Role 4 -Device_Type 10 -Site 1 -Status 5555
|
||||
} | Should -Throw
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Mock -CommandName "Get-NetboxDCIMDevice" -ModuleName NetboxPS -MockWith {
|
||||
return [pscustomobject]@{
|
||||
'Id' = $Id
|
||||
'Name' = $Name
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "Set-NetboxDCIMDevice" -Fixture {
|
||||
It "Should set a device to a new name" {
|
||||
$Result = Set-NetboxDCIMDevice -Id 1234 -Name 'newtestname' -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Get-NetboxDCIMDevice' -Times 1 -Exactly -Scope 'It'
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'PATCH'
|
||||
$Result.URI | Should -Be 'https://netbox.domain.com/api/dcim/devices/1234/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Body | Should -Be '{"name":"newtestname"}'
|
||||
}
|
||||
|
||||
|
||||
It "Should set a device with new properties" {
|
||||
$Result = Set-NetboxDCIMDevice -Id 1234 -Name 'newtestname' -Cluster 10 -Platform 20 -Site 15 -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Get-NetboxDCIMDevice' -Times 1 -Exactly -Scope 'It'
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'PATCH'
|
||||
$Result.URI | Should -Be 'https://netbox.domain.com/api/dcim/devices/1234/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Body | Should -Be '{"cluster":10,"platform":20,"name":"newtestname","site":15}'
|
||||
}
|
||||
|
||||
|
||||
It "Should set multiple devices with new properties" {
|
||||
$Result = Set-NetboxDCIMDevice -Id 1234, 3214 -Cluster 10 -Platform 20 -Site 15 -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Get-NetboxDCIMDevice' -Times 2 -Exactly -Scope 'It'
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'PATCH', 'PATCH'
|
||||
$Result.URI | Should -Be 'https://netbox.domain.com/api/dcim/devices/1234/', 'https://netbox.domain.com/api/dcim/devices/3214/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 2
|
||||
$Result.Body | Should -Be '{"cluster":10,"platform":20,"site":15}', '{"cluster":10,"platform":20,"site":15}'
|
||||
}
|
||||
|
||||
|
||||
It "Should set multiple devices with new properties from the pipeline" {
|
||||
$Result = @(
|
||||
[pscustomobject]@{
|
||||
|
|
@ -414,51 +414,51 @@ Describe -Name "DCIM Devices Tests" -Tag 'DCIM', 'Devices' -Fixture {
|
|||
'id' = 3241
|
||||
}
|
||||
) | Set-NetboxDCIMDevice -Cluster 10 -Platform 20 -Site 15 -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Get-NetboxDCIMDevice' -Times 2 -Exactly -Scope 'It'
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'PATCH', 'PATCH'
|
||||
$Result.URI | Should -Be 'https://netbox.domain.com/api/dcim/devices/4432/', 'https://netbox.domain.com/api/dcim/devices/3241/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 2
|
||||
$Result.Body | Should -Be '{"cluster":10,"platform":20,"site":15}', '{"cluster":10,"platform":20,"site":15}'
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "Remove-NetboxDCIMDevice" -Fixture {
|
||||
It "Should remove a device" {
|
||||
$Result = Remove-NetboxDCIMDevice -Id 10 -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Get-NetboxDCIMDevice' -Times 1 -Exactly -Scope 'It'
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'DELETE'
|
||||
$Result.URI | Should -Be 'https://netbox.domain.com/api/dcim/devices/10/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should remove multiple devices" {
|
||||
$Result = Remove-NetboxDCIMDevice -Id 10, 12 -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Get-NetboxDCIMDevice' -Times 2 -Exactly -Scope 'It'
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'DELETE', 'DELETE'
|
||||
$Result.URI | Should -Be 'https://netbox.domain.com/api/dcim/devices/10/', 'https://netbox.domain.com/api/dcim/devices/12/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 2
|
||||
}
|
||||
|
||||
|
||||
It "Should remove a device from the pipeline" {
|
||||
$Result = Get-NetboxDCIMDevice -Id 20 | Remove-NetboxDCIMDevice -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Get-NetboxDCIMDevice' -Times 2 -Exactly -Scope 'It'
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'DELETE'
|
||||
$Result.URI | Should -Be 'https://netbox.domain.com/api/dcim/devices/20/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should remove mulitple devices from the pipeline" {
|
||||
$Result = @(
|
||||
[pscustomobject]@{
|
||||
|
|
@ -468,10 +468,10 @@ Describe -Name "DCIM Devices Tests" -Tag 'DCIM', 'Devices' -Fixture {
|
|||
'Id' = 40
|
||||
}
|
||||
) | Remove-NetboxDCIMDevice -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Get-NetboxDCIMDevice' -Times 2 -Exactly -Scope 'It'
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'DELETE', 'DELETE'
|
||||
$Result.URI | Should -Be 'https://netbox.domain.com/api/dcim/devices/30/', 'https://netbox.domain.com/api/dcim/devices/40/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 2
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2018 v5.5.152
|
||||
|
|
@ -24,7 +24,7 @@ Describe -Name "DCIM Interfaces Tests" -Tag 'DCIM', 'Interfaces' -Fixture {
|
|||
Mock -CommandName 'CheckNetboxIsConnected' -Verifiable -ModuleName 'NetboxPS' -MockWith {
|
||||
return $true
|
||||
}
|
||||
|
||||
|
||||
Mock -CommandName 'Invoke-RestMethod' -Verifiable -ModuleName 'NetboxPS' -MockWith {
|
||||
# Return a hashtable of the items we would normally pass to Invoke-RestMethod
|
||||
return [ordered]@{
|
||||
|
|
@ -36,107 +36,107 @@ Describe -Name "DCIM Interfaces Tests" -Tag 'DCIM', 'Interfaces' -Fixture {
|
|||
'Body' = $Body
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Mock -CommandName 'Get-NetboxCredential' -Verifiable -ModuleName 'NetboxPS' -MockWith {
|
||||
return [PSCredential]::new('notapplicable', (ConvertTo-SecureString -String "faketoken" -AsPlainText -Force))
|
||||
}
|
||||
|
||||
|
||||
Mock -CommandName 'Get-NetboxHostname' -Verifiable -ModuleName 'NetboxPS' -MockWith {
|
||||
return 'netbox.domain.com'
|
||||
}
|
||||
|
||||
|
||||
InModuleScope -ModuleName 'NetboxPS' -ScriptBlock {
|
||||
$script:NetboxConfig.Choices.DCIM = (Get-Content "$PSScriptRoot\DCIMChoices.json" -ErrorAction Stop | ConvertFrom-Json)
|
||||
|
||||
|
||||
Context -Name "Get-NetboxDCIMInterface" -Fixture {
|
||||
It "Should request the default number of interfaces" {
|
||||
$Result = Get-NetboxDCIMInterface
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Invoke-RestMethod' -Times 1 -Scope 'It' -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/interfaces/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with a limit and offset" {
|
||||
$Result = Get-NetboxDCIMInterface -Limit 10 -Offset 100
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Invoke-RestMethod' -Times 1 -Scope 'It' -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/interfaces/?offset=100&limit=10'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with enabled" {
|
||||
$Result = Get-NetboxDCIMInterface -Enabled $true
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Invoke-RestMethod' -Times 1 -Scope 'It' -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -BeExactly 'https://netbox.domain.com/api/dcim/interfaces/?enabled=True'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with a form factor name" {
|
||||
$Result = Get-NetboxDCIMInterface -Form_Factor '10GBASE-T (10GE)'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Invoke-RestMethod' -Times 1 -Scope 'It' -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/interfaces/?form_factor=1150'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should throw for an invalid form factor" {
|
||||
{
|
||||
Get-NetboxDCIMInterface -Form_Factor 'Fake'
|
||||
} | Should -Throw
|
||||
}
|
||||
|
||||
|
||||
It "Should request devices that are mgmt only" {
|
||||
$Result = Get-NetboxDCIMInterface -MGMT_Only $True
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Invoke-RestMethod' -Times 1 -Scope 'It' -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -BeExactly 'https://netbox.domain.com/api/dcim/interfaces/?mgmt_only=True'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request an interface from the pipeline" {
|
||||
$Result = [pscustomobject]@{
|
||||
'Id' = 1234
|
||||
} | Get-NetboxDCIMInterface
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Invoke-RestMethod' -Times 1 -Scope 'It' -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/interfaces/1234/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "Add-NetboxDCIMInterface" -Fixture {
|
||||
It "Should add a basic interface to a device" {
|
||||
$Result = Add-NetboxDCIMInterface -Device 111 -Name "TestInterface"
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Invoke-RestMethod' -Times 1 -Exactly -Scope 'It'
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'POST'
|
||||
$Result.Uri | Should -BeExactly 'https://netbox.domain.com/api/dcim/interfaces/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Body | Should -Be '{"name":"TestInterface","device":111}'
|
||||
}
|
||||
|
||||
|
||||
It "Should add an interface to a device with lots of properties" {
|
||||
$paramAddNetboxDCIMInterface = @{
|
||||
Device = 123
|
||||
|
|
@ -147,77 +147,77 @@ Describe -Name "DCIM Interfaces Tests" -Tag 'DCIM', 'Interfaces' -Fixture {
|
|||
Description = 'Test Description'
|
||||
Mode = 'Access'
|
||||
}
|
||||
|
||||
|
||||
$Result = Add-NetboxDCIMInterface @paramAddNetboxDCIMInterface
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Invoke-RestMethod' -Times 1 -Exactly -Scope 'It'
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'POST'
|
||||
$Result.Uri | Should -BeExactly 'https://netbox.domain.com/api/dcim/interfaces/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Body | Should -Be '{"mtu":9000,"mgmt_only":true,"description":"Test Description","mode":100,"name":"TestInterface","device":123,"form_factor":1150}'
|
||||
}
|
||||
|
||||
|
||||
It "Should add an interface with multiple tagged VLANs" {
|
||||
$Result = Add-NetboxDCIMInterface -Device 444 -Name "TestInterface" -Mode 'Tagged' -Tagged_VLANs 1, 2, 3, 4
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Invoke-RestMethod' -Times 1 -Exactly -Scope 'It'
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'POST'
|
||||
$Result.Uri | Should -BeExactly 'https://netbox.domain.com/api/dcim/interfaces/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Body | Should -Be '{"mode":200,"name":"TestInterface","device":444,"tagged_vlans":[1,2,3,4]}'
|
||||
}
|
||||
|
||||
|
||||
It "Should throw for invalid mode" {
|
||||
{
|
||||
Add-NetboxDCIMInterface -Device 321 -Name "Test123" -Mode 'Fake'
|
||||
} | Should -Throw
|
||||
}
|
||||
|
||||
|
||||
It "Should throw for out of range VLAN" {
|
||||
{
|
||||
Add-NetboxDCIMInterface -Device 321 -Name "Test123" -Untagged_VLAN 4100
|
||||
} | Should -Throw
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Mock -CommandName "Get-NetboxDCIMInterface" -ModuleName "NetboxPS" -MockWith {
|
||||
return [pscustomobject]@{
|
||||
'Id' = $Id
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "Set-NetboxDCIMInterface" -Fixture {
|
||||
It "Should set an interface to a new name" {
|
||||
$Result = Set-NetboxDCIMInterface -Id 123 -Name "TestInterface"
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Get-NetboxDCIMInterface' -Times 1 -Exactly -Scope 'It'
|
||||
Assert-MockCalled -CommandName 'Invoke-RestMethod' -Times 1 -Exactly -Scope 'It'
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'PATCH'
|
||||
$Result.Uri | Should -BeExactly 'https://netbox.domain.com/api/dcim/interfaces/123/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Body | Should -Be '{"name":"TestInterface"}'
|
||||
}
|
||||
|
||||
|
||||
It "Should set multiple interfaces to a new name" {
|
||||
$Result = Set-NetboxDCIMInterface -Id 456, 789 -Name "TestInterface"
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Get-NetboxDCIMInterface' -Times 2 -Exactly -Scope 'It'
|
||||
Assert-MockCalled -CommandName 'Invoke-RestMethod' -Times 2 -Exactly -Scope 'It'
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'PATCH', 'PATCH'
|
||||
$Result.Uri | Should -BeExactly 'https://netbox.domain.com/api/dcim/interfaces/456/', 'https://netbox.domain.com/api/dcim/interfaces/789/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 2
|
||||
$Result.Body | Should -Be '{"name":"TestInterface"}', '{"name":"TestInterface"}'
|
||||
}
|
||||
|
||||
|
||||
It "Should set multiple interfaces to a new name from the pipeline" {
|
||||
$Result = @(
|
||||
[pscustomobject]@{
|
||||
|
|
@ -227,58 +227,58 @@ Describe -Name "DCIM Interfaces Tests" -Tag 'DCIM', 'Interfaces' -Fixture {
|
|||
'Id' = 4231
|
||||
}
|
||||
) | Set-NetboxDCIMInterface -Name "TestInterface"
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Get-NetboxDCIMInterface' -Times 2 -Exactly -Scope 'It'
|
||||
Assert-MockCalled -CommandName 'Invoke-RestMethod' -Times 2 -Exactly -Scope 'It'
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'PATCH', 'PATCH'
|
||||
$Result.Uri | Should -BeExactly 'https://netbox.domain.com/api/dcim/interfaces/1234/', 'https://netbox.domain.com/api/dcim/interfaces/4231/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 2
|
||||
$Result.Body | Should -Be '{"name":"TestInterface"}', '{"name":"TestInterface"}'
|
||||
}
|
||||
|
||||
|
||||
It "Should throw for invalid form factor" {
|
||||
{
|
||||
Set-NetboxDCIMInterface -Id 1234 -Form_Factor 'fake'
|
||||
} | Should -Throw
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "Remove-NetboxDCIMInterface" -Fixture {
|
||||
It "Should remove an interface" {
|
||||
$Result = Remove-NetboxDCIMInterface -Id 10 -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Get-NetboxDCIMInterface' -Times 1 -Exactly -Scope 'It'
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'DELETE'
|
||||
$Result.URI | Should -Be 'https://netbox.domain.com/api/dcim/interfaces/10/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should remove multiple interfaces" {
|
||||
$Result = Remove-NetboxDCIMInterface -Id 10, 12 -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Get-NetboxDCIMInterface' -Times 2 -Exactly -Scope 'It'
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'DELETE', 'DELETE'
|
||||
$Result.URI | Should -Be 'https://netbox.domain.com/api/dcim/interfaces/10/', 'https://netbox.domain.com/api/dcim/interfaces/12/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 2
|
||||
}
|
||||
|
||||
|
||||
It "Should remove an interface from the pipeline" {
|
||||
$Result = Get-NetboxDCIMInterface -Id 20 | Remove-NetboxDCIMInterface -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Get-NetboxDCIMInterface' -Times 2 -Exactly -Scope 'It'
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'DELETE'
|
||||
$Result.URI | Should -Be 'https://netbox.domain.com/api/dcim/interfaces/20/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should remove mulitple interfaces from the pipeline" {
|
||||
$Result = @(
|
||||
[pscustomobject]@{
|
||||
|
|
@ -288,124 +288,124 @@ Describe -Name "DCIM Interfaces Tests" -Tag 'DCIM', 'Interfaces' -Fixture {
|
|||
'Id' = 40
|
||||
}
|
||||
) | Remove-NetboxDCIMInterface -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Get-NetboxDCIMInterface' -Times 2 -Exactly -Scope 'It'
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'DELETE', 'DELETE'
|
||||
$Result.URI | Should -Be 'https://netbox.domain.com/api/dcim/interfaces/30/', 'https://netbox.domain.com/api/dcim/interfaces/40/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 2
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Context -Name "Get-NetboxDCIMInterfaceConnection" -Fixture {
|
||||
It "Should request the default number of interface connections" {
|
||||
$Result = Get-NetboxDCIMInterfaceConnection
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Invoke-RestMethod' -Times 1 -Scope 'It' -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/interface-connections/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with a limit and offset" {
|
||||
$Result = Get-NetboxDCIMInterfaceConnection -Limit 10 -Offset 100
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Invoke-RestMethod' -Times 1 -Scope 'It' -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/interface-connections/?offset=100&limit=10'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request connected interfaces" {
|
||||
$Result = Get-NetboxDCIMInterfaceConnection -Connection_Status 'Connected'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Invoke-RestMethod' -Times 1 -Scope 'It' -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -BeExactly 'https://netbox.domain.com/api/dcim/interface-connections/?connection_status=True'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should throw for an invalid connection status" {
|
||||
{
|
||||
Get-NetboxDCIMInterfaceConnection -Connection_Status 'Fake'
|
||||
} | Should -Throw
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "Add-NetboxDCIMInterfaceConnection" -Fixture {
|
||||
It "Should add a new interface connection" {
|
||||
$Result = Add-NetboxDCIMInterfaceConnection -Interface_A 21 -Interface_B 22
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Invoke-RestMethod' -Times 1 -Exactly -Scope 'It'
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'POST'
|
||||
$Result.Uri | Should -BeExactly 'https://netbox.domain.com/api/dcim/interface-connections/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Body | Should -Be '{"interface_b":22,"interface_a":21}'
|
||||
}
|
||||
|
||||
|
||||
It "Should throw because of an invalid connection status" {
|
||||
{
|
||||
Add-NetboxDCIMInterfaceConnection -Interface_A 21 -Interface_B 22 -Connection_Status 'fake'
|
||||
} | Should -Throw
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Mock -CommandName "Get-NetboxDCIMInterfaceConnection" -ModuleName 'NetboxPS' -MockWith {
|
||||
[pscustomobject]@{
|
||||
'Id' = $Id
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "Set-NetboxDCIMInterfaceConnection" -Fixture {
|
||||
It "Should set an interface connection" {
|
||||
$Result = Set-NetboxDCIMInterfaceConnection -Id 123 -Interface_B 2 -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Invoke-RestMethod' -Times 1 -Exactly -Scope 'It'
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'PATCH'
|
||||
$Result.Uri | Should -BeExactly 'https://netbox.domain.com/api/dcim/interface-connections/123/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Body | Should -Be '{"interface_b":2}'
|
||||
}
|
||||
|
||||
|
||||
It "Should set multiple interface connections to a new status" {
|
||||
$Result = Set-NetboxDCIMInterfaceConnection -Id 456, 789 -Connection_Status 'Planned' -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Invoke-RestMethod' -Times 2 -Exactly -Scope 'It'
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'PATCH', 'PATCH'
|
||||
$Result.Uri | Should -BeExactly 'https://netbox.domain.com/api/dcim/interface-connections/456/', 'https://netbox.domain.com/api/dcim/interface-connections/789/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 2
|
||||
$Result.Body | Should -Be '{"connection_status":false}', '{"connection_status":false}'
|
||||
}
|
||||
|
||||
|
||||
It "Should set an interface connection from the pipeline" {
|
||||
$Result = [pscustomobject]@{
|
||||
'id' = 3
|
||||
} | Set-NetboxDCIMInterfaceConnection -Connection_Status 'Planned' -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Invoke-RestMethod' -Times 1 -Exactly -Scope 'It'
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'PATCH'
|
||||
$Result.Uri | Should -BeExactly 'https://netbox.domain.com/api/dcim/interface-connections/3/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Body | Should -Be '{"connection_status":false}'
|
||||
}
|
||||
|
||||
|
||||
It "Should set multiple interface connections from the pipeline" {
|
||||
$Result = @(
|
||||
[pscustomobject]@{
|
||||
|
|
@ -415,57 +415,57 @@ Describe -Name "DCIM Interfaces Tests" -Tag 'DCIM', 'Interfaces' -Fixture {
|
|||
'id' = 789
|
||||
}
|
||||
) | Set-NetboxDCIMInterfaceConnection -Connection_Status 'Planned' -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Invoke-RestMethod' -Times 2 -Exactly -Scope 'It'
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'PATCH', 'PATCH'
|
||||
$Result.Uri | Should -BeExactly 'https://netbox.domain.com/api/dcim/interface-connections/456/', 'https://netbox.domain.com/api/dcim/interface-connections/789/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 2
|
||||
$Result.Body | Should -Be '{"connection_status":false}', '{"connection_status":false}'
|
||||
}
|
||||
|
||||
|
||||
It "Should throw trying to set multiple connections to the same interface" {
|
||||
{
|
||||
Set-NetboxDCIMInterfaceConnection -Id 456, 789 -Interface_B 22 -Force
|
||||
} | Should -Throw -ExpectedMessage "Cannot set multiple connections to the same interface"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "Remove-NetboxDCIMInterfaceConnection" -Fixture {
|
||||
It "Should remove an interface connection" {
|
||||
$Result = Remove-NetboxDCIMInterfaceConnection -Id 10 -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Get-NetboxDCIMInterfaceConnection' -Times 1 -Exactly -Scope 'It'
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'DELETE'
|
||||
$Result.URI | Should -Be 'https://netbox.domain.com/api/dcim/interface-connections/10/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should remove multiple interface connections" {
|
||||
$Result = Remove-NetboxDCIMInterfaceConnection -Id 10, 12 -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Get-NetboxDCIMInterfaceConnection' -Times 2 -Exactly -Scope 'It'
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'DELETE', 'DELETE'
|
||||
$Result.URI | Should -Be 'https://netbox.domain.com/api/dcim/interface-connections/10/', 'https://netbox.domain.com/api/dcim/interface-connections/12/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 2
|
||||
}
|
||||
|
||||
|
||||
It "Should remove an interface connection from the pipeline" {
|
||||
$Result = Get-NetboxDCIMInterfaceConnection -Id 20 | Remove-NetboxDCIMInterfaceConnection -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Get-NetboxDCIMInterfaceConnection' -Times 2 -Exactly -Scope 'It'
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'DELETE'
|
||||
$Result.URI | Should -Be 'https://netbox.domain.com/api/dcim/interface-connections/20/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should remove mulitple interface connections from the pipeline" {
|
||||
$Result = @(
|
||||
[pscustomobject]@{
|
||||
|
|
@ -475,10 +475,10 @@ Describe -Name "DCIM Interfaces Tests" -Tag 'DCIM', 'Interfaces' -Fixture {
|
|||
'Id' = 40
|
||||
}
|
||||
) | Remove-NetboxDCIMInterfaceConnection -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Get-NetboxDCIMInterfaceConnection' -Times 2 -Exactly -Scope 'It'
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'DELETE', 'DELETE'
|
||||
$Result.URI | Should -Be 'https://netbox.domain.com/api/dcim/interface-connections/30/', 'https://netbox.domain.com/api/dcim/interface-connections/40/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 2
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2018 v5.5.152
|
||||
|
|
@ -24,7 +24,7 @@ Describe -Name "DCIM Platforms Tests" -Tag 'DCIM', 'platforms' -Fixture {
|
|||
Mock -CommandName 'CheckNetboxIsConnected' -Verifiable -ModuleName 'NetboxPS' -MockWith {
|
||||
return $true
|
||||
}
|
||||
|
||||
|
||||
Mock -CommandName 'Invoke-RestMethod' -Verifiable -ModuleName 'NetboxPS' -MockWith {
|
||||
# Return a hashtable of the items we would normally pass to Invoke-RestMethod
|
||||
return [ordered]@{
|
||||
|
|
@ -36,78 +36,78 @@ Describe -Name "DCIM Platforms Tests" -Tag 'DCIM', 'platforms' -Fixture {
|
|||
'Body' = $Body
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Mock -CommandName 'Get-NetboxCredential' -Verifiable -ModuleName 'NetboxPS' -MockWith {
|
||||
return [PSCredential]::new('notapplicable', (ConvertTo-SecureString -String "faketoken" -AsPlainText -Force))
|
||||
}
|
||||
|
||||
|
||||
Mock -CommandName 'Get-NetboxHostname' -Verifiable -ModuleName 'NetboxPS' -MockWith {
|
||||
return 'netbox.domain.com'
|
||||
}
|
||||
|
||||
|
||||
InModuleScope -ModuleName 'NetboxPS' -ScriptBlock {
|
||||
Context -Name "Get-NetboxDCIMPlatform" -Fixture {
|
||||
It "Should request the default number of platforms" {
|
||||
$Result = Get-NetboxDCIMPlatform
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Invoke-RestMethod' -Times 1 -Scope 'It' -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/platforms/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with a limit and offset" {
|
||||
$Result = Get-NetboxDCIMPlatform -Limit 10 -Offset 100
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Invoke-RestMethod' -Times 1 -Scope 'It' -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/platforms/?offset=100&limit=10'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with a platform name" {
|
||||
$Result = Get-NetboxDCIMPlatform -Name "Windows Server 2016"
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Invoke-RestMethod' -Times 1 -Scope 'It' -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/dcim/platforms/?name=Windows+Server+2016'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request a platform by manufacturer" {
|
||||
$Result = Get-NetboxDCIMPlatform -Manufacturer 'Cisco'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Invoke-RestMethod' -Times 1 -Scope 'It' -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -BeExactly 'https://netbox.domain.com/api/dcim/platforms/?manufacturer=Cisco'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request a platform by ID" {
|
||||
$Result = Get-NetboxDCIMPlatform -Id 10
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Invoke-RestMethod' -Times 1 -Scope 'It' -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -BeExactly 'https://netbox.domain.com/api/dcim/platforms/10/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request multiple platforms by ID" {
|
||||
$Result = Get-NetboxDCIMPlatform -Id 10, 20
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Invoke-RestMethod' -Times 2 -Scope 'It' -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET', 'GET'
|
||||
$Result.Uri | Should -BeExactly 'https://netbox.domain.com/api/dcim/platforms/10/', 'https://netbox.domain.com/api/dcim/platforms/20/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 2
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2018 v5.5.150
|
||||
|
|
@ -26,17 +26,17 @@ Describe "Helpers tests" -Tag 'Core', 'Helpers' -Fixture {
|
|||
Check-NetboxIsConnected
|
||||
} | Should -Throw
|
||||
}
|
||||
|
||||
|
||||
Mock -CommandName 'CheckNetboxIsConnected' -MockWith {
|
||||
return $true
|
||||
} -ModuleName 'NetboxPS'
|
||||
|
||||
|
||||
InModuleScope -ModuleName 'NetboxPS' -ScriptBlock {
|
||||
Context -Name "Building URIBuilder" -Fixture {
|
||||
It "Should give a basic URI object" {
|
||||
BuildNewURI -HostName 'netbox.domain.com' | Should -BeOfType [System.UriBuilder]
|
||||
}
|
||||
|
||||
|
||||
It "Should generate a URI using only a supplied hostname" {
|
||||
$URIBuilder = BuildNewURI -Hostname "netbox.domain.com"
|
||||
$URIBuilder.Host | Should -BeExactly 'netbox.domain.com'
|
||||
|
|
@ -45,51 +45,51 @@ Describe "Helpers tests" -Tag 'Core', 'Helpers' -Fixture {
|
|||
$URIBuilder.Port | Should -Be 443
|
||||
$URIBuilder.URI.AbsoluteUri | Should -Be 'https://netbox.domain.com/api//'
|
||||
}
|
||||
|
||||
|
||||
It "Should generate a URI using a hostname and segments" {
|
||||
$URIBuilder = BuildNewURI -Hostname "netbox.domain.com" -Segments 'seg1', 'seg2'
|
||||
$URIBuilder.Host | Should -BeExactly 'netbox.domain.com'
|
||||
$URIBuilder.Path | Should -BeExactly 'api/seg1/seg2/'
|
||||
$URIBuilder.URI.AbsoluteUri | Should -BeExactly 'https://netbox.domain.com/api/seg1/seg2/'
|
||||
}
|
||||
|
||||
|
||||
It "Should generate a URI using insecure HTTP and default to port 80" {
|
||||
$URIBuilder = BuildNewURI -Hostname "netbox.domain.com" -Segments 'seg1', 'seg2' -HTTPS $false -WarningAction 'SilentlyContinue'
|
||||
$URIBuilder.Scheme | Should -Be 'http'
|
||||
$URIBuilder.Port | Should -Be 80
|
||||
$URIBuilder.URI.AbsoluteURI | Should -Be 'http://netbox.domain.com/api/seg1/seg2/'
|
||||
}
|
||||
|
||||
|
||||
It "Should generate a URI using HTTPS on port 1234" {
|
||||
$URIBuilder = BuildNewURI -Hostname "netbox.domain.com" -Segments 'seg1', 'seg2' -Port 1234
|
||||
$URIBuilder.Scheme | Should -Be 'https'
|
||||
$URIBuilder.Port | Should -Be 1234
|
||||
$URIBuilder.URI.AbsoluteURI | Should -BeExactly 'https://netbox.domain.com:1234/api/seg1/seg2/'
|
||||
}
|
||||
|
||||
|
||||
It "Should generate a URI using HTTP on port 4321" {
|
||||
$URIBuilder = BuildNewURI -Hostname "netbox.domain.com" -Segments 'seg1', 'seg2' -HTTPS $false -Port 4321 -WarningAction 'SilentlyContinue'
|
||||
$URIBuilder.Scheme | Should -Be 'http'
|
||||
$URIBuilder.Port | Should -Be 4321
|
||||
$URIBuilder.URI.AbsoluteURI | Should -BeExactly 'http://netbox.domain.com:4321/api/seg1/seg2/'
|
||||
}
|
||||
|
||||
|
||||
It "Should generate a URI with parameters" {
|
||||
$URIParameters = @{
|
||||
'param1' = 'paramval1'
|
||||
'param2' = 'paramval2'
|
||||
}
|
||||
|
||||
|
||||
$URIBuilder = BuildNewURI -Hostname "netbox.domain.com" -Segments 'seg1', 'seg2' -Parameters $URIParameters
|
||||
$URIBuilder.Query | Should -BeExactly '?param1=paramval1¶m2=paramval2'
|
||||
$URIBuilder.URI.AbsoluteURI | Should -BeExactly 'https://netbox.domain.com/api/seg1/seg2/?param1=paramval1¶m2=paramval2'
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "Building URI components" -Fixture {
|
||||
It "Should give a basic hashtable" {
|
||||
$URIComponents = BuildURIComponents -URISegments @('segment1', 'segment2') -ParametersDictionary @{'param1' = 1}
|
||||
|
||||
|
||||
$URIComponents | Should -BeOfType [hashtable]
|
||||
$URIComponents.Keys.Count | Should -BeExactly 2
|
||||
$URIComponents.Keys | Should -Be @("Segments", "Parameters")
|
||||
|
|
@ -98,10 +98,10 @@ Describe "Helpers tests" -Tag 'Core', 'Helpers' -Fixture {
|
|||
$URIComponents.Parameters | Should -BeOfType [hashtable]
|
||||
$URIComponents.Parameters['param1'] | Should -Be 1
|
||||
}
|
||||
|
||||
|
||||
It "Should add a single ID parameter to the segments" {
|
||||
$URIComponents = BuildURIComponents -URISegments @('segment1', 'segment2') -ParametersDictionary @{'id' = 123}
|
||||
|
||||
|
||||
$URIComponents | Should -BeOfType [hashtable]
|
||||
$URIComponents.Keys.Count | Should -BeExactly 2
|
||||
$URIComponents.Keys | Should -Be @("Segments", "Parameters")
|
||||
|
|
@ -109,10 +109,10 @@ Describe "Helpers tests" -Tag 'Core', 'Helpers' -Fixture {
|
|||
$URIComponents.Parameters.Count | Should -BeExactly 0
|
||||
$URIComponents.Parameters | Should -BeOfType [hashtable]
|
||||
}
|
||||
|
||||
|
||||
It "Should add multiple IDs to the parameters id__in" {
|
||||
$URIComponents = BuildURIComponents -URISegments @('segment1', 'segment2') -ParametersDictionary @{'id' = "123", "456"}
|
||||
|
||||
|
||||
$URIComponents | Should -BeOfType [hashtable]
|
||||
$URIComponents.Keys.Count | Should -BeExactly 2
|
||||
$URIComponents.Keys | Should -Be @("Segments", "Parameters")
|
||||
|
|
@ -121,10 +121,10 @@ Describe "Helpers tests" -Tag 'Core', 'Helpers' -Fixture {
|
|||
$URIComponents.Parameters | Should -BeOfType [hashtable]
|
||||
$URIComponents.Parameters['id__in'] | Should -Be '123,456'
|
||||
}
|
||||
|
||||
|
||||
It "Should skip a particular parameter name" {
|
||||
$URIComponents = BuildURIComponents -URISegments @('segment1', 'segment2') -ParametersDictionary @{'param1' = 1; 'param2' = 2} -SkipParameterByName 'param2'
|
||||
|
||||
|
||||
$URIComponents | Should -BeOfType [hashtable]
|
||||
$URIComponents.Keys.Count | Should -BeExactly 2
|
||||
$URIComponents.Keys | Should -Be @("Segments", "Parameters")
|
||||
|
|
@ -134,10 +134,10 @@ Describe "Helpers tests" -Tag 'Core', 'Helpers' -Fixture {
|
|||
$URIComponents.Parameters['param1'] | Should -Be 1
|
||||
$URIComponents.Parameters['param2'] | Should -BeNullOrEmpty
|
||||
}
|
||||
|
||||
|
||||
It "Should add a query (q) parameter" {
|
||||
$URIComponents = BuildURIComponents -URISegments @('segment1', 'segment2') -ParametersDictionary @{'query' = 'mytestquery'}
|
||||
|
||||
|
||||
$URIComponents | Should -BeOfType [hashtable]
|
||||
$URIComponents.Keys.Count | Should -BeExactly 2
|
||||
$URIComponents.Keys | Should -Be @("Segments", "Parameters")
|
||||
|
|
@ -146,7 +146,7 @@ Describe "Helpers tests" -Tag 'Core', 'Helpers' -Fixture {
|
|||
$URIComponents.Parameters | Should -BeOfType [hashtable]
|
||||
$URIComponents.Parameters['q'] | Should -Be 'mytestquery'
|
||||
}
|
||||
|
||||
|
||||
It "Should generate custom field parameters" {
|
||||
$URIComponents = BuildURIComponents -URISegments @('segment1', 'segment2') -ParametersDictionary @{
|
||||
'CustomFields' = @{
|
||||
|
|
@ -154,7 +154,7 @@ Describe "Helpers tests" -Tag 'Core', 'Helpers' -Fixture {
|
|||
'Customer_Id' = 'abc'
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$URIComponents | Should -BeOfType [hashtable]
|
||||
$URIComponents.Keys.Count | Should -BeExactly 2
|
||||
$URIComponents.Keys | Should -Be @("Segments", "Parameters")
|
||||
|
|
@ -165,7 +165,7 @@ Describe "Helpers tests" -Tag 'Core', 'Helpers' -Fixture {
|
|||
$URIComponents.Parameters['cf_customer_id'] | Should -Be 'abc'
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "Invoking request tests" -Fixture {
|
||||
Mock -CommandName 'Invoke-RestMethod' -Verifiable -MockWith {
|
||||
# Return an object of the items we would normally pass to Invoke-RestMethod
|
||||
|
|
@ -179,29 +179,29 @@ Describe "Helpers tests" -Tag 'Core', 'Helpers' -Fixture {
|
|||
'results' = 'Only results'
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Mock -CommandName 'Get-NetboxCredential' -Verifiable -ModuleName 'NetboxPS' -MockWith {
|
||||
return [PSCredential]::new('notapplicable', (ConvertTo-SecureString -String "faketoken" -AsPlainText -Force))
|
||||
}
|
||||
|
||||
|
||||
It "Should return direct results instead of the raw request" {
|
||||
$URIBuilder = BuildNewURI -Hostname "netbox.domain.com" -Segments 'seg1', 'seg2'
|
||||
|
||||
|
||||
$Result = InvokeNetboxRequest -URI $URIBuilder
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result | Should -BeOfType [string]
|
||||
$Result | Should -BeExactly "Only results"
|
||||
}
|
||||
|
||||
|
||||
It "Should generate a basic request" {
|
||||
$URIBuilder = BuildNewURI -Hostname "netbox.domain.com" -Segments 'seg1', 'seg2'
|
||||
|
||||
|
||||
$Result = InvokeNetboxRequest -URI $URIBuilder -Raw
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be $URIBuilder.Uri.AbsoluteUri
|
||||
$Result.Headers | Should -BeOfType [System.Collections.HashTable]
|
||||
|
|
@ -210,49 +210,49 @@ Describe "Helpers tests" -Tag 'Core', 'Helpers' -Fixture {
|
|||
$Result.ContentType | Should -Be 'application/json'
|
||||
$Result.Body | Should -Be $null # We did not supply a body
|
||||
}
|
||||
|
||||
|
||||
It "Should generate a POST request with body" {
|
||||
$URIBuilder = BuildNewURI -Hostname "netbox.domain.com" -Segments 'seg1', 'seg2'
|
||||
|
||||
|
||||
$Result = InvokeNetboxRequest -URI $URIBuilder -Method POST -Body @{
|
||||
'bodyparam1' = 'val1'
|
||||
} -Raw
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'POST'
|
||||
$Result.Body | Should -Be '{"bodyparam1":"val1"}'
|
||||
}
|
||||
|
||||
|
||||
It "Should generate a POST request with an extra header" {
|
||||
$Headers = @{
|
||||
'Connection' = 'keep-alive'
|
||||
}
|
||||
|
||||
|
||||
$Body = @{
|
||||
'bodyparam1' = 'val1'
|
||||
}
|
||||
|
||||
|
||||
$URIBuilder = BuildNewURI -Hostname "netbox.domain.com" -Segments 'seg1', 'seg2'
|
||||
|
||||
|
||||
$Result = InvokeNetboxRequest -URI $URIBuilder -Method POST -Body $Body -Headers $Headers -Raw
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'POST'
|
||||
$Result.Body | Should -Be '{"bodyparam1":"val1"}'
|
||||
$Result.Headers.Count | Should -BeExactly 2
|
||||
$Result.Headers.Authorization | Should -Be "Token faketoken"
|
||||
$Result.Headers.Connection | Should -Be "keep-alive"
|
||||
}
|
||||
|
||||
|
||||
It "Should throw because of an invalid method" {
|
||||
{
|
||||
$URI = BuildNewURI -Hostname "netbox.domain.com" -Segments 'seg1', 'seg2'
|
||||
InvokeNetboxRequest -URI $URI -Method 'Fake'
|
||||
} | Should -Throw
|
||||
}
|
||||
|
||||
|
||||
It "Should throw because of an out-of-range timeout" {
|
||||
{
|
||||
$URI = BuildNewURI -Hostname "netbox.domain.com" -Segments 'seg1', 'seg2'
|
||||
|
|
@ -260,222 +260,222 @@ Describe "Helpers tests" -Tag 'Core', 'Helpers' -Fixture {
|
|||
} | Should -Throw
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "Validating choices" -Fixture {
|
||||
Context -Name "Virtualization choices" -Fixture {
|
||||
$MajorObject = 'Virtualization'
|
||||
$script:NetboxConfig.Choices.Virtualization = (Get-Content "$PSScriptRoot\VirtualizationChoices.json" -ErrorAction Stop | ConvertFrom-Json)
|
||||
|
||||
|
||||
It "Should return a valid integer for status when provided a name" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName 'virtual-machine:status' -ProvidedValue 'Active'
|
||||
|
||||
|
||||
$Result | Should -BeOfType [uint16]
|
||||
$Result | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should return a valid integer for status when provided an integer" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName 'virtual-machine:status' -ProvidedValue 0
|
||||
|
||||
|
||||
$Result | Should -BeOfType [uint16]
|
||||
$Result | Should -BeExactly 0
|
||||
}
|
||||
|
||||
|
||||
It "Should throw because of an invalid choice" {
|
||||
{
|
||||
ValidateChoice -MajorObject $MajorObject -ChoiceName 'virtual-machine:status' -ProvidedValue 'Fake'
|
||||
} | Should -Throw
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "IPAM choices" -Fixture {
|
||||
$MajorObject = 'IPAM'
|
||||
$script:NetboxConfig.Choices.IPAM = (Get-Content "$PSScriptRoot\IPAMChoices.json" -ErrorAction Stop | ConvertFrom-Json)
|
||||
|
||||
|
||||
Context -Name "aggregate:family" -Fixture {
|
||||
$ChoiceName = 'aggregate:family'
|
||||
|
||||
|
||||
It "Should return a valid integer when provided a name" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 'IPv4'
|
||||
|
||||
|
||||
$Result | Should -BeOfType [uint16]
|
||||
$Result | Should -BeExactly 4
|
||||
}
|
||||
|
||||
|
||||
It "Should return a valid integer when provided an integer" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 4
|
||||
|
||||
|
||||
$Result | Should -BeOfType [uint16]
|
||||
$Result | Should -BeExactly 4
|
||||
}
|
||||
|
||||
|
||||
It "Should throw because of an invalid choice" {
|
||||
{
|
||||
ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 0
|
||||
} | Should -Throw
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "prefix:family" {
|
||||
$ChoiceName = 'prefix:family'
|
||||
|
||||
|
||||
It "Should return a valid integer when provided a name" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 'IPv4'
|
||||
|
||||
|
||||
$Result | Should -BeOfType [uint16]
|
||||
$Result | Should -BeExactly 4
|
||||
}
|
||||
|
||||
|
||||
It "Should return a valid integer when provided an integer" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 4
|
||||
|
||||
|
||||
$Result | Should -BeOfType [uint16]
|
||||
$Result | Should -BeExactly 4
|
||||
}
|
||||
|
||||
|
||||
It "Should throw because of an invalid choice" {
|
||||
{
|
||||
ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 0
|
||||
} | Should -Throw
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "prefix:status" {
|
||||
$ChoiceName = 'prefix:status'
|
||||
|
||||
|
||||
It "Should return a valid integer when provided a name" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 'Active'
|
||||
|
||||
|
||||
$Result | Should -BeOfType [uint16]
|
||||
$Result | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should return a valid integer when provided an integer" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 1
|
||||
|
||||
|
||||
$Result | Should -BeOfType [uint16]
|
||||
$Result | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should throw because of an invalid choice" {
|
||||
{
|
||||
ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 10
|
||||
} | Should -Throw
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "ip-address:family" {
|
||||
$ChoiceName = 'ip-address:family'
|
||||
|
||||
|
||||
It "Should return a valid integer when provided a name" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 'IPv4'
|
||||
|
||||
|
||||
$Result | Should -BeOfType [uint16]
|
||||
$Result | Should -BeExactly 4
|
||||
}
|
||||
|
||||
|
||||
It "Should return a valid integer when provided an integer" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 4
|
||||
|
||||
|
||||
$Result | Should -BeOfType [uint16]
|
||||
$Result | Should -BeExactly 4
|
||||
}
|
||||
|
||||
|
||||
It "Should throw because of an invalid choice" {
|
||||
{
|
||||
ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 10
|
||||
} | Should -Throw
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "ip-address:status" {
|
||||
$ChoiceName = 'ip-address:status'
|
||||
|
||||
|
||||
It "Should return a valid integer when provided a name" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 'Active'
|
||||
|
||||
|
||||
$Result | Should -BeOfType [uint16]
|
||||
$Result | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should return a valid integer when provided an integer" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 1
|
||||
|
||||
|
||||
$Result | Should -BeOfType [uint16]
|
||||
$Result | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should throw because of an invalid choice" {
|
||||
{
|
||||
ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 10
|
||||
} | Should -Throw
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "ip-address:role" {
|
||||
$ChoiceName = 'ip-address:role'
|
||||
|
||||
|
||||
It "Should return a valid integer when provided a name" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 'Anycast'
|
||||
|
||||
|
||||
$Result | Should -BeOfType [uint16]
|
||||
$Result | Should -BeExactly 30
|
||||
}
|
||||
|
||||
|
||||
It "Should return a valid integer when provided an integer" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 30
|
||||
|
||||
|
||||
$Result | Should -BeOfType [uint16]
|
||||
$Result | Should -BeExactly 30
|
||||
}
|
||||
|
||||
|
||||
It "Should throw because of an invalid choice" {
|
||||
{
|
||||
ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 1
|
||||
} | Should -Throw
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "vlan:status" {
|
||||
$ChoiceName = 'vlan:status'
|
||||
|
||||
|
||||
It "Should return a valid integer when provided a name" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 'Active'
|
||||
|
||||
|
||||
$Result | Should -BeOfType [uint16]
|
||||
$Result | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should return a valid integer when provided an integer" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 1
|
||||
|
||||
|
||||
$Result | Should -BeOfType [uint16]
|
||||
$Result | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should throw because of an invalid choice" {
|
||||
{
|
||||
ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 0
|
||||
} | Should -Throw
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "service:protocol" {
|
||||
$ChoiceName = 'service:protocol'
|
||||
|
||||
|
||||
It "Should return a valid integer when provided a name" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 'TCP'
|
||||
|
||||
|
||||
$Result | Should -BeOfType [uint16]
|
||||
$Result | Should -BeExactly 6
|
||||
}
|
||||
|
||||
|
||||
It "Should return a valid integer when provided an integer" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 6
|
||||
|
||||
|
||||
$Result | Should -BeOfType [uint16]
|
||||
$Result | Should -BeExactly 6
|
||||
}
|
||||
|
||||
|
||||
It "Should throw because of an invalid choice" {
|
||||
{
|
||||
ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 0
|
||||
|
|
@ -483,241 +483,241 @@ Describe "Helpers tests" -Tag 'Core', 'Helpers' -Fixture {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "DCIM choices" -Fixture {
|
||||
$MajorObject = 'DCIM'
|
||||
$script:NetboxConfig.Choices.DCIM = (Get-Content "$PSScriptRoot\DCIMChoices.json" -ErrorAction Stop | ConvertFrom-Json)
|
||||
|
||||
|
||||
Context -Name "device:face" -Fixture {
|
||||
$ChoiceName = 'device:face'
|
||||
|
||||
|
||||
It "Should return a valid integer when provided a name" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 'Front'
|
||||
|
||||
|
||||
$Result | Should -BeOfType [uint16]
|
||||
$Result | Should -BeExactly 0
|
||||
}
|
||||
|
||||
|
||||
It "Should return a valid integer when provided an integer" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 1
|
||||
|
||||
|
||||
$Result | Should -BeOfType [uint16]
|
||||
$Result | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should throw because of an invalid choice" {
|
||||
{
|
||||
ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 'fake'
|
||||
} | Should -Throw
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "device:status" -Fixture {
|
||||
$ChoiceName = 'device:status'
|
||||
|
||||
|
||||
It "Should return a valid integer when provided a name" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 'Active'
|
||||
|
||||
|
||||
$Result | Should -BeOfType [uint16]
|
||||
$Result | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should return a valid integer when provided an integer" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 0
|
||||
|
||||
|
||||
$Result | Should -BeOfType [uint16]
|
||||
$Result | Should -BeExactly 0
|
||||
}
|
||||
|
||||
|
||||
It "Should throw because of an invalid choice" {
|
||||
{
|
||||
ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 'fake'
|
||||
} | Should -Throw
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "console-port:connection_status" -Fixture {
|
||||
$ChoiceName = 'console-port:connection_status'
|
||||
|
||||
|
||||
It "Should return a valid string when provided a name" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 'Planned'
|
||||
|
||||
|
||||
$Result | Should -BeOfType [bool]
|
||||
$Result | Should -Be $false
|
||||
}
|
||||
|
||||
|
||||
It "Should return a valid string when provided a string" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 'false'
|
||||
|
||||
|
||||
$Result | Should -BeOfType [bool]
|
||||
$Result | Should -Be $false
|
||||
}
|
||||
|
||||
|
||||
It "Should return a valid string when provided a boolean" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue $true
|
||||
|
||||
|
||||
$Result | Should -BeOfType [bool]
|
||||
$Result | Should -Be $true
|
||||
}
|
||||
|
||||
|
||||
It "Should throw because of an invalid choice" {
|
||||
{
|
||||
ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 'fake'
|
||||
} | Should -Throw
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "interface:form_factor" -Fixture {
|
||||
$ChoiceName = 'interface:form_factor'
|
||||
|
||||
|
||||
It "Should return a valid integer when provided a name" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue '10GBASE-CX4 (10GE)'
|
||||
|
||||
|
||||
$Result | Should -BeOfType [uint16]
|
||||
$Result | Should -BeExactly 1170
|
||||
}
|
||||
|
||||
|
||||
It "Should return a valid integer when provided an integer" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 1500
|
||||
|
||||
|
||||
$Result | Should -BeOfType [uint16]
|
||||
$Result | Should -BeExactly 1500
|
||||
}
|
||||
|
||||
|
||||
It "Should throw because of an invalid choice" {
|
||||
{
|
||||
ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 'fake'
|
||||
} | Should -Throw
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "interface-connection:connection_status" -Fixture {
|
||||
$ChoiceName = 'interface-connection:connection_status'
|
||||
|
||||
|
||||
It "Should return a valid string when provided a name" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 'Planned'
|
||||
|
||||
|
||||
$Result | Should -BeOfType [bool]
|
||||
$Result | Should -Be $false
|
||||
}
|
||||
|
||||
|
||||
It "Should return a valid string when provided a string" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 'false'
|
||||
|
||||
|
||||
$Result | Should -BeOfType [bool]
|
||||
$Result | Should -Be $false
|
||||
}
|
||||
|
||||
|
||||
It "Should return a valid string when provided a boolean" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue $true
|
||||
|
||||
|
||||
$Result | Should -BeOfType [bool]
|
||||
$Result | Should -Be $true
|
||||
}
|
||||
|
||||
|
||||
It "Should throw because of an invalid choice" {
|
||||
{
|
||||
ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 'fake'
|
||||
} | Should -Throw
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "interface-template:form_factor" -Fixture {
|
||||
$ChoiceName = 'interface-template:form_factor'
|
||||
|
||||
|
||||
It "Should return a valid integer when provided a name" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue '10GBASE-CX4 (10GE)'
|
||||
|
||||
|
||||
$Result | Should -BeOfType [uint16]
|
||||
$Result | Should -BeExactly 1170
|
||||
}
|
||||
|
||||
|
||||
It "Should return a valid integer when provided an integer" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 1500
|
||||
|
||||
|
||||
$Result | Should -BeOfType [uint16]
|
||||
$Result | Should -BeExactly 1500
|
||||
}
|
||||
|
||||
|
||||
It "Should throw because of an invalid choice" {
|
||||
{
|
||||
ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 'fake'
|
||||
} | Should -Throw
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "power-port:connection_status" -Fixture {
|
||||
$ChoiceName = 'power-port:connection_status'
|
||||
|
||||
|
||||
It "Should return a valid string when provided a name" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 'Planned'
|
||||
|
||||
|
||||
$Result | Should -BeOfType [bool]
|
||||
$Result | Should -Be $false
|
||||
}
|
||||
|
||||
|
||||
It "Should return a valid string when provided a string" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 'false'
|
||||
|
||||
|
||||
$Result | Should -BeOfType [bool]
|
||||
$Result | Should -Be $false
|
||||
}
|
||||
|
||||
|
||||
It "Should return a valid string when provided a boolean" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue $true
|
||||
|
||||
|
||||
$Result | Should -BeOfType [bool]
|
||||
$Result | Should -Be $true
|
||||
}
|
||||
|
||||
|
||||
It "Should throw because of an invalid choice" {
|
||||
{
|
||||
ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 'fake'
|
||||
} | Should -Throw
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "rack:type" -Fixture {
|
||||
$ChoiceName = 'rack:type'
|
||||
|
||||
|
||||
It "Should return a valid integer when provided a name" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue '2-post frame'
|
||||
|
||||
|
||||
$Result | Should -BeOfType [uint16]
|
||||
$Result | Should -BeExactly 100
|
||||
}
|
||||
|
||||
|
||||
It "Should return a valid integer when provided an integer" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 300
|
||||
|
||||
|
||||
$Result | Should -BeOfType [uint16]
|
||||
$Result | Should -BeExactly 300
|
||||
}
|
||||
|
||||
|
||||
It "Should throw because of an invalid choice" {
|
||||
{
|
||||
ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 'fake'
|
||||
} | Should -Throw
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "rack:width" -Fixture {
|
||||
$ChoiceName = 'rack:width'
|
||||
|
||||
|
||||
It "Should return a valid integer when provided a name" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue '19 inches'
|
||||
|
||||
|
||||
$Result | Should -BeOfType [uint16]
|
||||
$Result | Should -BeExactly 19
|
||||
}
|
||||
|
||||
|
||||
It "Should return a valid integer when provided an integer" {
|
||||
$Result = ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 23
|
||||
|
||||
|
||||
$Result | Should -BeOfType [uint16]
|
||||
$Result | Should -BeExactly 23
|
||||
}
|
||||
|
||||
|
||||
It "Should throw because of an invalid choice" {
|
||||
{
|
||||
ValidateChoice -MajorObject $MajorObject -ChoiceName $ChoiceName -ProvidedValue 'fake'
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2018 v5.5.150
|
||||
|
|
@ -25,7 +25,7 @@ Describe -Name "IPAM tests" -Tag 'Ipam' -Fixture {
|
|||
Mock -CommandName 'CheckNetboxIsConnected' -Verifiable -ModuleName 'NetboxPS' -MockWith {
|
||||
return $true
|
||||
}
|
||||
|
||||
|
||||
Mock -CommandName 'Invoke-RestMethod' -Verifiable -ModuleName 'NetboxPS' -MockWith {
|
||||
# Return a hashtable of the items we would normally pass to Invoke-RestMethod
|
||||
return [ordered]@{
|
||||
|
|
@ -37,387 +37,387 @@ Describe -Name "IPAM tests" -Tag 'Ipam' -Fixture {
|
|||
'Body' = $Body
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Mock -CommandName 'Get-NetboxCredential' -Verifiable -ModuleName 'NetboxPS' -MockWith {
|
||||
return [PSCredential]::new('notapplicable', (ConvertTo-SecureString -String "faketoken" -AsPlainText -Force))
|
||||
}
|
||||
|
||||
|
||||
Mock -CommandName 'Get-NetboxHostname' -Verifiable -ModuleName 'NetboxPS' -MockWith {
|
||||
return 'netbox.domain.com'
|
||||
}
|
||||
|
||||
|
||||
InModuleScope -ModuleName 'NetboxPS' -ScriptBlock {
|
||||
$script:NetboxConfig.Choices.IPAM = (Get-Content "$PSScriptRoot\IPAMChoices.json" -ErrorAction Stop | ConvertFrom-Json)
|
||||
|
||||
Context -Name "Get-NetboxIPAMAggregate" -Fixture {
|
||||
It "Should request the default number of aggregates" {
|
||||
$Result = Get-NetboxIPAMAggregate
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/aggregates/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Headers.Authorization | Should -Be "Token faketoken"
|
||||
}
|
||||
|
||||
|
||||
It "Should request with limit and offset" {
|
||||
$Result = Get-NetboxIPAMAggregate -Limit 10 -Offset 12
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/aggregates/?offset=12&limit=10'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Headers.Authorization | Should -Be "Token faketoken"
|
||||
}
|
||||
|
||||
|
||||
It "Should request with a query" {
|
||||
$Result = Get-NetboxIPAMAggregate -Query '10.10.0.0'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/aggregates/?q=10.10.0.0'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Headers.Authorization | Should -Be "Token faketoken"
|
||||
}
|
||||
|
||||
|
||||
It "Should request with an escaped query" {
|
||||
$Result = Get-NetboxIPAMAggregate -Query 'my aggregate'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/aggregates/?q=my+aggregate'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Headers.Authorization | Should -Be "Token faketoken"
|
||||
}
|
||||
|
||||
|
||||
It "Should request with a single ID" {
|
||||
$Result = Get-NetboxIPAMAggregate -Id 10
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/aggregates/10/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Headers.Authorization | Should -Be "Token faketoken"
|
||||
}
|
||||
|
||||
|
||||
It "Should request with multiple IDs" {
|
||||
$Result = Get-NetboxIPAMAggregate -Id 10, 12, 15
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/aggregates/?id__in=10,12,15'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Headers.Authorization | Should -Be "Token faketoken"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "Get-NetboxIPAMAddress" -Fixture {
|
||||
It "Should request the default number of addresses" {
|
||||
$Result = Get-NetboxIPAMAddress
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/ip-addresses/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Headers.Authorization | Should -Be "Token faketoken"
|
||||
}
|
||||
|
||||
|
||||
It "Should request with limit and offset" {
|
||||
$Result = Get-NetboxIPAMAddress -Limit 10 -Offset 12
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/ip-addresses/?offset=12&limit=10'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Headers.Authorization | Should -Be "Token faketoken"
|
||||
}
|
||||
|
||||
|
||||
It "Should request with a query" {
|
||||
$Result = Get-NetboxIPAMAddress -Query '10.10.10.10'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/ip-addresses/?q=10.10.10.10'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Headers.Authorization | Should -Be "Token faketoken"
|
||||
}
|
||||
|
||||
|
||||
It "Should request with an escaped query" {
|
||||
$Result = Get-NetboxIPAMAddress -Query 'my ip address'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/ip-addresses/?q=my+ip+address'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Headers.Authorization | Should -Be "Token faketoken"
|
||||
}
|
||||
|
||||
|
||||
It "Should request with a single ID" {
|
||||
$Result = Get-NetboxIPAMAddress -Id 10
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/ip-addresses/10/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Headers.Authorization | Should -Be "Token faketoken"
|
||||
}
|
||||
|
||||
|
||||
It "Should request with multiple IDs" {
|
||||
$Result = Get-NetboxIPAMAddress -Id 10, 12, 15
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/ip-addresses/?id__in=10,12,15'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Headers.Authorization | Should -Be "Token faketoken"
|
||||
}
|
||||
|
||||
|
||||
It "Should request with a family number" {
|
||||
$Result = Get-NetboxIPAMAddress -Family 4
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/ip-addresses/?family=4'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with a family name" {
|
||||
$Result = Get-NetboxIPAMAddress -Family 'IPv4'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/ip-addresses/?family=4'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "Get-NetboxIPAMAvailableIP" -Fixture {
|
||||
It "Should request the default number of available IPs" {
|
||||
$Result = Get-NetboxIPAMAvailableIP -Prefix_Id 10
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/prefixes/10/available-ips/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Headers.Authorization | Should -Be "Token faketoken"
|
||||
}
|
||||
|
||||
|
||||
It "Should request 10 available IPs" {
|
||||
$Result = Get-NetboxIPAMAvailableIP -Prefix_Id 1504 -NumberOfIPs 10
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/prefixes/1504/available-ips/?limit=10'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Headers.Authorization | Should -Be "Token faketoken"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "Get-NetboxIPAMPrefix" -Fixture {
|
||||
It "Should request the default number of prefixes" {
|
||||
$Result = Get-NetboxIPAMPrefix
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/prefixes/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Headers.Authorization | Should -Be "Token faketoken"
|
||||
}
|
||||
|
||||
|
||||
It "Should request with limit and offset" {
|
||||
$Result = Get-NetboxIPAMPrefix -Limit 10 -Offset 12
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/prefixes/?offset=12&limit=10'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Headers.Authorization | Should -Be "Token faketoken"
|
||||
}
|
||||
|
||||
|
||||
It "Should request with a query" {
|
||||
$Result = Get-NetboxIPAMPrefix -Query '10.10.10.10'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/prefixes/?q=10.10.10.10'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Headers.Authorization | Should -Be "Token faketoken"
|
||||
}
|
||||
|
||||
|
||||
It "Should request with an escaped query" {
|
||||
$Result = Get-NetboxIPAMPrefix -Query 'my ip address'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/prefixes/?q=my+ip+address'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Headers.Authorization | Should -Be "Token faketoken"
|
||||
}
|
||||
|
||||
|
||||
It "Should request with a single ID" {
|
||||
$Result = Get-NetboxIPAMPrefix -Id 10
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/prefixes/10/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Headers.Authorization | Should -Be "Token faketoken"
|
||||
}
|
||||
|
||||
|
||||
It "Should request with multiple IDs" {
|
||||
$Result = Get-NetboxIPAMPrefix -Id 10, 12, 15
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/prefixes/?id__in=10,12,15'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Headers.Authorization | Should -Be "Token faketoken"
|
||||
}
|
||||
|
||||
|
||||
It "Should request with VLAN vID" {
|
||||
$Result = Get-NetboxIPAMPrefix -VLAN_VID 10
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/prefixes/?vlan_vid=10'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Headers.Authorization | Should -Be "Token faketoken"
|
||||
}
|
||||
|
||||
|
||||
It "Should request with family of 4" {
|
||||
$Result = Get-NetboxIPAMPrefix -Family 4
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/prefixes/?family=4'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Headers.Authorization | Should -Be "Token faketoken"
|
||||
}
|
||||
|
||||
|
||||
It "Should throw because the mask length is too large" {
|
||||
{
|
||||
Get-NetboxIPAMPrefix -Mask_length 128
|
||||
} | Should -Throw
|
||||
}
|
||||
|
||||
|
||||
It "Should throw because the mask length is too small" {
|
||||
{
|
||||
Get-NetboxIPAMPrefix -Mask_length -1
|
||||
} | Should -Throw
|
||||
}
|
||||
|
||||
|
||||
It "Should not throw because the mask length is just right" {
|
||||
{
|
||||
Get-NetboxIPAMPrefix -Mask_length 24
|
||||
} | Should -Not -Throw
|
||||
}
|
||||
|
||||
|
||||
It "Should request with mask length 24" {
|
||||
$Result = Get-NetboxIPAMPrefix -Mask_length 24
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/prefixes/?mask_length=24'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Headers.Authorization | Should -Be "Token faketoken"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "New-NetboxIPAMPrefix" -Fixture {
|
||||
It "Should create a basic prefix" {
|
||||
$Result = New-NetboxIPAMPrefix -Prefix "10.0.0.0/24"
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'POST'
|
||||
$Result.URI | Should -Be 'https://netbox.domain.com/api/ipam/prefixes/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Body | Should -Be '{"prefix":"10.0.0.0/24","status":1}'
|
||||
}
|
||||
|
||||
|
||||
It "Should create a prefix with a status and role names" {
|
||||
$Result = New-NetboxIPAMPrefix -Prefix "10.0.0.0/24" -Status 'Active' -Role 'Active'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'POST'
|
||||
$Result.URI | Should -Be 'https://netbox.domain.com/api/ipam/prefixes/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Body | Should -Be '{"prefix":"10.0.0.0/24","status":1,"role":"Active"}'
|
||||
}
|
||||
|
||||
|
||||
It "Should create a prefix with a status, role name, and tenant ID" {
|
||||
$Result = New-NetboxIPAMPrefix -Prefix "10.0.0.0/24" -Status 'Active' -Role 'Active' -Tenant 15
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'POST'
|
||||
$Result.URI | Should -Be 'https://netbox.domain.com/api/ipam/prefixes/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Body | Should -Be '{"prefix":"10.0.0.0/24","status":1,"tenant":15,"role":"Active"}'
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "New-NetboxIPAMAddress" -Fixture {
|
||||
It "Should create a basic IP address" {
|
||||
$Result = New-NetboxIPAMAddress -Address '10.0.0.1/24'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'POST'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/ip-addresses/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Body | Should -Be '{"status":1,"address":"10.0.0.1/24"}'
|
||||
}
|
||||
|
||||
|
||||
It "Should create an IP with a status and role names" {
|
||||
$Result = New-NetboxIPAMAddress -Address '10.0.0.1/24' -Status 'Reserved' -Role 'Anycast'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'POST'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/ip-addresses/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Body | Should -Be '{"status":2,"address":"10.0.0.1/24","role":30}'
|
||||
}
|
||||
|
||||
|
||||
It "Should create an IP with a status and role values" {
|
||||
$Result = New-NetboxIPAMAddress -Address '10.0.1.1/24' -Status '1' -Role '10'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'POST'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/ip-addresses/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Body | Should -Be '{"status":1,"address":"10.0.1.1/24","role":10}'
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "Remove-NetboxIPAMAddress" -Fixture {
|
||||
Mock -CommandName "Get-NetboxIPAMAddress" -ModuleName NetboxPS -MockWith {
|
||||
return @{
|
||||
|
|
@ -425,44 +425,44 @@ Describe -Name "IPAM tests" -Tag 'Ipam' -Fixture {
|
|||
'id' = $id
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
It "Should remove a single IP" {
|
||||
$Result = Remove-NetboxIPAMAddress -Id 4109 -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName "Get-NetboxIPAMAddress" -Times 1 -Scope 'It' -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'DELETE'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/ip-addresses/4109/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Body | Should -Be $null
|
||||
}
|
||||
|
||||
|
||||
It "Should remove a single IP from the pipeline" {
|
||||
$Result = [pscustomobject]@{
|
||||
'id' = 4110
|
||||
} | Remove-NetboxIPAMAddress -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName "Get-NetboxIPAMAddress" -Times 1 -Scope 'It' -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'DELETE'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/ip-addresses/4110/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Body | Should -Be $null
|
||||
}
|
||||
|
||||
It "Should remove multiple IPs" {
|
||||
|
||||
It "Should remove multiple IPs" {
|
||||
$Result = Remove-NetboxIPAMAddress -Id 4109, 4110 -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName "Get-NetboxIPAMAddress" -Times 2 -Scope 'It' -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'DELETE', 'DELETE'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/ip-addresses/4109/', 'https://netbox.domain.com/api/ipam/ip-addresses/4110/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 2
|
||||
}
|
||||
|
||||
|
||||
It "Should remove multiple IPs from the pipeline" {
|
||||
$Result = @(
|
||||
[pscustomobject]@{
|
||||
|
|
@ -472,16 +472,16 @@ Describe -Name "IPAM tests" -Tag 'Ipam' -Fixture {
|
|||
'id' = 4110
|
||||
}
|
||||
) | Remove-NetboxIPAMAddress -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName "Get-NetboxIPAMAddress" -Times 2 -Scope 'It' -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'DELETE', 'DELETE'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/ip-addresses/4109/', 'https://netbox.domain.com/api/ipam/ip-addresses/4110/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 2
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "Set-NetboxIPAMAddress" -Fixture {
|
||||
Mock -CommandName "Get-NetboxIPAMAddress" -ModuleName NetboxPS -MockWith {
|
||||
return @{
|
||||
|
|
@ -489,57 +489,57 @@ Describe -Name "IPAM tests" -Tag 'Ipam' -Fixture {
|
|||
'id' = $id
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
It "Should set an IP with a new status" {
|
||||
$Result = Set-NetboxIPAMAddress -Id 4109 -Status 2 -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName "Get-NetboxIPAMAddress" -Times 1 -Scope "It" -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'PATCH'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/ip-addresses/4109/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Body | Should -Be '{"status":2}'
|
||||
}
|
||||
|
||||
|
||||
It "Should set an IP from the pipeline" {
|
||||
$Result = [pscustomobject]@{
|
||||
'Id' = 4501
|
||||
} | Set-NetboxIPAMAddress -VRF 10 -Tenant 14 -Description 'Test description' -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName "Get-NetboxIPAMAddress" -Times 1 -Scope "It" -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'PATCH'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/ip-addresses/4501/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Body | Should -Be '{"vrf":10,"description":"Test description","tenant":14}'
|
||||
}
|
||||
|
||||
|
||||
It "Should set mulitple IPs to a new status" {
|
||||
$Result = Set-NetboxIPAMAddress -Id 4109, 4555 -Status 2 -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName "Get-NetboxIPAMAddress" -Times 2 -Scope "It" -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'PATCH', 'PATCH'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/ip-addresses/4109/', 'https://netbox.domain.com/api/ipam/ip-addresses/4555/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 2
|
||||
$Result.Body | Should -Be '{"status":2}', '{"status":2}'
|
||||
}
|
||||
|
||||
|
||||
It "Should set an IP with VRF, Tenant, and Description" {
|
||||
$Result = Set-NetboxIPAMAddress -Id 4110 -VRF 10 -Tenant 14 -Description 'Test description' -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName "Get-NetboxIPAMAddress" -Times 1 -Scope "It" -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'PATCH'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/ip-addresses/4110/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Body | Should -Be '{"vrf":10,"description":"Test description","tenant":14}'
|
||||
}
|
||||
|
||||
|
||||
It "Should set multiple IPs from the pipeline" {
|
||||
$Result = @(
|
||||
[pscustomobject]@{
|
||||
|
|
@ -549,10 +549,10 @@ Describe -Name "IPAM tests" -Tag 'Ipam' -Fixture {
|
|||
'Id' = 4611
|
||||
}
|
||||
) | Set-NetboxIPAMAddress -Status 2 -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName "Get-NetboxIPAMAddress" -Times 2 -Scope "It" -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'PATCH', 'PATCH'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/ipam/ip-addresses/4501/', 'https://netbox.domain.com/api/ipam/ip-addresses/4611/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 2
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2018 v5.5.150
|
||||
|
|
@ -24,61 +24,61 @@ Describe "Setup tests" -Tag 'Core', 'Setup' -Fixture {
|
|||
It "Throws an error for an empty hostname" {
|
||||
{ Get-NetboxHostname } | Should -Throw
|
||||
}
|
||||
|
||||
|
||||
It "Sets the hostname" {
|
||||
Set-NetboxHostName -HostName 'netbox.domain.com' | Should -Be 'netbox.domain.com'
|
||||
}
|
||||
|
||||
|
||||
It "Gets the hostname from the variable" {
|
||||
Get-NetboxHostName | Should -Be 'netbox.domain.com'
|
||||
}
|
||||
|
||||
|
||||
It "Throws an error for empty credentials" {
|
||||
{ Get-NetboxCredential } | Should -Throw
|
||||
}
|
||||
|
||||
|
||||
Context "Plain text credentials" {
|
||||
It "Sets the credentials using plain text" {
|
||||
Set-NetboxCredential -Token (ConvertTo-SecureString -String "faketoken" -Force -AsPlainText) | Should -BeOfType [pscredential]
|
||||
}
|
||||
|
||||
|
||||
It "Checks the set credentials" {
|
||||
$Creds = Set-NetboxCredential -Token (ConvertTo-SecureString -String "faketoken" -Force -AsPlainText)
|
||||
(Get-NetboxCredential).GetNetworkCredential().Password | Should -BeExactly "faketoken"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context "Credentials object" {
|
||||
$Creds = [PSCredential]::new('notapplicable', (ConvertTo-SecureString -String "faketoken" -AsPlainText -Force))
|
||||
|
||||
|
||||
It "Sets the credentials using [pscredential]" {
|
||||
Set-NetboxCredential -Credential $Creds | Should -BeOfType [pscredential]
|
||||
}
|
||||
|
||||
|
||||
It "Checks the set credentials" {
|
||||
(Get-NetboxCredential).GetNetworkCredential().Password | Should -BeExactly 'faketoken'
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
<#
|
||||
Context "Connecting to the API" {
|
||||
Mock Get-NetboxCircuitsChoices {
|
||||
return $true
|
||||
} -ModuleName NetboxPS -Verifiable
|
||||
|
||||
|
||||
$Creds = [PSCredential]::new('notapplicable', (ConvertTo-SecureString -String "faketoken" -AsPlainText -Force))
|
||||
|
||||
|
||||
It "Connects using supplied hostname and obtained credentials" {
|
||||
#$null = Set-NetboxCredentials -Credentials $Creds
|
||||
Connect-NetboxAPI -Hostname "fake.org" | Should -Be $true
|
||||
}
|
||||
|
||||
|
||||
It "Connects using supplied hostname and credentials" {
|
||||
Connect-NetboxAPI -Hostname 'fake.org' -Credentials $Creds | Should -Be $true
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Assert-MockCalled -CommandName Get-NetboxCircuitsChoices -ModuleName NetboxPS
|
||||
}
|
||||
#>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<#
|
||||
<#
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2018 v5.5.150
|
||||
|
|
@ -24,7 +24,7 @@ Describe -Name "Virtualization tests" -Tag 'Virtualization' -Fixture {
|
|||
Mock -CommandName 'CheckNetboxIsConnected' -Verifiable -ModuleName 'NetboxPS' -MockWith {
|
||||
return $true
|
||||
}
|
||||
|
||||
|
||||
Mock -CommandName 'Invoke-RestMethod' -Verifiable -ModuleName 'NetboxPS' -MockWith {
|
||||
# Return a hashtable of the items we would normally pass to Invoke-RestMethod
|
||||
return [ordered]@{
|
||||
|
|
@ -35,285 +35,285 @@ Describe -Name "Virtualization tests" -Tag 'Virtualization' -Fixture {
|
|||
'ContentType' = $ContentType
|
||||
'Body' = $Body
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Mock -CommandName 'Get-NetboxCredential' -Verifiable -ModuleName 'NetboxPS' -MockWith {
|
||||
return [PSCredential]::new('notapplicable', (ConvertTo-SecureString -String "faketoken" -AsPlainText -Force))
|
||||
}
|
||||
|
||||
|
||||
Mock -CommandName 'Get-NetboxHostname' -Verifiable -ModuleName 'NetboxPS' -MockWith {
|
||||
return 'netbox.domain.com'
|
||||
}
|
||||
|
||||
|
||||
InModuleScope -ModuleName 'NetboxPS' -ScriptBlock {
|
||||
$script:NetboxConfig.Choices.Virtualization = (Get-Content "$PSScriptRoot\VirtualizationChoices.json" -ErrorAction Stop | ConvertFrom-Json)
|
||||
|
||||
|
||||
Context -Name "Get-NetboxVirtualMachine" -Fixture {
|
||||
It "Should request the default number of VMs" {
|
||||
$Result = Get-NetboxVirtualMachine
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/virtualization/virtual-machines/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with limit and offset" {
|
||||
$Result = Get-NetboxVirtualMachine -Limit 10 -Offset 12
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/virtualization/virtual-machines/?offset=12&limit=10'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with a query" {
|
||||
$Result = Get-NetboxVirtualMachine -Query 'testvm'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/virtualization/virtual-machines/?q=testvm'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with an escaped query" {
|
||||
$Result = Get-NetboxVirtualMachine -Query 'test vm'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/virtualization/virtual-machines/?q=test+vm'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with a name" {
|
||||
$Result = Get-NetboxVirtualMachine -Name 'testvm'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/virtualization/virtual-machines/?name=testvm'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with a single ID" {
|
||||
$Result = Get-NetboxVirtualMachine -Id 10
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/virtualization/virtual-machines/10/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with multiple IDs" {
|
||||
$Result = Get-NetboxVirtualMachine -Id 10, 12, 15
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/virtualization/virtual-machines/?id__in=10,12,15'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request a status" {
|
||||
$Result = Get-NetboxVirtualMachine -Status 'Active'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/virtualization/virtual-machines/?status=1'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should throw for an invalid status" {
|
||||
{ Get-NetboxVirtualMachine -Status 'Fake' } | Should -Throw
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "Get-NetboxVirtualMachineInterface" -Fixture {
|
||||
It "Should request the default number of interfaces" {
|
||||
$Result = Get-NetboxVirtualMachineInterface
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/virtualization/interfaces/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with a limit and offset" {
|
||||
$Result = Get-NetboxVirtualMachineInterface -Limit 10 -Offset 12
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/virtualization/interfaces/?offset=12&limit=10'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request a interface with a specific ID" {
|
||||
$Result = Get-NetboxVirtualMachineInterface -Id 10
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/virtualization/interfaces/10/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request a name" {
|
||||
$Result = Get-NetboxVirtualMachineInterface -Name 'Ethernet0'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/virtualization/interfaces/?name=Ethernet0'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with a VM ID" {
|
||||
$Result = Get-NetboxVirtualMachineInterface -Virtual_Machine_Id 10
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/virtualization/interfaces/?virtual_machine_id=10'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with Enabled" {
|
||||
$Result = Get-NetboxVirtualMachineInterface -Enabled $true
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/virtualization/interfaces/?enabled=true'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "Get-NetboxVirtualMachineCluster" -Fixture {
|
||||
It "Should request the default number of clusters" {
|
||||
$Result = Get-NetboxVirtualizationCluster
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/virtualization/clusters/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with limit and offset" {
|
||||
$Result = Get-NetboxVirtualizationCluster -Limit 10 -Offset 12
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/virtualization/clusters/?offset=12&limit=10'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with a query" {
|
||||
$Result = Get-NetboxVirtualizationCluster -Query 'testcluster'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/virtualization/clusters/?q=testcluster'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with an escaped query" {
|
||||
$Result = Get-NetboxVirtualizationCluster -Query 'test cluster'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/virtualization/clusters/?q=test+cluster'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with a name" {
|
||||
$Result = Get-NetboxVirtualizationCluster -Name 'testcluster'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/virtualization/clusters/?name=testcluster'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with a single ID" {
|
||||
$Result = Get-NetboxVirtualizationCluster -Id 10
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/virtualization/clusters/10/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with multiple IDs" {
|
||||
$Result = Get-NetboxVirtualizationCluster -Id 10, 12, 15
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/virtualization/clusters/?id__in=10,12,15'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "Get-NetboxVirtualMachineClusterGroup" -Fixture {
|
||||
It "Should request the default number of cluster groups" {
|
||||
$Result = Get-NetboxVirtualizationClusterGroup
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/virtualization/cluster-groups/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with limit and offset" {
|
||||
$Result = Get-NetboxVirtualizationClusterGroup -Limit 10 -Offset 12
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/virtualization/cluster-groups/?offset=12&limit=10'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with a name" {
|
||||
$Result = Get-NetboxVirtualizationClusterGroup -Name 'testclustergroup'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/virtualization/cluster-groups/?name=testclustergroup'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should request with a slug" {
|
||||
$Result = Get-NetboxVirtualizationClusterGroup -Slug 'test-cluster-group'
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'GET'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/virtualization/cluster-groups/?slug=test-cluster-group'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "New-NetboxVirtualMachine" -Fixture {
|
||||
It "Should create a basic VM" {
|
||||
$Result = New-NetboxVirtualMachine -Name 'testvm' -Cluster 1
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
$Result.Method | Should -Be 'POST'
|
||||
|
|
@ -321,109 +321,109 @@ Describe -Name "Virtualization tests" -Tag 'Virtualization' -Fixture {
|
|||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Body | Should -Be '{"cluster":1,"name":"testvm","status":1}'
|
||||
}
|
||||
|
||||
|
||||
It "Should create a VM with CPUs, Memory, Disk, tenancy, and comments" {
|
||||
$Result = New-NetboxVirtualMachine -Name 'testvm' -Cluster 1 -Status Active -vCPUs 4 -Memory 4096 -Tenant 11 -Disk 50 -Comments "these are comments"
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'POST'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/virtualization/virtual-machines/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Body | Should -Be '{"tenant":11,"comments":"these are comments","disk":50,"memory":4096,"name":"testvm","cluster":1,"status":1,"vcpus":4}'
|
||||
}
|
||||
|
||||
|
||||
It "Should throw because of an invalid status" {
|
||||
{ New-NetboxVirtualMachine -Name 'testvm' -Status 1123 -Cluster 1 } | Should -Throw
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "Add-NetboxVirtualMachineInterface" -Fixture {
|
||||
It "Should add a basic interface" {
|
||||
$Result = Add-NetboxVirtualMachineInterface -Name 'Ethernet0' -Virtual_Machine 10
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'POST'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/virtualization/interfaces/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Body | Should -Be '{"virtual_machine":10,"name":"Ethernet0","enabled":true}'
|
||||
}
|
||||
|
||||
|
||||
It "Should add an interface with a MAC, MTU, and Description" {
|
||||
$Result = Add-NetboxVirtualMachineInterface -Name 'Ethernet0' -Virtual_Machine 10 -Mac_Address '11:22:33:44:55:66' -MTU 1500 -Description "Test description"
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'POST'
|
||||
$Result.Uri | Should -Be 'https://netbox.domain.com/api/virtualization/interfaces/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Body | Should -Be '{"mtu":1500,"description":"Test description","enabled":true,"virtual_machine":10,"name":"Ethernet0","mac_address":"11:22:33:44:55:66"}'
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Mock -CommandName "Get-NetboxVirtualMachine" -ModuleName NetboxPS -MockWith {
|
||||
return [pscustomobject]@{
|
||||
'Id' = $Id
|
||||
'Name' = $Name
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "Set-NetboxVirtualMachine" -Fixture {
|
||||
It "Should set a VM to a new name" {
|
||||
$Result = Set-NetboxVirtualMachine -Id 1234 -Name 'newtestname' -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Get-NetboxVirtualMachine' -Times 1 -Exactly -Scope 'It'
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'PATCH'
|
||||
$Result.URI | Should -Be 'https://netbox.domain.com/api/virtualization/virtual-machines/1234/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Body | Should -Be '{"name":"newtestname"}'
|
||||
}
|
||||
|
||||
|
||||
It "Should set a VM with a new name, cluster, platform, and status" {
|
||||
$Result = Set-NetboxVirtualMachine -Id 1234 -Name 'newtestname' -Cluster 10 -Platform 15 -Status 'Offline' -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Get-NetboxVirtualMachine' -Times 1 -Exactly -Scope 'It'
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'PATCH'
|
||||
$Result.URI | Should -Be 'https://netbox.domain.com/api/virtualization/virtual-machines/1234/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Body | Should -Be '{"cluster":10,"platform":15,"name":"newtestname","status":0}'
|
||||
}
|
||||
|
||||
|
||||
It "Should throw because of an invalid status" {
|
||||
{ Set-NetboxVirtualMachine -Id 1234 -Status 'Fake' -Force } | Should -Throw
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Get-NetboxVirtualMachine' -Times 0 -Exactly -Scope 'It'
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Mock -CommandName "Get-NetboxVirtualMachineInterface" -ModuleName NetboxPS -MockWith {
|
||||
return [pscustomobject]@{
|
||||
'Id' = $Id
|
||||
'Name' = $Name
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "Set-NetboxVirtualMachineInterface" -Fixture {
|
||||
It "Should set an interface to a new name" {
|
||||
$Result = Set-NetboxVirtualMachineInterface -Id 1234 -Name 'newtestname' -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName Get-NetboxVirtualMachineInterface -Times 1 -Scope 'It' -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'PATCH'
|
||||
$Result.URI | Should -Be 'https://netbox.domain.com/api/virtualization/interfaces/1234/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Body | Should -Be '{"name":"newtestname"}'
|
||||
}
|
||||
|
||||
|
||||
It "Should set an interface to a new name, MTU, MAC address and description" {
|
||||
$paramSetNetboxVirtualMachineInterface = @{
|
||||
Id = 1234
|
||||
|
|
@ -433,30 +433,30 @@ Describe -Name "Virtualization tests" -Tag 'Virtualization' -Fixture {
|
|||
Description = "Test description"
|
||||
Force = $true
|
||||
}
|
||||
|
||||
|
||||
$Result = Set-NetboxVirtualMachineInterface @paramSetNetboxVirtualMachineInterface
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName Get-NetboxVirtualMachineInterface -Times 1 -Scope 'It' -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'PATCH'
|
||||
$Result.URI | Should -Be 'https://netbox.domain.com/api/virtualization/interfaces/1234/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
$Result.Body | Should -Be '{"mac_address":"11:22:33:44:55:66","mtu":9000,"description":"Test description","name":"newtestname"}'
|
||||
}
|
||||
|
||||
|
||||
It "Should set multiple interfaces to a new name" {
|
||||
$Result = Set-NetboxVirtualMachineInterface -Id 1234, 4321 -Name 'newtestname' -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName Get-NetboxVirtualMachineInterface -Times 2 -Scope 'It' -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'PATCH', 'PATCH'
|
||||
$Result.URI | Should -Be 'https://netbox.domain.com/api/virtualization/interfaces/1234/', 'https://netbox.domain.com/api/virtualization/interfaces/4321/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 2
|
||||
$Result.Body | Should -Be '{"name":"newtestname"}', '{"name":"newtestname"}'
|
||||
}
|
||||
|
||||
|
||||
It "Should set multiple interfaces to a new name from the pipeline" {
|
||||
$Result = @(
|
||||
[pscustomobject]@{
|
||||
|
|
@ -466,51 +466,51 @@ Describe -Name "Virtualization tests" -Tag 'Virtualization' -Fixture {
|
|||
'Id' = 4321
|
||||
}
|
||||
) | Set-NetboxVirtualMachineInterface -Name 'newtestname' -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName Get-NetboxVirtualMachineInterface -Times 2 -Scope 'It' -Exactly
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'PATCH', 'PATCH'
|
||||
$Result.URI | Should -Be 'https://netbox.domain.com/api/virtualization/interfaces/4123/', 'https://netbox.domain.com/api/virtualization/interfaces/4321/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 2
|
||||
$Result.Body | Should -Be '{"name":"newtestname"}', '{"name":"newtestname"}'
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Context -Name "Remove-NetboxVirtualMachine" -Fixture {
|
||||
It "Should remove a single VM" {
|
||||
$Result = Remove-NetboxVirtualMachine -Id 4125 -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Get-NetboxVirtualMachine' -Times 1 -Exactly -Scope 'It'
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'DELETE'
|
||||
$Result.URI | Should -Be 'https://netbox.domain.com/api/virtualization/virtual-machines/4125/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should remove mulitple VMs" {
|
||||
$Result = Remove-NetboxVirtualMachine -Id 4125, 4132 -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Get-NetboxVirtualMachine' -Times 2 -Exactly -Scope 'It'
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'DELETE', 'DELETE'
|
||||
$Result.URI | Should -Be 'https://netbox.domain.com/api/virtualization/virtual-machines/4125/', 'https://netbox.domain.com/api/virtualization/virtual-machines/4132/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 2
|
||||
}
|
||||
|
||||
|
||||
It "Should remove a VM from the pipeline" {
|
||||
$Result = Get-NetboxVirtualMachine -Id 4125 | Remove-NetboxVirtualMachine -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Get-NetboxVirtualMachine' -Times 2 -Exactly -Scope 'It'
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'DELETE'
|
||||
$Result.URI | Should -Be 'https://netbox.domain.com/api/virtualization/virtual-machines/4125/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 1
|
||||
}
|
||||
|
||||
|
||||
It "Should remove multiple VMs from the pipeline" {
|
||||
$Result = @(
|
||||
[pscustomobject]@{
|
||||
|
|
@ -520,10 +520,10 @@ Describe -Name "Virtualization tests" -Tag 'Virtualization' -Fixture {
|
|||
'Id' = 4132
|
||||
}
|
||||
) | Remove-NetboxVirtualMachine -Force
|
||||
|
||||
|
||||
Assert-VerifiableMock
|
||||
Assert-MockCalled -CommandName 'Get-NetboxVirtualMachine' -Times 2 -Exactly -Scope 'It'
|
||||
|
||||
|
||||
$Result.Method | Should -Be 'DELETE', 'DELETE'
|
||||
$Result.URI | Should -Be 'https://netbox.domain.com/api/virtualization/virtual-machines/4125/', 'https://netbox.domain.com/api/virtualization/virtual-machines/4132/'
|
||||
$Result.Headers.Keys.Count | Should -BeExactly 2
|
||||
|
|
|
|||
25
deploy.ps1
25
deploy.ps1
|
|
@ -1,19 +1,32 @@
|
|||
<#
|
||||
.SYNOPSIS
|
||||
A brief description of the Invoke-deploy_ps1 file.
|
||||
Concatenate files into single PSM1 and PSD1 files
|
||||
|
||||
.DESCRIPTION
|
||||
A description of the file.
|
||||
Concatenate all ps1 files in the Functions directory, plus the root PSM1,
|
||||
into a single PSM1 file in the NetboxPS directory.
|
||||
|
||||
By default, this script will increment version by 0.0.1
|
||||
|
||||
.PARAMETER SkipVersion
|
||||
A description of the SkipVersion parameter.
|
||||
Do not increment the version.
|
||||
|
||||
.PARAMETER VersionIncrease
|
||||
A description of the VersionIncrease parameter.
|
||||
Increase the version by a user defined amount
|
||||
|
||||
.PARAMETER NewVersion
|
||||
A description of the NewVersion parameter.
|
||||
|
||||
Override the new version with this version
|
||||
|
||||
.EXAMPLE
|
||||
Use all defaults and concatenate all files
|
||||
|
||||
.\deploy.ps1
|
||||
|
||||
.EXAMPLE
|
||||
Increment the version by 0.2.0. Given version 1.2.0, the resulting version will be 1.4.0
|
||||
|
||||
.\deploy.ps1 -VersionIncrease 0.2.0
|
||||
|
||||
.NOTES
|
||||
===========================================================================
|
||||
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.174
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue