mirror of
https://github.com/benclaussen/NetboxPS.git
synced 2025-12-13 01:42:28 +00:00
3629 lines
No EOL
99 KiB
PowerShell
3629 lines
No EOL
99 KiB
PowerShell
<#
|
|
.NOTES
|
|
--------------------------------------------------------------------------------
|
|
Code generated by: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Generated on: 3/23/2020 12:17
|
|
Generated by: Claussen
|
|
Organization: NEOnet
|
|
--------------------------------------------------------------------------------
|
|
.DESCRIPTION
|
|
Script generated by PowerShell Studio 2020
|
|
#>
|
|
|
|
|
|
#region Invoke-Helpers_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2018 v5.5.148
|
|
Created on: 2/28/2018 3:33 PM
|
|
Created by: Ben Claussen
|
|
Organization: NEOnet
|
|
Filename: Helpers.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
These function are internal functions and generally are not
|
|
exposed to the end user
|
|
#>
|
|
|
|
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'"
|
|
}
|
|
}
|
|
|
|
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]$Hostname,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[string[]]$Segments,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[hashtable]$Parameters,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[boolean]$HTTPS = $true,
|
|
|
|
[ValidateRange(1, 65535)]
|
|
[uint16]$Port = 443,
|
|
|
|
[switch]$SkipConnectedCheck
|
|
)
|
|
|
|
Write-Verbose "Building URI"
|
|
|
|
if (-not $SkipConnectedCheck) {
|
|
# There is no point in continuing if we have not successfully connected to an API
|
|
$null = CheckNetboxIsConnected
|
|
}
|
|
|
|
if (-not $Hostname) {
|
|
$Hostname = Get-NetboxHostname
|
|
}
|
|
|
|
if ($HTTPS) {
|
|
Write-Verbose " Setting scheme to HTTPS"
|
|
$Scheme = 'https'
|
|
} else {
|
|
Write-Warning " Connecting via non-secure HTTP is not-recommended"
|
|
|
|
Write-Verbose " Setting scheme to HTTP"
|
|
$Scheme = 'http'
|
|
|
|
if (-not $PSBoundParameters.ContainsKey('Port')) {
|
|
# Set the port to 80 if the user did not supply it
|
|
Write-Verbose " Setting port to 80 as default because it was not supplied by the user"
|
|
$Port = 80
|
|
}
|
|
}
|
|
|
|
# Begin a URI builder with HTTP/HTTPS and the provided hostname
|
|
$uriBuilder = [System.UriBuilder]::new($Scheme, $Hostname, $Port)
|
|
|
|
# Generate the path by trimming excess slashes and whitespace from the $segments[] and joining together
|
|
$uriBuilder.Path = "api/{0}/" -f ($Segments.ForEach({$_.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
|
|
}
|
|
|
|
function BuildURIComponents {
|
|
[CmdletBinding()]
|
|
[OutputType([hashtable])]
|
|
param
|
|
(
|
|
[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
|
|
if (@($ParametersDictionary[$CmdletParameterName]).Count -gt 1) {
|
|
Write-Verbose " Joining IDs for parameter"
|
|
$URIParameters['id__in'] = $ParametersDictionary[$CmdletParameterName] -join ','
|
|
} else {
|
|
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]
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
return @{
|
|
'Segments' = [System.Collections.ArrayList]$URISegments
|
|
'Parameters' = $URIParameters
|
|
}
|
|
}
|
|
|
|
function GetChoiceValidValues {
|
|
[CmdletBinding()]
|
|
[OutputType([System.Collections.ArrayList])]
|
|
param
|
|
(
|
|
[Parameter(Mandatory = $true)]
|
|
[string]$MajorObject,
|
|
|
|
[Parameter(Mandatory = $true)]
|
|
[object]$Choice
|
|
)
|
|
|
|
$ValidValues = New-Object System.Collections.ArrayList
|
|
|
|
if (-not $script:NetboxConfig.Choices.$MajorObject.$Choice) {
|
|
throw "Missing choices for $Choice"
|
|
}
|
|
|
|
[void]$ValidValues.AddRange($script:NetboxConfig.Choices.$MajorObject.$Choice.value)
|
|
[void]$ValidValues.AddRange($script:NetboxConfig.Choices.$MajorObject.$Choice.label)
|
|
|
|
if ($ValidValues.Count -eq 0) {
|
|
throw "Missing valid values for $MajorObject.$Choice"
|
|
}
|
|
|
|
return [System.Collections.ArrayList]$ValidValues
|
|
}
|
|
|
|
function ValidateChoice {
|
|
[CmdletBinding()]
|
|
[OutputType([uint16], [string], [bool])]
|
|
param
|
|
(
|
|
[Parameter(Mandatory = $true)]
|
|
[ValidateSet('Circuits', 'DCIM', 'Extras', 'IPAM', 'Virtualization', IgnoreCase = $true)]
|
|
[string]$MajorObject,
|
|
|
|
[Parameter(Mandatory = $true)]
|
|
[string]$ChoiceName,
|
|
|
|
[Parameter(Mandatory = $true)]
|
|
[object]$ProvidedValue
|
|
)
|
|
|
|
$ValidValues = GetChoiceValidValues -MajorObject $MajorObject -Choice $ChoiceName
|
|
|
|
Write-Verbose "Validating $ChoiceName"
|
|
Write-Verbose "Checking '$ProvidedValue' against [$($ValidValues -join ', ')]"
|
|
|
|
# Coercing everything to strings for matching...
|
|
# some values are integers, some are strings, some are booleans
|
|
# Join the valid values with a pipe as a delimeter, because some values have spaces
|
|
if (([string]($ValidValues -join '|') -split '\|') -inotcontains [string]$ProvidedValue) {
|
|
throw "Invalid value '$ProvidedValue' for '$ChoiceName'. Must be one of: $($ValidValues -join ', ')"
|
|
}
|
|
|
|
switch -wildcard ("$MajorObject/$ChoiceName") {
|
|
"Circuits" {
|
|
# This has things that are not integers
|
|
}
|
|
|
|
"DCIM/*connection_status" {
|
|
# This has true/false values instead of integers
|
|
try {
|
|
$val = [bool]::Parse($ProvidedValue)
|
|
} catch {
|
|
# It must not be a true/false value
|
|
$val = $script:NetboxConfig.Choices.$MajorObject.$ChoiceName.Where({ $_.Label -eq $ProvidedValue }).Value
|
|
}
|
|
|
|
return $val
|
|
}
|
|
|
|
default {
|
|
# Convert the ProvidedValue to the integer value
|
|
try {
|
|
$intVal = [uint16]"$ProvidedValue"
|
|
} catch {
|
|
# It must not be a number, get the value from the label
|
|
$intVal = [uint16]$script:NetboxConfig.Choices.$MajorObject.$ChoiceName.Where({ $_.Label -eq $ProvidedValue }).Value
|
|
}
|
|
|
|
return $intVal
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
function GetNetboxAPIErrorBody {
|
|
param
|
|
(
|
|
[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()
|
|
$reader.ReadToEnd()
|
|
}
|
|
|
|
function InvokeNetboxRequest {
|
|
[CmdletBinding()]
|
|
param
|
|
(
|
|
[Parameter(Mandatory = $true)]
|
|
[System.UriBuilder]$URI,
|
|
|
|
[Hashtable]$Headers = @{},
|
|
|
|
[pscustomobject]$Body = $null,
|
|
|
|
[ValidateRange(0, 60)]
|
|
[uint16]$Timeout = 5,
|
|
|
|
[ValidateSet('GET', 'PATCH', 'PUT', 'POST', 'DELETE', IgnoreCase = $true)]
|
|
[string]$Method = 'GET',
|
|
|
|
[switch]$Raw
|
|
)
|
|
|
|
$creds = Get-NetboxCredential
|
|
|
|
$Headers.Authorization = "Token {0}" -f $creds.GetNetworkCredential().Password
|
|
|
|
$splat = @{
|
|
'Method' = $Method
|
|
'Uri' = $URI.Uri.AbsoluteUri # This property auto generates the scheme, hostname, path, and query
|
|
'Headers' = $Headers
|
|
'TimeoutSec' = $Timeout
|
|
'ContentType' = 'application/json'
|
|
'ErrorAction' = 'Stop'
|
|
'Verbose' = $VerbosePreference
|
|
}
|
|
|
|
if ($Body) {
|
|
Write-Verbose "BODY: $($Body | ConvertTo-Json -Compress)"
|
|
$null = $splat.Add('Body', ($Body | ConvertTo-Json -Compress))
|
|
}
|
|
|
|
$result = Invoke-RestMethod @splat
|
|
|
|
#region TODO: Handle errors a little more gracefully...
|
|
|
|
<#
|
|
try {
|
|
Write-Verbose "Sending request..."
|
|
$result = Invoke-RestMethod @splat
|
|
Write-Verbose $result
|
|
} catch {
|
|
Write-Verbose "Caught exception"
|
|
if ($_.Exception.psobject.properties.Name.contains('Response')) {
|
|
Write-Verbose "Exception contains a response property"
|
|
if ($Raw) {
|
|
Write-Verbose "RAW provided...throwing raw exception"
|
|
throw $_
|
|
}
|
|
|
|
Write-Verbose "Converting response to object"
|
|
$myError = GetNetboxAPIErrorBody -Response $_.Exception.Response | ConvertFrom-Json
|
|
} else {
|
|
Write-Verbose "No response property found"
|
|
$myError = $_
|
|
}
|
|
}
|
|
|
|
Write-Verbose "MyError is $($myError.GetType().FullName)"
|
|
|
|
if ($myError -is [Exception]) {
|
|
throw $_
|
|
} elseif ($myError -is [pscustomobject]) {
|
|
throw $myError.detail
|
|
}
|
|
#>
|
|
|
|
#endregion TODO: Handle errors a little more gracefully...
|
|
|
|
# If the user wants the raw value from the API... otherwise return only the actual result
|
|
if ($Raw) {
|
|
Write-Verbose "Returning raw result by choice"
|
|
return $result
|
|
} else {
|
|
if ($result.psobject.Properties.Name.Contains('results')) {
|
|
Write-Verbose "Found Results property on data, returning results directly"
|
|
return $result.Results
|
|
} else {
|
|
Write-Verbose "Did NOT find results property on data, returning raw result"
|
|
return $result
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
#region Troubleshooting commands
|
|
|
|
function ThrowNetboxRESTError {
|
|
$uriSegments = [System.Collections.ArrayList]::new(@('fake', 'url'))
|
|
|
|
$URIParameters = @{}
|
|
|
|
$uri = BuildNewURI -Segments $uriSegments -Parameters $URIParameters
|
|
|
|
InvokeNetboxRequest -URI $uri -Raw
|
|
}
|
|
|
|
function CreateEnum {
|
|
[CmdletBinding()]
|
|
param
|
|
(
|
|
[Parameter(Mandatory = $true)]
|
|
[string]$EnumName,
|
|
|
|
[Parameter(Mandatory = $true)]
|
|
[pscustomobject]$Values,
|
|
|
|
[switch]$PassThru
|
|
)
|
|
|
|
$definition = @"
|
|
public enum $EnumName
|
|
{`n$(foreach ($value in $values) {"`t$($value.label) = $($value.value),`n"})
|
|
}
|
|
"@
|
|
if (-not ([System.Management.Automation.PSTypeName]"$EnumName").Type) {
|
|
#Write-Host $definition -ForegroundColor Green
|
|
Add-Type -TypeDefinition $definition -PassThru:$PassThru
|
|
} else {
|
|
Write-Warning "EnumType $EnumName already exists."
|
|
}
|
|
}
|
|
|
|
#endregion Troubleshooting commands
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
#region Invoke-Setup_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2018 v5.5.148
|
|
Created on: 2/28/2018 3:33 PM
|
|
Created by: Ben Claussen
|
|
Organization: NEOnet
|
|
Filename: Setup.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
These are the function used to setup the environment for connecting
|
|
to a Netbox API
|
|
#>
|
|
|
|
function Set-NetboxHostName {
|
|
[CmdletBinding(ConfirmImpact = 'Low',
|
|
SupportsShouldProcess = $true)]
|
|
[OutputType([string])]
|
|
param
|
|
(
|
|
[Parameter(Mandatory = $true)]
|
|
[string]$Hostname
|
|
)
|
|
|
|
if ($PSCmdlet.ShouldProcess('Netbox Hostname', 'Set')) {
|
|
$script:NetboxConfig.Hostname = $Hostname.Trim()
|
|
$script:NetboxConfig.Hostname
|
|
}
|
|
}
|
|
|
|
function Get-NetboxHostname {
|
|
[CmdletBinding()]
|
|
param ()
|
|
|
|
Write-Verbose "Getting Netbox hostname"
|
|
if ($null -eq $script:NetboxConfig.Hostname) {
|
|
throw "Netbox Hostname is not set! You may set it with Set-NetboxHostname -Hostname 'hostname.domain.tld'"
|
|
}
|
|
|
|
$script:NetboxConfig.Hostname
|
|
}
|
|
|
|
function Set-NetboxCredential {
|
|
[CmdletBinding(DefaultParameterSetName = 'CredsObject',
|
|
ConfirmImpact = 'Low',
|
|
SupportsShouldProcess = $true)]
|
|
[OutputType([pscredential])]
|
|
param
|
|
(
|
|
[Parameter(ParameterSetName = 'CredsObject',
|
|
Mandatory = $true)]
|
|
[pscredential]$Credential,
|
|
|
|
[Parameter(ParameterSetName = 'UserPass',
|
|
Mandatory = $true)]
|
|
[securestring]$Token
|
|
)
|
|
|
|
if ($PSCmdlet.ShouldProcess('Netbox Credentials', 'Set')) {
|
|
switch ($PsCmdlet.ParameterSetName) {
|
|
'CredsObject' {
|
|
$script:NetboxConfig.Credential = $Credential
|
|
break
|
|
}
|
|
|
|
'UserPass' {
|
|
$script:NetboxConfig.Credential = [System.Management.Automation.PSCredential]::new('notapplicable', $Token)
|
|
break
|
|
}
|
|
}
|
|
|
|
$script:NetboxConfig.Credential
|
|
}
|
|
}
|
|
|
|
function Get-NetboxCredential {
|
|
[CmdletBinding()]
|
|
[OutputType([pscredential])]
|
|
param ()
|
|
|
|
if (-not $script:NetboxConfig.Credential) {
|
|
throw "Netbox Credentials not set! You may set with Set-NetboxCredential"
|
|
}
|
|
|
|
$script:NetboxConfig.Credential
|
|
}
|
|
|
|
function Connect-NetboxAPI {
|
|
<#
|
|
.SYNOPSIS
|
|
Connects to the Netbox API and ensures Credential work properly
|
|
|
|
.DESCRIPTION
|
|
A detailed description of the Connect-NetboxAPI function.
|
|
|
|
.PARAMETER Hostname
|
|
A description of the Hostname parameter.
|
|
|
|
.PARAMETER Credential
|
|
A description of the Credential parameter.
|
|
|
|
.EXAMPLE
|
|
PS C:\> Connect-NetboxAPI -Hostname "netbox.domain.com"
|
|
|
|
This will prompt for Credential, then proceed to attempt a connection to Netbox
|
|
|
|
.NOTES
|
|
Additional information about the function.
|
|
#>
|
|
|
|
[CmdletBinding()]
|
|
param
|
|
(
|
|
[Parameter(Mandatory = $true)]
|
|
[string]$Hostname,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[pscredential]$Credential
|
|
)
|
|
|
|
if (-not $Credential) {
|
|
try {
|
|
$Credential = Get-NetboxCredential -ErrorAction Stop
|
|
} catch {
|
|
# Credentials are not set... Try to obtain from the user
|
|
if (-not ($Credential = Get-Credential -UserName 'username-not-applicable' -Message "Enter token for Netbox")) {
|
|
throw "Token is necessary to connect to a Netbox API."
|
|
}
|
|
}
|
|
}
|
|
|
|
$null = Set-NetboxHostName -Hostname $Hostname
|
|
$null = Set-NetboxCredential -Credential $Credential
|
|
|
|
try {
|
|
Write-Verbose "Verifying API connectivity..."
|
|
$null = VerifyAPIConnectivity
|
|
$script:NetboxConfig.Connected = $true
|
|
Write-Verbose "Successfully connected!"
|
|
} catch {
|
|
Write-Verbose "Failed to connect. Generating error"
|
|
Write-Verbose $_.Exception.Message
|
|
if (($_.Exception.Response) -and ($_.Exception.Response.StatusCode -eq 403)) {
|
|
throw "Invalid token"
|
|
} else {
|
|
throw $_
|
|
}
|
|
}
|
|
|
|
Write-Verbose "Caching static choices"
|
|
$script:NetboxConfig.Choices.Circuits = Get-NetboxCircuitsChoices
|
|
$script:NetboxConfig.Choices.DCIM = Get-NetboxDCIMChoices # Not completed yet
|
|
$script:NetboxConfig.Choices.Extras = Get-NetboxExtrasChoices
|
|
$script:NetboxConfig.Choices.IPAM = Get-NetboxIPAMChoices
|
|
#$script:NetboxConfig.Choices.Secrets = Get-NetboxSecretsChoices # Not completed yet
|
|
#$script:NetboxConfig.Choices.Tenancy = Get-NetboxTenancyChoices
|
|
$script:NetboxConfig.Choices.Virtualization = Get-NetboxVirtualizationChoices
|
|
|
|
Write-Verbose "Connection process completed"
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
#region Invoke-Extras_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2018 v5.5.148
|
|
Created on: 2/28/2018 3:43 PM
|
|
Created by: Ben Claussen
|
|
Organization: NEOnet
|
|
Filename: Extras.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
Extras objects functions
|
|
#>
|
|
|
|
function Get-NetboxExtrasChoices {
|
|
[CmdletBinding()]
|
|
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseSingularNouns", "", Justification = "These are literally 'choices' in Netbox")]
|
|
param ()
|
|
|
|
$uriSegments = [System.Collections.ArrayList]::new(@('extras', '_choices'))
|
|
|
|
$uri = BuildNewURI -Segments $uriSegments
|
|
|
|
InvokeNetboxRequest -URI $uri
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Invoke-ValidateDCIMChoice_ps1
|
|
function ValidateDCIMChoice {
|
|
<#
|
|
.SYNOPSIS
|
|
Internal function to validate provided values for static choices
|
|
|
|
.DESCRIPTION
|
|
When users connect to the API, choices for each major object are cached to the config variable.
|
|
These values are then utilized to validate if the provided value from a user is valid.
|
|
|
|
.PARAMETER ProvidedValue
|
|
The value to validate against static choices
|
|
|
|
.PARAMETER PowerConnectionStatus
|
|
Validate against power connection status values
|
|
|
|
.PARAMETER InterfaceTemplateFormFactor
|
|
Validate against interface template form factor values
|
|
|
|
.PARAMETER InterfaceConnectionStatus
|
|
Validate against interface connection status values
|
|
|
|
.PARAMETER InterfaceFormFactor
|
|
Validate against interface form factor values
|
|
|
|
.PARAMETER ConsolePortConnectionStatus
|
|
Validate against console port connection status values
|
|
|
|
.PARAMETER DeviceStatus
|
|
Validate against device status values
|
|
|
|
.PARAMETER DeviceFace
|
|
Validate against device face values
|
|
|
|
.PARAMETER RackType
|
|
Validate against rack type values
|
|
|
|
.PARAMETER RackWidth
|
|
Validate against rack width values.
|
|
|
|
.EXAMPLE
|
|
PS C:\> ValidateDCIMChoice -ProvidedValue 'rear' -DeviceFace
|
|
|
|
.EXAMPLE
|
|
PS C:\> ValidateDCIMChoice -ProvidedValue 'middle' -DeviceFace
|
|
>> Invalid value middle for device:face. Must be one of: 0, 1, Front, Rear
|
|
|
|
.OUTPUTS
|
|
This function returns the integer value if valid. Otherwise, it will throw an error.
|
|
|
|
.NOTES
|
|
Additional information about the function.
|
|
|
|
.FUNCTIONALITY
|
|
This cmdlet is intended to be used internally and not exposed to the user
|
|
#>
|
|
|
|
[CmdletBinding()]
|
|
[OutputType([uint16])]
|
|
param
|
|
(
|
|
[Parameter(Mandatory = $true)]
|
|
[object]$ProvidedValue,
|
|
|
|
[Parameter(ParameterSetName = 'power-port:connection_status',
|
|
Mandatory = $true)]
|
|
[switch]$PowerConnectionStatus,
|
|
|
|
[Parameter(ParameterSetName = 'interface-template:form_factor',
|
|
Mandatory = $true)]
|
|
[switch]$InterfaceTemplateFormFactor,
|
|
|
|
[Parameter(ParameterSetName = 'interface-connection:connection_status',
|
|
Mandatory = $true)]
|
|
[switch]$InterfaceConnectionStatus,
|
|
|
|
[Parameter(ParameterSetName = 'interface:form_factor',
|
|
Mandatory = $true)]
|
|
[switch]$InterfaceFormFactor,
|
|
|
|
[Parameter(ParameterSetName = 'console-port:connection_status',
|
|
Mandatory = $true)]
|
|
[switch]$ConsolePortConnectionStatus,
|
|
|
|
[Parameter(ParameterSetName = 'device:status',
|
|
Mandatory = $true)]
|
|
[switch]$DeviceStatus,
|
|
|
|
[Parameter(ParameterSetName = 'device:face',
|
|
Mandatory = $true)]
|
|
[switch]$DeviceFace,
|
|
|
|
[Parameter(ParameterSetName = 'rack:type',
|
|
Mandatory = $true)]
|
|
[switch]$RackType,
|
|
|
|
[Parameter(ParameterSetName = 'rack:width',
|
|
Mandatory = $true)]
|
|
[switch]$RackWidth
|
|
)
|
|
|
|
ValidateChoice -MajorObject 'DCIM' -ChoiceName $PSCmdlet.ParameterSetName -ProvidedValue $ProvidedValue
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-Setup_Support_ps1
|
|
function VerifyAPIConnectivity {
|
|
[CmdletBinding()]
|
|
param ()
|
|
|
|
$uriSegments = [System.Collections.ArrayList]::new(@('extras', '_choices'))
|
|
|
|
$uri = BuildNewURI -Segments $uriSegments -SkipConnectedCheck
|
|
|
|
InvokeNetboxRequest -URI $uri
|
|
}
|
|
|
|
function SetupNetboxConfigVariable {
|
|
[CmdletBinding()]
|
|
param
|
|
(
|
|
[switch]$Overwrite
|
|
)
|
|
|
|
Write-Verbose "Checking for NetboxConfig hashtable"
|
|
if ((-not ($script:NetboxConfig)) -or $Overwrite) {
|
|
Write-Verbose "Creating NetboxConfig hashtable"
|
|
$script:NetboxConfig = @{
|
|
'Connected' = $false
|
|
'Choices' = @{
|
|
}
|
|
}
|
|
}
|
|
|
|
Write-Verbose "NetboxConfig hashtable already exists"
|
|
}
|
|
|
|
function GetNetboxConfigVariable {
|
|
return $script:NetboxConfig
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-Get-NetboxIPAMVLAN_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/16/2020 16:34
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: Get-NetboxIPAMVLAN.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
|
|
function Get-NetboxIPAMVLAN {
|
|
[CmdletBinding()]
|
|
param
|
|
(
|
|
[uint16]$Limit,
|
|
|
|
[uint16]$Offset,
|
|
|
|
[uint16]$VID,
|
|
|
|
[uint16[]]$Id,
|
|
|
|
[string]$Query,
|
|
|
|
[string]$Name,
|
|
|
|
[string]$Tenant,
|
|
|
|
[uint16]$Tenant_Id,
|
|
|
|
[string]$TenantGroup,
|
|
|
|
[uint16]$TenantGroup_Id,
|
|
|
|
[object]$Status,
|
|
|
|
[string]$Region,
|
|
|
|
[string]$Site,
|
|
|
|
[uint16]$Site_Id,
|
|
|
|
[string]$Group,
|
|
|
|
[uint16]$Group_Id,
|
|
|
|
[string]$Role,
|
|
|
|
[uint16]$Role_Id,
|
|
|
|
[switch]$Raw
|
|
)
|
|
|
|
if ($null -ne $Status) {
|
|
$PSBoundParameters.Status = ValidateIPAMChoice -ProvidedValue $Status -VLANStatus
|
|
}
|
|
|
|
$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
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
#region Invoke-New-NetboxIPAMVLAN_ps1
|
|
function New-NetboxIPAMAddress {
|
|
<#
|
|
.SYNOPSIS
|
|
Create a new IP address to Netbox
|
|
|
|
.DESCRIPTION
|
|
Create a new IP address to Netbox with a status of Active by default.
|
|
|
|
.PARAMETER Address
|
|
IP address in CIDR notation: 192.168.1.1/24
|
|
|
|
.PARAMETER Status
|
|
Status of the IP. Defaults to Active
|
|
|
|
.PARAMETER Tenant
|
|
Tenant ID
|
|
|
|
.PARAMETER VRF
|
|
VRF ID
|
|
|
|
.PARAMETER Role
|
|
Role such as anycast, loopback, etc... Defaults to nothing
|
|
|
|
.PARAMETER NAT_Inside
|
|
ID of IP for NAT
|
|
|
|
.PARAMETER Custom_Fields
|
|
Custom field hash table. Will be validated by the API service
|
|
|
|
.PARAMETER Interface
|
|
ID of interface to apply IP
|
|
|
|
.PARAMETER Description
|
|
Description of IP address
|
|
|
|
.PARAMETER Raw
|
|
Return raw results from API service
|
|
|
|
.EXAMPLE
|
|
PS C:\> Create-NetboxIPAMAddress
|
|
|
|
.NOTES
|
|
Additional information about the function.
|
|
#>
|
|
|
|
[CmdletBinding()]
|
|
[OutputType([pscustomobject])]
|
|
param
|
|
(
|
|
[Parameter(Mandatory = $true)]
|
|
[uint16]$VID,
|
|
|
|
[object]$Status = 'Active',
|
|
|
|
[uint16]$Tenant,
|
|
|
|
[uint16]$VRF,
|
|
|
|
[object]$Role,
|
|
|
|
[uint16]$NAT_Inside,
|
|
|
|
[hashtable]$Custom_Fields,
|
|
|
|
[uint16]$Interface,
|
|
|
|
[string]$Description,
|
|
|
|
[switch]$Raw
|
|
)
|
|
|
|
$PSBoundParameters.Status = ValidateIPAMChoice -ProvidedValue $Status -VLANStatus
|
|
|
|
if ($null -ne $Role) {
|
|
$PSBoundParameters.Role = ValidateIPAMChoice -ProvidedValue $Role -IPAddressRole
|
|
}
|
|
|
|
$segments = [System.Collections.ArrayList]::new(@('ipam', 'ip-addresses'))
|
|
|
|
$URIComponents = BuildURIComponents -URISegments $segments -ParametersDictionary $PSBoundParameters
|
|
|
|
$URI = BuildNewURI -Segments $URIComponents.Segments
|
|
|
|
InvokeNetboxRequest -URI $URI -Method POST -Body $URIComponents.Parameters -Raw:$Raw
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-Get-NetboxIPAMRole_ps1
|
|
|
|
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
|
|
(
|
|
[uint16[]]$Id,
|
|
|
|
[string]$Query,
|
|
|
|
[string]$Name,
|
|
|
|
[string]$Slug,
|
|
|
|
[switch]$Brief,
|
|
|
|
[uint16]$Limit,
|
|
|
|
[uint16]$Offset,
|
|
|
|
[switch]$Raw
|
|
)
|
|
|
|
$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
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-Get-NetboxIPAMAggregate_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/19/2020 11:49
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: Get-NetboxIPAMAggregate.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
|
|
function Get-NetboxIPAMAggregate {
|
|
[CmdletBinding()]
|
|
param
|
|
(
|
|
[uint16]$Limit,
|
|
|
|
[uint16]$Offset,
|
|
|
|
[object]$Family,
|
|
|
|
[datetime]$Date_Added,
|
|
|
|
[uint16[]]$Id,
|
|
|
|
[string]$Query,
|
|
|
|
[uint16]$RIR_Id,
|
|
|
|
[string]$RIR,
|
|
|
|
[switch]$Raw
|
|
)
|
|
|
|
if ($null -ne $Family) {
|
|
$PSBoundParameters.Family = ValidateIPAMChoice -ProvidedValue $Family -AggregateFamily
|
|
}
|
|
|
|
$Segments = [System.Collections.ArrayList]::new(@('ipam', 'aggregates'))
|
|
|
|
$URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary $PSBoundParameters
|
|
|
|
$uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
|
|
|
|
InvokeNetboxRequest -URI $uri -Raw:$Raw
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-Get-NetboxIPAMAddress_ps1
|
|
function Get-NetboxIPAMAddress {
|
|
[CmdletBinding()]
|
|
param
|
|
(
|
|
[uint16]$Limit,
|
|
|
|
[uint16]$Offset,
|
|
|
|
[object]$Family,
|
|
|
|
[uint16[]]$Id,
|
|
|
|
[string]$Query,
|
|
|
|
[uint16]$Parent,
|
|
|
|
[byte]$Mask_Length,
|
|
|
|
[string]$VRF,
|
|
|
|
[uint16]$VRF_Id,
|
|
|
|
[string]$Tenant,
|
|
|
|
[uint16]$Tenant_Id,
|
|
|
|
[string]$Device,
|
|
|
|
[uint16]$Device_ID,
|
|
|
|
[string]$Virtual_Machine,
|
|
|
|
[uint16]$Virtual_Machine_Id,
|
|
|
|
[uint16]$Interface_Id,
|
|
|
|
[object]$Status,
|
|
|
|
[object]$Role,
|
|
|
|
[switch]$Raw
|
|
)
|
|
|
|
if ($null -ne $Family) {
|
|
$PSBoundParameters.Family = ValidateIPAMChoice -ProvidedValue $Family -IPAddressFamily
|
|
}
|
|
|
|
if ($null -ne $Status) {
|
|
$PSBoundParameters.Status = ValidateIPAMChoice -ProvidedValue $Status -IPAddressStatus
|
|
}
|
|
|
|
if ($null -ne $Role) {
|
|
$PSBoundParameters.Role = ValidateIPAMChoice -ProvidedValue $Role -IPAddressRole
|
|
}
|
|
|
|
$Segments = [System.Collections.ArrayList]::new(@('ipam', 'ip-addresses'))
|
|
|
|
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters
|
|
|
|
$uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters
|
|
|
|
InvokeNetboxRequest -URI $uri -Raw:$Raw
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-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.
|
|
#>
|
|
|
|
|
|
function New-NetboxIPAMAddress {
|
|
<#
|
|
.SYNOPSIS
|
|
Create a new IP address to Netbox
|
|
|
|
.DESCRIPTION
|
|
Create a new IP address to Netbox with a status of Active by default.
|
|
|
|
.PARAMETER Address
|
|
IP address in CIDR notation: 192.168.1.1/24
|
|
|
|
.PARAMETER Status
|
|
Status of the IP. Defaults to Active
|
|
|
|
.PARAMETER Tenant
|
|
Tenant ID
|
|
|
|
.PARAMETER VRF
|
|
VRF ID
|
|
|
|
.PARAMETER Role
|
|
Role such as anycast, loopback, etc... Defaults to nothing
|
|
|
|
.PARAMETER NAT_Inside
|
|
ID of IP for NAT
|
|
|
|
.PARAMETER Custom_Fields
|
|
Custom field hash table. Will be validated by the API service
|
|
|
|
.PARAMETER Interface
|
|
ID of interface to apply IP
|
|
|
|
.PARAMETER Description
|
|
Description of IP address
|
|
|
|
.PARAMETER Raw
|
|
Return raw results from API service
|
|
|
|
.EXAMPLE
|
|
PS C:\> Create-NetboxIPAMAddress
|
|
|
|
.NOTES
|
|
Additional information about the function.
|
|
#>
|
|
|
|
[CmdletBinding()]
|
|
[OutputType([pscustomobject])]
|
|
param
|
|
(
|
|
[Parameter(Mandatory = $true)]
|
|
[string]$Address,
|
|
|
|
[object]$Status = 'Active',
|
|
|
|
[uint16]$Tenant,
|
|
|
|
[uint16]$VRF,
|
|
|
|
[object]$Role,
|
|
|
|
[uint16]$NAT_Inside,
|
|
|
|
[hashtable]$Custom_Fields,
|
|
|
|
[uint16]$Interface,
|
|
|
|
[string]$Description,
|
|
|
|
[switch]$Raw
|
|
)
|
|
|
|
$PSBoundParameters.Status = ValidateIPAMChoice -ProvidedValue $Status -IPAddressStatus
|
|
|
|
if ($null -ne $Role) {
|
|
$PSBoundParameters.Role = ValidateIPAMChoice -ProvidedValue $Role -IPAddressRole
|
|
}
|
|
|
|
$segments = [System.Collections.ArrayList]::new(@('ipam', 'ip-addresses'))
|
|
|
|
$URIComponents = BuildURIComponents -URISegments $segments -ParametersDictionary $PSBoundParameters
|
|
|
|
$URI = BuildNewURI -Segments $URIComponents.Segments
|
|
|
|
InvokeNetboxRequest -URI $URI -Method POST -Body $URIComponents.Parameters -Raw:$Raw
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-New-NetboxIPAMPrefix_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/19/2020 11:52
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: New-NetboxIPAMPrefix.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
|
|
function New-NetboxIPAMPrefix {
|
|
[CmdletBinding()]
|
|
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
|
|
|
|
<#
|
|
# 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
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-Remove-NetboxIPAMAddress_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/19/2020 11:52
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: Remove-NetboxIPAMAddress.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
function Remove-NetboxIPAMAddress {
|
|
<#
|
|
.SYNOPSIS
|
|
Remove an IP address from Netbox
|
|
|
|
.DESCRIPTION
|
|
Removes/deletes an IP address from Netbox by ID and optional other filters
|
|
|
|
.PARAMETER Id
|
|
Database ID of the IP address object.
|
|
|
|
.PARAMETER Force
|
|
Do not confirm.
|
|
|
|
.EXAMPLE
|
|
PS C:\> Remove-NetboxIPAMAddress -Id $value1
|
|
|
|
.NOTES
|
|
Additional information about the function.
|
|
#>
|
|
|
|
[CmdletBinding(ConfirmImpact = 'High',
|
|
SupportsShouldProcess = $true)]
|
|
param
|
|
(
|
|
[Parameter(Mandatory = $true,
|
|
ValueFromPipelineByPropertyName = $true)]
|
|
[uint16[]]$Id,
|
|
|
|
[switch]$Force
|
|
)
|
|
|
|
begin {
|
|
}
|
|
|
|
process {
|
|
foreach ($IPId in $Id) {
|
|
$CurrentIP = Get-NetboxIPAMAddress -Id $IPId -ErrorAction Stop
|
|
|
|
$Segments = [System.Collections.ArrayList]::new(@('ipam', 'ip-addresses', $IPId))
|
|
|
|
if ($Force -or $pscmdlet.ShouldProcess($CurrentIP.Address, "Delete")) {
|
|
$URI = BuildNewURI -Segments $Segments
|
|
|
|
InvokeNetboxRequest -URI $URI -Method DELETE
|
|
}
|
|
}
|
|
}
|
|
|
|
end {
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-Set-NetboxIPAMAddress_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/19/2020 11:53
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: Set-NetboxIPAMAddress.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
|
|
function Set-NetboxIPAMAddress {
|
|
[CmdletBinding(ConfirmImpact = 'Medium',
|
|
SupportsShouldProcess = $true)]
|
|
param
|
|
(
|
|
[Parameter(Mandatory = $true,
|
|
ValueFromPipelineByPropertyName = $true)]
|
|
[uint16[]]$Id,
|
|
|
|
[string]$Address,
|
|
|
|
[object]$Status,
|
|
|
|
[uint16]$Tenant,
|
|
|
|
[uint16]$VRF,
|
|
|
|
[object]$Role,
|
|
|
|
[uint16]$NAT_Inside,
|
|
|
|
[hashtable]$Custom_Fields,
|
|
|
|
[uint16]$Interface,
|
|
|
|
[string]$Description,
|
|
|
|
[switch]$Force
|
|
)
|
|
|
|
begin {
|
|
if ($Status) {
|
|
$PSBoundParameters.Status = ValidateIPAMChoice -ProvidedValue $Status -IPAddressStatus
|
|
}
|
|
|
|
if ($Role) {
|
|
$PSBoundParameters.Role = ValidateIPAMChoice -ProvidedValue $Role -IPAddressRole
|
|
}
|
|
}
|
|
|
|
process {
|
|
foreach ($IPId in $Id) {
|
|
$Segments = [System.Collections.ArrayList]::new(@('ipam', 'ip-addresses', $IPId))
|
|
|
|
Write-Verbose "Obtaining IPs from ID $IPId"
|
|
$CurrentIP = Get-NetboxIPAMAddress -Id $IPId -ErrorAction Stop
|
|
|
|
if ($Force -or $PSCmdlet.ShouldProcess($CurrentIP.Address, '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 {
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-Get-NetboxIPAMChoices_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/19/2020 11:54
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: Get-NetboxIPAMChoices.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
|
|
function Get-NetboxIPAMChoices {
|
|
[CmdletBinding()]
|
|
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseSingularNouns", "", Justification = "These are literally 'choices' in Netbox")]
|
|
param ()
|
|
|
|
$uriSegments = [System.Collections.ArrayList]::new(@('ipam', '_choices'))
|
|
|
|
$uri = BuildNewURI -Segments $uriSegments -Parameters $Parameters
|
|
|
|
InvokeNetboxRequest -URI $uri
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-Get-NetboxTenant_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/19/2020 11:56
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: Get-NetboxTenant.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
|
|
function Get-NetboxTenant {
|
|
[CmdletBinding()]
|
|
param
|
|
(
|
|
[uint16]$Limit,
|
|
|
|
[uint16]$Offset,
|
|
|
|
[string]$Name,
|
|
|
|
[uint16[]]$Id,
|
|
|
|
[string]$Query,
|
|
|
|
[string]$Group,
|
|
|
|
[uint16]$GroupID,
|
|
|
|
[hashtable]$CustomFields,
|
|
|
|
[switch]$Raw
|
|
)
|
|
|
|
$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
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-Get-NetboxTenancyChoices_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/19/2020 11:56
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: Get-NetboxTenancyChoices.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
|
|
function Get-NetboxTenancyChoices {
|
|
[CmdletBinding()]
|
|
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseSingularNouns", "", Justification = "These are literally 'choices' in Netbox")]
|
|
param ()
|
|
|
|
$uriSegments = [System.Collections.ArrayList]::new(@('tenancy', '_choices'))
|
|
|
|
$uri = BuildNewURI -Segments $uriSegments
|
|
|
|
InvokeNetboxRequest -URI $uri
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-Get-NetboxVirtualMachine_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/19/2020 12:44
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: Get-NetboxVirtualMachine.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
|
|
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
|
|
(
|
|
[uint16]$Limit,
|
|
|
|
[uint16]$Offset,
|
|
|
|
[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,
|
|
|
|
[switch]$Raw
|
|
)
|
|
|
|
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
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-New-NetboxVirtualMachine_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/19/2020 12:44
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: New-NetboxVirtualMachine.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
|
|
function New-NetboxVirtualMachine {
|
|
[CmdletBinding()]
|
|
[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
|
|
)
|
|
|
|
$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
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-Set-NetboxVirtualMachine_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/19/2020 12:45
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: Set-NetboxVirtualMachine.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
|
|
function Set-NetboxVirtualMachine {
|
|
[CmdletBinding(ConfirmImpact = 'Medium',
|
|
SupportsShouldProcess = $true)]
|
|
param
|
|
(
|
|
[Parameter(Mandatory = $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($CurrentVM.Name, "Set")) {
|
|
$URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id', 'Force'
|
|
|
|
$URI = BuildNewURI -Segments $URIComponents.Segments
|
|
|
|
InvokeNetboxRequest -URI $URI -Body $URIComponents.Parameters -Method PATCH
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-Add-NetboxVirtualMachineInterface_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/19/2020 12:46
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: Add-NetboxVirtualMachineInterface.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
|
|
function Add-NetboxVirtualMachineInterface {
|
|
[CmdletBinding()]
|
|
param
|
|
(
|
|
[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
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-Get-NetboxVirtualMachineInterface_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/19/2020 12:47
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: Get-NetboxVirtualMachineInterface.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
|
|
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
|
|
(
|
|
[uint16]$Limit,
|
|
|
|
[uint16]$Offset,
|
|
|
|
[Parameter(ValueFromPipeline = $true)]
|
|
[uint16]$Id,
|
|
|
|
[string]$Name,
|
|
|
|
[boolean]$Enabled,
|
|
|
|
[uint16]$MTU,
|
|
|
|
[uint16]$Virtual_Machine_Id,
|
|
|
|
[string]$Virtual_Machine,
|
|
|
|
[string]$MAC_Address,
|
|
|
|
[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
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-Set-NetboxVirtualMachineInterface_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/19/2020 12:47
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: Set-NetboxVirtualMachineInterface.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
|
|
function Set-NetboxVirtualMachineInterface {
|
|
[CmdletBinding(ConfirmImpact = 'Medium',
|
|
SupportsShouldProcess = $true)]
|
|
[OutputType([pscustomobject])]
|
|
param
|
|
(
|
|
[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 {
|
|
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-Get-NetboxVirtualizationChoices_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/19/2020 14:10
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: Get-NetboxVirtualizationChoices.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
|
|
function Get-NetboxVirtualizationChoices {
|
|
[CmdletBinding()]
|
|
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseSingularNouns", "", Justification = "These are literally 'choices' in Netbox")]
|
|
param ()
|
|
|
|
$uriSegments = [System.Collections.ArrayList]::new(@('virtualization', '_choices'))
|
|
|
|
$uri = BuildNewURI -Segments $uriSegments
|
|
|
|
InvokeNetboxRequest -URI $uri
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-Get-NetboxVirtualizationCluster_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/19/2020 14:10
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: Get-NetboxVirtualizationCluster.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
|
|
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
|
|
(
|
|
[uint16]$Limit,
|
|
|
|
[uint16]$Offset,
|
|
|
|
[Alias('q')]
|
|
[string]$Query,
|
|
|
|
[string]$Name,
|
|
|
|
[Alias('id__in')]
|
|
[uint16[]]$Id,
|
|
|
|
[string]$Group,
|
|
|
|
[uint16]$Group_Id,
|
|
|
|
[string]$Type,
|
|
|
|
[uint16]$Type_Id,
|
|
|
|
[string]$Site,
|
|
|
|
[uint16]$Site_Id,
|
|
|
|
[switch]$Raw
|
|
)
|
|
|
|
$uriSegments = [System.Collections.ArrayList]::new(@('virtualization', 'clusters'))
|
|
|
|
$URIParameters = @{
|
|
}
|
|
|
|
foreach ($CmdletParameterName in $PSBoundParameters.Keys) {
|
|
if ($CmdletParameterName -in $CommonParameterNames) {
|
|
# These are common parameters and should not be appended to the URI
|
|
Write-Debug "Skipping parameter $CmdletParameterName"
|
|
continue
|
|
}
|
|
|
|
if ($CmdletParameterName -eq 'Id') {
|
|
# Check if there is one or more values for Id and build a URI or query as appropriate
|
|
if (@($PSBoundParameters[$CmdletParameterName]).Count -gt 1) {
|
|
$URIParameters['id__in'] = $Id -join ','
|
|
} else {
|
|
[void]$uriSegments.Add($PSBoundParameters[$CmdletParameterName])
|
|
}
|
|
} elseif ($CmdletParameterName -eq 'Query') {
|
|
$URIParameters['q'] = $PSBoundParameters[$CmdletParameterName]
|
|
} else {
|
|
$URIParameters[$CmdletParameterName.ToLower()] = $PSBoundParameters[$CmdletParameterName]
|
|
}
|
|
}
|
|
|
|
$uri = BuildNewURI -Segments $uriSegments -Parameters $URIParameters
|
|
|
|
InvokeNetboxRequest -URI $uri -Raw:$Raw
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-ValidateVirtualizationChoice_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/19/2020 14:12
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: ValidateVirtualizationChoice.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
function ValidateVirtualizationChoice {
|
|
<#
|
|
.SYNOPSIS
|
|
Internal function to verify provided values for static choices
|
|
|
|
.DESCRIPTION
|
|
When users connect to the API, choices for each major object are cached to the config variable.
|
|
These values are then utilized to verify if the provided value from a user is valid.
|
|
|
|
.PARAMETER ProvidedValue
|
|
The value to validate against static choices
|
|
|
|
.PARAMETER AggregateFamily
|
|
Verify against aggregate family values
|
|
|
|
.PARAMETER PrefixFamily
|
|
Verify against prefix family values
|
|
|
|
.PARAMETER PrefixStatus
|
|
Verify against prefix status values
|
|
|
|
.PARAMETER IPAddressFamily
|
|
Verify against ip-address family values
|
|
|
|
.PARAMETER IPAddressStatus
|
|
Verify against ip-address status values
|
|
|
|
.PARAMETER IPAddressRole
|
|
Verify against ip-address role values
|
|
|
|
.PARAMETER VLANStatus
|
|
Verify against VLAN status values
|
|
|
|
.PARAMETER ServiceProtocol
|
|
Verify against service protocol values
|
|
|
|
.EXAMPLE
|
|
PS C:\> VerifyIPAMChoices -ProvidedValue 'loopback' -IPAddressRole
|
|
|
|
.EXAMPLE
|
|
PS C:\> VerifyIPAMChoices -ProvidedValue 'Loopback' -IPAddressFamily
|
|
>> Invalid value Loopback for ip-address:family. Must be one of: 4, 6, IPv4, IPv6
|
|
|
|
.FUNCTIONALITY
|
|
This cmdlet is intended to be used internally and not exposed to the user
|
|
|
|
.OUTPUT
|
|
This function returns nothing if the value is valid. Otherwise, it will throw an error.
|
|
#>
|
|
|
|
[CmdletBinding()]
|
|
param
|
|
(
|
|
[Parameter(Mandatory = $true)]
|
|
[object]$ProvidedValue,
|
|
|
|
[Parameter(ParameterSetName = 'virtual-machine:status',
|
|
Mandatory = $true)]
|
|
[switch]$VirtualMachineStatus
|
|
)
|
|
|
|
ValidateChoice -MajorObject 'Virtualization' -ChoiceName $PSCmdlet.ParameterSetName -ProvidedValue $ProvidedValue
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-Get-NetboxDCIMDevice_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/23/2020 12:06
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: Get-NetboxDCIMDevice.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
|
|
function Get-NetboxDCIMDevice {
|
|
[CmdletBinding()]
|
|
#region Parameters
|
|
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
|
|
}
|
|
|
|
$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 Invoke-Get-NetboxDCIMDeviceType_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/23/2020 12:07
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: Get-NetboxDCIMDeviceType.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
|
|
function Get-NetboxDCIMDeviceType {
|
|
[CmdletBinding()]
|
|
#region Parameters
|
|
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
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-Get-NetboxDCIMDeviceRole_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/23/2020 12:07
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: Get-NetboxDCIMDeviceRole.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
|
|
function Get-NetboxDCIMDeviceRole {
|
|
[CmdletBinding()]
|
|
param
|
|
(
|
|
[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
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-New-NetboxDCIMDevice_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/23/2020 12:08
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: New-NetboxDCIMDevice.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
|
|
function New-NetboxDCIMDevice {
|
|
[CmdletBinding()]
|
|
[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
|
|
}
|
|
|
|
$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
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-Set-NetboxDCIMDevice_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/23/2020 12:08
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: Set-NetboxDCIMDevice.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
|
|
function Set-NetboxDCIMDevice {
|
|
[CmdletBinding(SupportsShouldProcess = $true)]
|
|
param
|
|
(
|
|
[Parameter(Mandatory = $true,
|
|
ValueFromPipelineByPropertyName = $true)]
|
|
[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 {
|
|
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Invoke-Remove-NetboxDCIMDevice_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/23/2020 12:08
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: Remove-NetboxDCIMDevice.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
|
|
function Remove-NetboxDCIMDevice {
|
|
<#
|
|
.SYNOPSIS
|
|
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
|
|
(
|
|
[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 {
|
|
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-Get-NetboxDCIMInterface_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/23/2020 12:09
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: Get-NetboxDCIMInterface.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
|
|
function Get-NetboxDCIMInterface {
|
|
[CmdletBinding()]
|
|
[OutputType([pscustomobject])]
|
|
param
|
|
(
|
|
[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
|
|
}
|
|
|
|
$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 Invoke-Get-NetboxDCIMInterfaceConnection_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/23/2020 12:10
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: Get-NetboxDCIMInterfaceConnection.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
|
|
function Get-NetboxDCIMInterfaceConnection {
|
|
[CmdletBinding()]
|
|
[OutputType([pscustomobject])]
|
|
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
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-Add-NetboxDCIMInterface_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/23/2020 12:10
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: Add-NetboxDCIMInterface.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
|
|
function Add-NetboxDCIMInterface {
|
|
[CmdletBinding()]
|
|
[OutputType([pscustomobject])]
|
|
param
|
|
(
|
|
[Parameter(Mandatory = $true)]
|
|
[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
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-Add-NetboxDCIMInterfaceConnection_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/23/2020 12:10
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: Add-NetboxDCIMInterfaceConnection.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
|
|
function Add-NetboxDCIMInterfaceConnection {
|
|
<#
|
|
.SYNOPSIS
|
|
Create a new connection between two interfaces
|
|
|
|
.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
|
|
|
|
$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
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-Set-NetboxDCIMInterface_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/23/2020 12:11
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: Set-NetboxDCIMInterface.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
|
|
function Set-NetboxDCIMInterface {
|
|
[CmdletBinding()]
|
|
[OutputType([pscustomobject])]
|
|
param
|
|
(
|
|
[Parameter(Mandatory = $true,
|
|
ValueFromPipelineByPropertyName = $true)]
|
|
[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 (-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
|
|
}
|
|
}
|
|
|
|
end {
|
|
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-Set-NetboxDCIMInterfaceConnection_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/23/2020 12:11
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: Set-NetboxDCIMInterfaceConnection.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
|
|
function Set-NetboxDCIMInterfaceConnection {
|
|
<#
|
|
.SYNOPSIS
|
|
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
|
|
(
|
|
[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 {
|
|
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-Remove-NetboxDCIMInterface_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/23/2020 12:11
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: Remove-NetboxDCIMInterface.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
|
|
function Remove-NetboxDCIMInterface {
|
|
<#
|
|
.SYNOPSIS
|
|
Removes an interface
|
|
|
|
.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
|
|
(
|
|
[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 {
|
|
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-Remove-NetboxDCIMInterfaceConnection_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/23/2020 12:12
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: Remove-NetboxDCIMInterfaceConnection.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
|
|
function Remove-NetboxDCIMInterfaceConnection {
|
|
[CmdletBinding(ConfirmImpact = 'High',
|
|
SupportsShouldProcess = $true)]
|
|
[OutputType([void])]
|
|
param
|
|
(
|
|
[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 {
|
|
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-Get-NetboxDCIMPlatform_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/23/2020 12:13
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: Get-NetboxDCIMPlatform.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
|
|
function Get-NetboxDCIMPlatform {
|
|
[CmdletBinding()]
|
|
[OutputType([pscustomobject])]
|
|
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
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-Get-NetboxDCIMChoices_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/23/2020 12:13
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: Get-NetboxDCIMChoices.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
|
|
function Get-NetboxDCIMChoices {
|
|
[CmdletBinding()]
|
|
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseSingularNouns", "", Justification = "These are literally 'choices' in Netbox")]
|
|
param ()
|
|
|
|
$uriSegments = [System.Collections.ArrayList]::new(@('dcim', '_choices'))
|
|
|
|
$uri = BuildNewURI -Segments $uriSegments -Parameters $Parameters
|
|
|
|
InvokeNetboxRequest -URI $uri
|
|
}
|
|
#endregion
|
|
|
|
#region Invoke-Get-NetboxCircuitsChoices_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/23/2020 12:15
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: Get-NetboxCircuitsChoices.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
|
|
function Get-NetboxCircuitsChoices {
|
|
<#
|
|
.SYNOPSIS
|
|
Gets the choices associated with circuits
|
|
|
|
.DESCRIPTION
|
|
A detailed description of the Get-NetboxCircuitsChoices function.
|
|
|
|
.EXAMPLE
|
|
PS C:\> Get-NetboxCircuitsChoices
|
|
|
|
.NOTES
|
|
Additional information about the function.
|
|
#>
|
|
|
|
[CmdletBinding()]
|
|
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseSingularNouns", "", Justification = "These are literally 'choices' in Netbox")]
|
|
param ()
|
|
|
|
$uriSegments = [System.Collections.ArrayList]::new(@('circuits', '_choices'))
|
|
$uri = BuildNewURI -Segments $uriSegments
|
|
|
|
InvokeNetboxRequest -URI $uri
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Invoke-Get-NetboxCircuit_ps1
|
|
<#
|
|
.NOTES
|
|
===========================================================================
|
|
Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.172
|
|
Created on: 3/23/2020 12:15
|
|
Created by: Claussen
|
|
Organization: NEOnet
|
|
Filename: Get-NetboxCircuit.ps1
|
|
===========================================================================
|
|
.DESCRIPTION
|
|
A description of the file.
|
|
#>
|
|
|
|
|
|
function Get-NetboxCircuit {
|
|
<#
|
|
.SYNOPSIS
|
|
Gets one or more circuits
|
|
|
|
.DESCRIPTION
|
|
A detailed description of the Get-NetboxCircuit function.
|
|
|
|
.PARAMETER CID
|
|
Circuit ID
|
|
|
|
.PARAMETER InstallDate
|
|
Date of installation
|
|
|
|
.PARAMETER CommitRate
|
|
Committed rate in Kbps
|
|
|
|
.PARAMETER Query
|
|
A raw search query... As if you were searching the web site
|
|
|
|
.PARAMETER Provider
|
|
The name or ID of the provider. Provide either [string] or [int]. String will search provider names, integer will search database IDs
|
|
|
|
.PARAMETER Type
|
|
Type of circuit. Provide either [string] or [int]. String will search provider type names, integer will search database IDs
|
|
|
|
.PARAMETER Site
|
|
Location/site of circuit. Provide either [string] or [int]. String will search site names, integer will search database IDs
|
|
|
|
.PARAMETER Tenant
|
|
Tenant assigned to circuit. Provide either [string] or [int]. String will search tenant names, integer will search database IDs
|
|
|
|
.PARAMETER Id
|
|
Database ID of circuit. This will query for exactly the IDs provided
|
|
|
|
.PARAMETER ID__IN
|
|
Multiple unique DB IDs to retrieve
|
|
|
|
.EXAMPLE
|
|
PS C:\> Get-NetboxCircuit
|
|
|
|
.NOTES
|
|
Additional information about the function.
|
|
#>
|
|
|
|
[CmdletBinding()]
|
|
param
|
|
(
|
|
[string]$CID,
|
|
|
|
[datetime]$InstallDate,
|
|
|
|
[uint32]$CommitRate,
|
|
|
|
[string]$Query,
|
|
|
|
[object]$Provider,
|
|
|
|
[object]$Type,
|
|
|
|
[string]$Site,
|
|
|
|
[string]$Tenant,
|
|
|
|
[uint16[]]$Id
|
|
)
|
|
|
|
#TODO: Place script here
|
|
}
|
|
#endregion
|
|
|
|
# Build a list of common paramters 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))
|
|
[void]$script:CommonParameterNames.Add('Raw')
|
|
|
|
SetupNetboxConfigVariable
|
|
|
|
Export-ModuleMember -Function *
|
|
#Export-ModuleMember -Function *-* |