diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..7269292 --- /dev/null +++ b/.github/workflows/release.yml @@ -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 }}" diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..cc82cf9 --- /dev/null +++ b/.vscode/settings.json @@ -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, + } +} \ No newline at end of file diff --git a/Functions/Circuits/Circuits.ps1 b/Functions/Circuits/Circuits.ps1 deleted file mode 100644 index 967548f..0000000 --- a/Functions/Circuits/Circuits.ps1 +++ /dev/null @@ -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 -#> - - diff --git a/Functions/Circuits/Circuits/Get-NetboxCircuit.ps1 b/Functions/Circuits/Circuits/Get-NetboxCircuit.ps1 index 319ee48..34b2ced 100644 --- a/Functions/Circuits/Circuits/Get-NetboxCircuit.ps1 +++ b/Functions/Circuits/Circuits/Get-NetboxCircuit.ps1 @@ -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 - } } } \ No newline at end of file diff --git a/Functions/Circuits/Circuits/New-NetboxCircuit.ps1 b/Functions/Circuits/Circuits/New-NetboxCircuit.ps1 index aac3447..650a006 100644 --- a/Functions/Circuits/Circuits/New-NetboxCircuit.ps1 +++ b/Functions/Circuits/Circuits/New-NetboxCircuit.ps1 @@ -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 + } } } \ No newline at end of file diff --git a/Functions/Circuits/Providers/Get-NetboxCircuitProvider.ps1 b/Functions/Circuits/Providers/Get-NetboxCircuitProvider.ps1 index 07ad3ca..8e392e0 100644 --- a/Functions/Circuits/Providers/Get-NetboxCircuitProvider.ps1 +++ b/Functions/Circuits/Providers/Get-NetboxCircuitProvider.ps1 @@ -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 } } diff --git a/Functions/Circuits/Terminations/Get-NetboxCircuitTermination.ps1 b/Functions/Circuits/Terminations/Get-NetboxCircuitTermination.ps1 index 6e055fd..930c244 100644 --- a/Functions/Circuits/Terminations/Get-NetboxCircuitTermination.ps1 +++ b/Functions/Circuits/Terminations/Get-NetboxCircuitTermination.ps1 @@ -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 } } diff --git a/Functions/Circuits/Types/Get-NetboxCircuitType.ps1 b/Functions/Circuits/Types/Get-NetboxCircuitType.ps1 index bce6ad5..16cd88e 100644 --- a/Functions/Circuits/Types/Get-NetboxCircuitType.ps1 +++ b/Functions/Circuits/Types/Get-NetboxCircuitType.ps1 @@ -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 } } diff --git a/Functions/DCIM/Devices/Get-NetboxDCIMDevice.ps1 b/Functions/DCIM/Devices/Get-NetboxDCIMDevice.ps1 index a14c1cc..ff7237c 100644 --- a/Functions/DCIM/Devices/Get-NetboxDCIMDevice.ps1 +++ b/Functions/DCIM/Devices/Get-NetboxDCIMDevice.ps1 @@ -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 } \ No newline at end of file diff --git a/Functions/DCIM/Devices/Get-NetboxDCIMDeviceRole.ps1 b/Functions/DCIM/Devices/Get-NetboxDCIMDeviceRole.ps1 index 3ca2974..afcad80 100644 --- a/Functions/DCIM/Devices/Get-NetboxDCIMDeviceRole.ps1 +++ b/Functions/DCIM/Devices/Get-NetboxDCIMDeviceRole.ps1 @@ -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 } } diff --git a/Functions/DCIM/Devices/Get-NetboxDCIMDeviceType.ps1 b/Functions/DCIM/Devices/Get-NetboxDCIMDeviceType.ps1 index ffba0e2..5bd55b8 100644 --- a/Functions/DCIM/Devices/Get-NetboxDCIMDeviceType.ps1 +++ b/Functions/DCIM/Devices/Get-NetboxDCIMDeviceType.ps1 @@ -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 } \ No newline at end of file diff --git a/Functions/DCIM/Devices/New-NetboxDCIMDevice.ps1 b/Functions/DCIM/Devices/New-NetboxDCIMDevice.ps1 index 3a6751d..b99e237 100644 --- a/Functions/DCIM/Devices/New-NetboxDCIMDevice.ps1 +++ b/Functions/DCIM/Devices/New-NetboxDCIMDevice.ps1 @@ -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 + } } \ No newline at end of file diff --git a/Functions/DCIM/Devices/Remove-NetboxDCIMDevice.ps1 b/Functions/DCIM/Devices/Remove-NetboxDCIMDevice.ps1 index e654b9e..747f959 100644 --- a/Functions/DCIM/Devices/Remove-NetboxDCIMDevice.ps1 +++ b/Functions/DCIM/Devices/Remove-NetboxDCIMDevice.ps1 @@ -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 { - + } } \ No newline at end of file diff --git a/Functions/DCIM/Devices/Set-NetboxDCIMDevice.ps1 b/Functions/DCIM/Devices/Set-NetboxDCIMDevice.ps1 index 00b50fc..3bfac65 100644 --- a/Functions/DCIM/Devices/Set-NetboxDCIMDevice.ps1 +++ b/Functions/DCIM/Devices/Set-NetboxDCIMDevice.ps1 @@ -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 { - + } } diff --git a/Functions/DCIM/Get-NetboxDCIMPlatform.ps1 b/Functions/DCIM/Get-NetboxDCIMPlatform.ps1 index 4ae982f..d2bd323 100644 --- a/Functions/DCIM/Get-NetboxDCIMPlatform.ps1 +++ b/Functions/DCIM/Get-NetboxDCIMPlatform.ps1 @@ -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 } } diff --git a/Functions/DCIM/Interfaces/Add-NetboxDCIMInterface.ps1 b/Functions/DCIM/Interfaces/Add-NetboxDCIMInterface.ps1 index c792d35..75a5f29 100644 --- a/Functions/DCIM/Interfaces/Add-NetboxDCIMInterface.ps1 +++ b/Functions/DCIM/Interfaces/Add-NetboxDCIMInterface.ps1 @@ -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 } \ No newline at end of file diff --git a/Functions/DCIM/Interfaces/Add-NetboxDCIMInterfaceConnection.ps1 b/Functions/DCIM/Interfaces/Add-NetboxDCIMInterfaceConnection.ps1 index f98c2e3..d848b0c 100644 --- a/Functions/DCIM/Interfaces/Add-NetboxDCIMInterfaceConnection.ps1 +++ b/Functions/DCIM/Interfaces/Add-NetboxDCIMInterfaceConnection.ps1 @@ -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 } \ No newline at end of file diff --git a/Functions/DCIM/Interfaces/Get-NetboxDCIMInterface.ps1 b/Functions/DCIM/Interfaces/Get-NetboxDCIMInterface.ps1 index 671f013..f0c64f7 100644 --- a/Functions/DCIM/Interfaces/Get-NetboxDCIMInterface.ps1 +++ b/Functions/DCIM/Interfaces/Get-NetboxDCIMInterface.ps1 @@ -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 } \ No newline at end of file diff --git a/Functions/DCIM/Interfaces/Get-NetboxDCIMInterfaceConnection.ps1 b/Functions/DCIM/Interfaces/Get-NetboxDCIMInterfaceConnection.ps1 index f3fe97d..9c4ca22 100644 --- a/Functions/DCIM/Interfaces/Get-NetboxDCIMInterfaceConnection.ps1 +++ b/Functions/DCIM/Interfaces/Get-NetboxDCIMInterfaceConnection.ps1 @@ -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 } \ No newline at end of file diff --git a/Functions/DCIM/Interfaces/Remove-NetboxDCIMInterface.ps1 b/Functions/DCIM/Interfaces/Remove-NetboxDCIMInterface.ps1 index 1996a1c..2e73c2b 100644 --- a/Functions/DCIM/Interfaces/Remove-NetboxDCIMInterface.ps1 +++ b/Functions/DCIM/Interfaces/Remove-NetboxDCIMInterface.ps1 @@ -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 { - + } } \ No newline at end of file diff --git a/Functions/DCIM/Interfaces/Remove-NetboxDCIMInterfaceConnection.ps1 b/Functions/DCIM/Interfaces/Remove-NetboxDCIMInterfaceConnection.ps1 index 52e13dc..d7dc205 100644 --- a/Functions/DCIM/Interfaces/Remove-NetboxDCIMInterfaceConnection.ps1 +++ b/Functions/DCIM/Interfaces/Remove-NetboxDCIMInterfaceConnection.ps1 @@ -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 { - + } } \ No newline at end of file diff --git a/Functions/DCIM/Interfaces/Set-NetboxDCIMInterface.ps1 b/Functions/DCIM/Interfaces/Set-NetboxDCIMInterface.ps1 index 431065a..d08ecd6 100644 --- a/Functions/DCIM/Interfaces/Set-NetboxDCIMInterface.ps1 +++ b/Functions/DCIM/Interfaces/Set-NetboxDCIMInterface.ps1 @@ -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 { - + } } \ No newline at end of file diff --git a/Functions/DCIM/Interfaces/Set-NetboxDCIMInterfaceConnection.ps1 b/Functions/DCIM/Interfaces/Set-NetboxDCIMInterfaceConnection.ps1 index 0836bfc..abe84aa 100644 --- a/Functions/DCIM/Interfaces/Set-NetboxDCIMInterfaceConnection.ps1 +++ b/Functions/DCIM/Interfaces/Set-NetboxDCIMInterfaceConnection.ps1 @@ -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 { - + } } \ No newline at end of file diff --git a/Functions/DCIM/Sites/Get-NetboxDCIMSite.ps1 b/Functions/DCIM/Sites/Get-NetboxDCIMSite.ps1 index b7e13a4..90c6e2a 100644 --- a/Functions/DCIM/Sites/Get-NetboxDCIMSite.ps1 +++ b/Functions/DCIM/Sites/Get-NetboxDCIMSite.ps1 @@ -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 - } } } diff --git a/Functions/Helpers/BuildNewURI.ps1 b/Functions/Helpers/BuildNewURI.ps1 index 842b25b..700f339 100644 --- a/Functions/Helpers/BuildNewURI.ps1 +++ b/Functions/Helpers/BuildNewURI.ps1 @@ -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 diff --git a/Functions/Helpers/BuildURIComponents.ps1 b/Functions/Helpers/BuildURIComponents.ps1 index 495f3f9..d9f60a8 100644 --- a/Functions/Helpers/BuildURIComponents.ps1 +++ b/Functions/Helpers/BuildURIComponents.ps1 @@ -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 diff --git a/Functions/Helpers/CheckNetboxIsConnected.ps1 b/Functions/Helpers/CheckNetboxIsConnected.ps1 index 045fe37..aca5057 100644 --- a/Functions/Helpers/CheckNetboxIsConnected.ps1 +++ b/Functions/Helpers/CheckNetboxIsConnected.ps1 @@ -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'" diff --git a/Functions/Helpers/CreateEnum.ps1 b/Functions/Helpers/CreateEnum.ps1 index 7903899..89fe25a 100644 --- a/Functions/Helpers/CreateEnum.ps1 +++ b/Functions/Helpers/CreateEnum.ps1 @@ -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) { diff --git a/Functions/Helpers/Get-ModelDefinition.ps1 b/Functions/Helpers/Get-ModelDefinition.ps1 index bf389fa..c8969c9 100644 --- a/Functions/Helpers/Get-ModelDefinition.ps1 +++ b/Functions/Helpers/Get-ModelDefinition.ps1 @@ -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 } } - + } diff --git a/Functions/Helpers/GetNetboxAPIErrorBody.ps1 b/Functions/Helpers/GetNetboxAPIErrorBody.ps1 index 6dca60b..96bd3fe 100644 --- a/Functions/Helpers/GetNetboxAPIErrorBody.ps1 +++ b/Functions/Helpers/GetNetboxAPIErrorBody.ps1 @@ -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() diff --git a/Functions/Helpers/ThrowNetboxRESTError.ps1 b/Functions/Helpers/ThrowNetboxRESTError.ps1 index 69d4cfd..078de90 100644 --- a/Functions/Helpers/ThrowNetboxRESTError.ps1 +++ b/Functions/Helpers/ThrowNetboxRESTError.ps1 @@ -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 } \ No newline at end of file diff --git a/Functions/IPAM/Address/Get-NetboxIPAMAvailableIP.ps1 b/Functions/IPAM/Address/Get-NetboxIPAMAvailableIP.ps1 index 4d77712..e026cb8 100644 --- a/Functions/IPAM/Address/Get-NetboxIPAMAvailableIP.ps1 +++ b/Functions/IPAM/Address/Get-NetboxIPAMAvailableIP.ps1 @@ -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. diff --git a/Functions/IPAM/Address/New-NetboxIPAMAddress.ps1 b/Functions/IPAM/Address/New-NetboxIPAMAddress.ps1 index 736ef99..8650d9a 100644 --- a/Functions/IPAM/Address/New-NetboxIPAMAddress.ps1 +++ b/Functions/IPAM/Address/New-NetboxIPAMAddress.ps1 @@ -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 } } diff --git a/Functions/IPAM/Aggregate/Get-NetboxIPAMAggregate.ps1 b/Functions/IPAM/Aggregate/Get-NetboxIPAMAggregate.ps1 index a696bc6..87e82da 100644 --- a/Functions/IPAM/Aggregate/Get-NetboxIPAMAggregate.ps1 +++ b/Functions/IPAM/Aggregate/Get-NetboxIPAMAggregate.ps1 @@ -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 } } diff --git a/Functions/IPAM/Prefix/Get-NetboxIPAMPrefix.ps1 b/Functions/IPAM/Prefix/Get-NetboxIPAMPrefix.ps1 index a554fb6..11a5fd0 100644 --- a/Functions/IPAM/Prefix/Get-NetboxIPAMPrefix.ps1 +++ b/Functions/IPAM/Prefix/Get-NetboxIPAMPrefix.ps1 @@ -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 } } diff --git a/Functions/IPAM/Prefix/New-NetboxIPAMPrefix.ps1 b/Functions/IPAM/Prefix/New-NetboxIPAMPrefix.ps1 index c9c7577..ea728b0 100644 --- a/Functions/IPAM/Prefix/New-NetboxIPAMPrefix.ps1 +++ b/Functions/IPAM/Prefix/New-NetboxIPAMPrefix.ps1 @@ -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 + } } \ No newline at end of file diff --git a/Functions/IPAM/Prefix/Set-NetboxIPAMPrefix.ps1 b/Functions/IPAM/Prefix/Set-NetboxIPAMPrefix.ps1 index 0670ad7..8a6b384 100644 --- a/Functions/IPAM/Prefix/Set-NetboxIPAMPrefix.ps1 +++ b/Functions/IPAM/Prefix/Set-NetboxIPAMPrefix.ps1 @@ -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 } } diff --git a/Functions/IPAM/Role/Get-NetboxIPAMRole.ps1 b/Functions/IPAM/Role/Get-NetboxIPAMRole.ps1 index e7066c0..13a0861 100644 --- a/Functions/IPAM/Role/Get-NetboxIPAMRole.ps1 +++ b/Functions/IPAM/Role/Get-NetboxIPAMRole.ps1 @@ -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 } } diff --git a/Functions/IPAM/VLAN/Get-NetboxIPAMVLAN.ps1 b/Functions/IPAM/VLAN/Get-NetboxIPAMVLAN.ps1 index 050d5bc..fa78c1f 100644 --- a/Functions/IPAM/VLAN/Get-NetboxIPAMVLAN.ps1 +++ b/Functions/IPAM/VLAN/Get-NetboxIPAMVLAN.ps1 @@ -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 } } diff --git a/Functions/IPAM/VLAN/New-NetboxIPAMVLAN.ps1 b/Functions/IPAM/VLAN/New-NetboxIPAMVLAN.ps1 index c846296..0af0499 100644 --- a/Functions/IPAM/VLAN/New-NetboxIPAMVLAN.ps1 +++ b/Functions/IPAM/VLAN/New-NetboxIPAMVLAN.ps1 @@ -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 + } } \ No newline at end of file diff --git a/Functions/Setup/Get-NetboxHostPort.ps1 b/Functions/Setup/Get-NetboxHostPort.ps1 index 691a7a3..8b56626 100644 --- a/Functions/Setup/Get-NetboxHostPort.ps1 +++ b/Functions/Setup/Get-NetboxHostPort.ps1 @@ -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 } \ No newline at end of file diff --git a/Functions/Setup/Get-NetboxHostScheme.ps1 b/Functions/Setup/Get-NetboxHostScheme.ps1 index ac396e0..ca37011 100644 --- a/Functions/Setup/Get-NetboxHostScheme.ps1 +++ b/Functions/Setup/Get-NetboxHostScheme.ps1 @@ -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 } \ No newline at end of file diff --git a/Functions/Setup/Set-NetboxHostPort.ps1 b/Functions/Setup/Set-NetboxHostPort.ps1 index 5d2c0d6..3a88b06 100644 --- a/Functions/Setup/Set-NetboxHostPort.ps1 +++ b/Functions/Setup/Set-NetboxHostPort.ps1 @@ -7,7 +7,7 @@ [Parameter(Mandatory = $true)] [uint16]$Port ) - + if ($PSCmdlet.ShouldProcess('Netbox Port', 'Set')) { $script:NetboxConfig.HostPort = $Port $script:NetboxConfig.HostPort diff --git a/Functions/Setup/Set-NetboxHostScheme.ps1 b/Functions/Setup/Set-NetboxHostScheme.ps1 index f5a59c4..57b4112 100644 --- a/Functions/Setup/Set-NetboxHostScheme.ps1 +++ b/Functions/Setup/Set-NetboxHostScheme.ps1 @@ -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 } diff --git a/Functions/Tenancy/Get-NetboxTenant.ps1 b/Functions/Tenancy/Get-NetboxTenant.ps1 index 85d110c..1e0732a 100644 --- a/Functions/Tenancy/Get-NetboxTenant.ps1 +++ b/Functions/Tenancy/Get-NetboxTenant.ps1 @@ -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 } } diff --git a/Functions/Tenancy/Tenancy.ps1 b/Functions/Tenancy/Tenancy.ps1 deleted file mode 100644 index 1c8de41..0000000 --- a/Functions/Tenancy/Tenancy.ps1 +++ /dev/null @@ -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 \ No newline at end of file diff --git a/Functions/Virtualization/VirtualMachine/Get-NetboxVirtualMachine.ps1 b/Functions/Virtualization/VirtualMachine/Get-NetboxVirtualMachine.ps1 index c84c60a..34884e2 100644 --- a/Functions/Virtualization/VirtualMachine/Get-NetboxVirtualMachine.ps1 +++ b/Functions/Virtualization/VirtualMachine/Get-NetboxVirtualMachine.ps1 @@ -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 } \ No newline at end of file diff --git a/Functions/Virtualization/VirtualMachine/New-NetboxVirtualMachine.ps1 b/Functions/Virtualization/VirtualMachine/New-NetboxVirtualMachine.ps1 index 6798c36..dbab718 100644 --- a/Functions/Virtualization/VirtualMachine/New-NetboxVirtualMachine.ps1 +++ b/Functions/Virtualization/VirtualMachine/New-NetboxVirtualMachine.ps1 @@ -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 + } } diff --git a/Functions/Virtualization/VirtualMachine/Remove-NetboxVirtualMachine.ps1 b/Functions/Virtualization/VirtualMachine/Remove-NetboxVirtualMachine.ps1 index 4e599a3..b2cb192 100644 --- a/Functions/Virtualization/VirtualMachine/Remove-NetboxVirtualMachine.ps1 +++ b/Functions/Virtualization/VirtualMachine/Remove-NetboxVirtualMachine.ps1 @@ -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 { - + } } \ No newline at end of file diff --git a/Functions/Virtualization/VirtualMachine/Set-NetboxVirtualMachine.ps1 b/Functions/Virtualization/VirtualMachine/Set-NetboxVirtualMachine.ps1 index abfaac5..bba99e7 100644 --- a/Functions/Virtualization/VirtualMachine/Set-NetboxVirtualMachine.ps1 +++ b/Functions/Virtualization/VirtualMachine/Set-NetboxVirtualMachine.ps1 @@ -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 + } } } \ No newline at end of file diff --git a/Functions/Virtualization/VirtualMachineInterface/Add-NetboxVirtualMachineInterface.ps1 b/Functions/Virtualization/VirtualMachineInterface/Add-NetboxVirtualMachineInterface.ps1 index f9b0b56..e197244 100644 --- a/Functions/Virtualization/VirtualMachineInterface/Add-NetboxVirtualMachineInterface.ps1 +++ b/Functions/Virtualization/VirtualMachineInterface/Add-NetboxVirtualMachineInterface.ps1 @@ -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 } \ No newline at end of file diff --git a/Functions/Virtualization/VirtualMachineInterface/Get-NetboxVirtualMachineInterface.ps1 b/Functions/Virtualization/VirtualMachineInterface/Get-NetboxVirtualMachineInterface.ps1 index 0b0c3c4..1b85127 100644 --- a/Functions/Virtualization/VirtualMachineInterface/Get-NetboxVirtualMachineInterface.ps1 +++ b/Functions/Virtualization/VirtualMachineInterface/Get-NetboxVirtualMachineInterface.ps1 @@ -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 + } } \ No newline at end of file diff --git a/Functions/Virtualization/VirtualMachineInterface/Set-NetboxVirtualMachineInterface.ps1 b/Functions/Virtualization/VirtualMachineInterface/Set-NetboxVirtualMachineInterface.ps1 index ab2ef49..db16b46 100644 --- a/Functions/Virtualization/VirtualMachineInterface/Set-NetboxVirtualMachineInterface.ps1 +++ b/Functions/Virtualization/VirtualMachineInterface/Set-NetboxVirtualMachineInterface.ps1 @@ -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 { - + } } \ No newline at end of file diff --git a/Functions/Virtualization/VirtualizationCluster/Get-NetboxVirtualizationCluster.ps1 b/Functions/Virtualization/VirtualizationCluster/Get-NetboxVirtualizationCluster.ps1 index bb373a6..68e7f10 100644 --- a/Functions/Virtualization/VirtualizationCluster/Get-NetboxVirtualizationCluster.ps1 +++ b/Functions/Virtualization/VirtualizationCluster/Get-NetboxVirtualizationCluster.ps1 @@ -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 } \ No newline at end of file diff --git a/Functions/Virtualization/VirtualizationCluster/Get-NetboxVirtualizationClusterGroup.ps1 b/Functions/Virtualization/VirtualizationCluster/Get-NetboxVirtualizationClusterGroup.ps1 index 467e716..0269f5a 100644 --- a/Functions/Virtualization/VirtualizationCluster/Get-NetboxVirtualizationClusterGroup.ps1 +++ b/Functions/Virtualization/VirtualizationCluster/Get-NetboxVirtualizationClusterGroup.ps1 @@ -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 } \ No newline at end of file diff --git a/NetboxPS.psd1 b/NetboxPS.psd1 index ead3b18..3cb6799 100644 --- a/NetboxPS.psd1 +++ b/NetboxPS.psd1 @@ -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 = @() diff --git a/NetboxPS.psm1 b/NetboxPS.psm1 index cc051fc..6d66fc6 100644 --- a/NetboxPS.psm1 +++ b/NetboxPS.psm1 @@ -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)) diff --git a/NetboxPS/NetboxPS.psd1 b/NetboxPS/NetboxPS.psd1 index ead3b18..3cb6799 100644 --- a/NetboxPS/NetboxPS.psd1 +++ b/NetboxPS/NetboxPS.psd1 @@ -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 = @() diff --git a/NetboxPS/NetboxPS.psm1 b/NetboxPS/NetboxPS.psm1 index 61fa4b8..d429bbb 100644 --- a/NetboxPS/NetboxPS.psm1 +++ b/NetboxPS/NetboxPS.psm1 @@ -2,7 +2,7 @@ #region File Add-NetboxDCIMInterface.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -23,67 +23,67 @@ 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 } @@ -91,7 +91,7 @@ function Add-NetboxDCIMInterface { #region File Add-NetboxDCIMInterfaceConnection.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -106,56 +106,56 @@ function Add-NetboxDCIMInterface { 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 } @@ -163,7 +163,7 @@ function Add-NetboxDCIMInterfaceConnection { #region File Add-NetboxVirtualMachineInterface.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -183,29 +183,29 @@ 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 } @@ -213,7 +213,7 @@ function Add-NetboxVirtualMachineInterface { #region File BuildNewURI.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -231,77 +231,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 @@ -311,7 +311,7 @@ function BuildNewURI { #region File BuildURIComponents.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -332,30 +332,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 @@ -366,26 +366,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] @@ -393,7 +393,7 @@ function BuildURIComponents { } } } - + return @{ 'Segments' = [System.Collections.ArrayList]$URISegments 'Parameters' = $URIParameters @@ -404,7 +404,7 @@ function BuildURIComponents { #region File CheckNetboxIsConnected.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -421,32 +421,13 @@ function BuildURIComponents { 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'" } } -#endregion - -#region File Circuits.ps1 - -<# - .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 -#> - - - #endregion #region File Clear-NetboxCredential.ps1 @@ -631,7 +612,7 @@ function Connect-NetboxAPI { #region File CreateEnum.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -651,13 +632,13 @@ function CreateEnum { ( [Parameter(Mandatory = $true)] [string]$EnumName, - + [Parameter(Mandatory = $true)] [pscustomobject]$Values, - + [switch]$PassThru ) - + $definition = @" public enum $EnumName {`n$(foreach ($value in $values) { @@ -677,7 +658,7 @@ public enum $EnumName #region File Get-ModelDefinition.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.181 @@ -699,47 +680,47 @@ 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 } } - + } #endregion @@ -780,7 +761,7 @@ function Get-NetboxAPIDefinition { #region File GetNetboxAPIErrorBody.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -800,10 +781,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() @@ -814,7 +795,7 @@ function GetNetboxAPIErrorBody { #region File Get-NetboxCircuit.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -829,120 +810,122 @@ function GetNetboxAPIErrorBody { 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 - } } } @@ -950,7 +933,7 @@ function Get-NetboxCircuit { #region File Get-NetboxCircuitProvider.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.181 @@ -972,52 +955,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 } } @@ -1027,7 +1010,7 @@ function Get-NetboxCircuitProvider { #region File Get-NetboxCircuitTermination.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.181 @@ -1049,58 +1032,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 } } @@ -1111,7 +1094,7 @@ function Get-NetboxCircuitTermination { #region File Get-NetboxCircuitType.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.181 @@ -1132,45 +1115,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 } } @@ -1204,7 +1187,7 @@ function Get-NetboxCredential { #region File Get-NetboxDCIMDevice.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -1224,91 +1207,93 @@ 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 } #endregion #region File Get-NetboxDCIMDeviceRole.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -1327,45 +1312,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 } } @@ -1375,7 +1360,7 @@ function Get-NetboxDCIMDeviceRole { #region File Get-NetboxDCIMDeviceType.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -1395,45 +1380,45 @@ 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 } @@ -1441,7 +1426,7 @@ function Get-NetboxDCIMDeviceType { #region File Get-NetboxDCIMInterface.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -1461,53 +1446,55 @@ 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 } #endregion #region File Get-NetboxDCIMInterfaceConnection.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -1527,30 +1514,30 @@ 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 } @@ -1558,7 +1545,7 @@ function Get-NetboxDCIMInterfaceConnection { #region File Get-NetboxDCIMPlatform.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -1578,45 +1565,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 } } @@ -1626,7 +1613,7 @@ function Get-NetboxDCIMPlatform { #region File Get-NetboxDCIMSite.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.181 @@ -1648,89 +1635,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 - } } } @@ -1758,12 +1747,12 @@ function Get-NetboxHostname { 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 } @@ -1774,12 +1763,12 @@ function Get-NetboxHostPort { 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 } @@ -1901,7 +1890,7 @@ function Get-NetboxIPAMAddress { #region File Get-NetboxIPAMAggregate.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -1921,61 +1910,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 } } @@ -2021,7 +2010,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. @@ -2056,7 +2052,7 @@ function Get-NetboxIPAMAvailableIP { #region File Get-NetboxIPAMPrefix.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -2074,189 +2070,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 } } @@ -2271,93 +2267,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 } } @@ -2367,7 +2363,7 @@ function Get-NetboxIPAMRole { #region File Get-NetboxIPAMVLAN.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -2389,89 +2385,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 } } @@ -2485,7 +2481,7 @@ function Get-NetboxIPAMVLAN { #region File Get-NetboxTenant.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -2503,105 +2499,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 } } @@ -2649,7 +2645,7 @@ function Get-NetboxVersion { #region File Get-NetboxVirtualizationCluster.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -2667,88 +2663,88 @@ 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 } @@ -2756,7 +2752,7 @@ function Get-NetboxVirtualizationCluster { #region File Get-NetboxVirtualizationClusterGroup.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -2775,28 +2771,28 @@ 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 } @@ -2804,7 +2800,7 @@ function Get-NetboxVirtualizationClusterGroup { #region File Get-NetboxVirtualMachine.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -2819,152 +2815,154 @@ function Get-NetboxVirtualizationClusterGroup { 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 } #endregion #region File Get-NetboxVirtualMachineInterface.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -2979,84 +2977,86 @@ function Get-NetboxVirtualMachine { 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 + } } #endregion @@ -3175,7 +3175,7 @@ function InvokeNetboxRequest { #region File New-NetboxCircuit.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.181 @@ -3192,54 +3192,56 @@ function InvokeNetboxRequest { 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 + } } } @@ -3247,7 +3249,7 @@ function New-NetboxCircuit { #region File New-NetboxDCIMDevice.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -3262,80 +3264,83 @@ function New-NetboxCircuit { 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 + } } #endregion @@ -3343,16 +3348,16 @@ function New-NetboxDCIMDevice { #region File New-NetboxIPAMAddress.ps1 <# - .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. #> @@ -3394,14 +3399,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. @@ -3434,7 +3444,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 ) @@ -3443,22 +3456,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 } } @@ -3473,7 +3475,7 @@ function New-NetboxIPAMAddress { #region File New-NetboxIPAMPrefix.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -3488,49 +3490,53 @@ function New-NetboxIPAMAddress { 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 + } } #endregion @@ -3538,90 +3544,93 @@ function New-NetboxIPAMPrefix { #region File New-NetboxIPAMVLAN.ps1 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 + } } #endregion #region File New-NetboxVirtualMachine.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -3636,55 +3645,58 @@ function New-NetboxIPAMVLAN { 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 + } } @@ -3695,7 +3707,7 @@ function New-NetboxVirtualMachine { #region File Remove-NetboxDCIMDevice.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -3713,23 +3725,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 @@ -3737,30 +3749,30 @@ 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 { - + } } @@ -3768,7 +3780,7 @@ function Remove-NetboxDCIMDevice { #region File Remove-NetboxDCIMInterface.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -3786,23 +3798,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 @@ -3810,30 +3822,30 @@ 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 { - + } } @@ -3841,7 +3853,7 @@ function Remove-NetboxDCIMInterface { #region File Remove-NetboxDCIMInterfaceConnection.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -3864,32 +3876,32 @@ 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 { - + } } @@ -3961,7 +3973,7 @@ function Remove-NetboxIPAMAddress { #region File Remove-NetboxVirtualMachine.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -3979,23 +3991,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 @@ -4003,30 +4015,30 @@ 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 { - + } } @@ -4084,7 +4096,7 @@ function Set-NetboxCredential { #region File Set-NetboxDCIMDevice.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -4105,78 +4117,78 @@ 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 { - + } } @@ -4184,7 +4196,7 @@ function Set-NetboxDCIMDevice { #region File Set-NetboxDCIMInterface.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -4199,87 +4211,90 @@ function Set-NetboxDCIMDevice { 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 { - + } } @@ -4287,7 +4302,7 @@ function Set-NetboxDCIMInterface { #region File Set-NetboxDCIMInterfaceConnection.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -4305,32 +4320,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 @@ -4338,45 +4353,45 @@ 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 { - + } } @@ -4413,7 +4428,7 @@ function Set-NetboxHostPort { [Parameter(Mandatory = $true)] [uint16]$Port ) - + if ($PSCmdlet.ShouldProcess('Netbox Port', 'Set')) { $script:NetboxConfig.HostPort = $Port $script:NetboxConfig.HostPort @@ -4434,12 +4449,12 @@ function Set-NetboxHostScheme { [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 } @@ -4569,7 +4584,7 @@ function Set-NetboxIPAMAddress { #region File Set-NetboxIPAMPrefix.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2021 v5.8.186 @@ -4591,39 +4606,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)]" @@ -4632,22 +4647,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 } } @@ -4712,7 +4727,7 @@ Function Set-NetboxUntrustedSSL { #region File Set-NetboxVirtualMachine.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -4728,60 +4743,62 @@ Function Set-NetboxUntrustedSSL { 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 + } } } @@ -4789,7 +4806,7 @@ function Set-NetboxVirtualMachine { #region File Set-NetboxVirtualMachineInterface.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -4812,46 +4829,46 @@ 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 { - + } } @@ -4882,50 +4899,9 @@ function SetupNetboxConfigVariable { #endregion -#region File Tenancy.ps1 - -<# - .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 - -#endregion - #region File ThrowNetboxRESTError.ps1 -<# +<# .NOTES =========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172 @@ -4941,12 +4917,12 @@ function SetupNetboxConfigVariable { function ThrowNetboxRESTError { $uriSegments = [System.Collections.ArrayList]::new(@('fake', 'url')) - + $URIParameters = @{ } - + $uri = BuildNewURI -Segments $uriSegments -Parameters $URIParameters - + InvokeNetboxRequest -URI $uri -Raw } @@ -4979,7 +4955,7 @@ function VerifyAPIConnectivity { 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)) diff --git a/README.md b/README.md index a2e8ee6..5763fc1 100644 --- a/README.md +++ b/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` \ No newline at end of file +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. \ No newline at end of file diff --git a/Tests/DCIM.Devices.Tests.ps1 b/Tests/DCIM.Devices.Tests.ps1 index 8a9e22f..5af9b8e 100644 --- a/Tests/DCIM.Devices.Tests.ps1 +++ b/Tests/DCIM.Devices.Tests.ps1 @@ -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 diff --git a/Tests/DCIM.Interfaces.Tests.ps1 b/Tests/DCIM.Interfaces.Tests.ps1 index b903e08..5499ce7 100644 --- a/Tests/DCIM.Interfaces.Tests.ps1 +++ b/Tests/DCIM.Interfaces.Tests.ps1 @@ -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 diff --git a/Tests/DCIM.Platforms.Tests.ps1 b/Tests/DCIM.Platforms.Tests.ps1 index a909bc6..7d2853a 100644 --- a/Tests/DCIM.Platforms.Tests.ps1 +++ b/Tests/DCIM.Platforms.Tests.ps1 @@ -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 diff --git a/Tests/Helpers.Tests.ps1 b/Tests/Helpers.Tests.ps1 index 26ea592..594209d 100644 --- a/Tests/Helpers.Tests.ps1 +++ b/Tests/Helpers.Tests.ps1 @@ -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' diff --git a/Tests/IPAM.Tests.ps1 b/Tests/IPAM.Tests.ps1 index 73fa4f4..6b214e9 100644 --- a/Tests/IPAM.Tests.ps1 +++ b/Tests/IPAM.Tests.ps1 @@ -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 diff --git a/Tests/Setup.Tests.ps1 b/Tests/Setup.Tests.ps1 index 664f3aa..dda6465 100644 --- a/Tests/Setup.Tests.ps1 +++ b/Tests/Setup.Tests.ps1 @@ -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 } #> diff --git a/Tests/Virtualization.Tests.ps1 b/Tests/Virtualization.Tests.ps1 index 327060a..0eb2682 100644 --- a/Tests/Virtualization.Tests.ps1 +++ b/Tests/Virtualization.Tests.ps1 @@ -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 diff --git a/deploy.ps1 b/deploy.ps1 index 644d0f7..5a0a379 100644 --- a/deploy.ps1 +++ b/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