From 53a64915b5aa0db6336907220cf3bae575039617 Mon Sep 17 00:00:00 2001 From: Ben Claussen Date: Mon, 21 May 2018 10:31:43 -0400 Subject: [PATCH] Removing old files --- Staging/NetboxPS.psd1 | 127 -- Staging/NetboxPS.psm1 | 1994 ------------------------ Staging/Tests/Helpers.Tests.ps1 | 481 ------ Staging/Tests/IPAM.Tests.ps1 | 478 ------ Staging/Tests/Virtualization.Tests.ps1 | 404 ----- 5 files changed, 3484 deletions(-) delete mode 100644 Staging/NetboxPS.psd1 delete mode 100644 Staging/NetboxPS.psm1 delete mode 100644 Staging/Tests/Helpers.Tests.ps1 delete mode 100644 Staging/Tests/IPAM.Tests.ps1 delete mode 100644 Staging/Tests/Virtualization.Tests.ps1 diff --git a/Staging/NetboxPS.psd1 b/Staging/NetboxPS.psd1 deleted file mode 100644 index 32dce8f..0000000 --- a/Staging/NetboxPS.psd1 +++ /dev/null @@ -1,127 +0,0 @@ -<# - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2018 v5.5.148 - Created on: 2/28/2018 11:04 AM - Created by: Ben Claussen - Organization: NEOnet - Filename: NetboxPS.psd1 - ------------------------------------------------------------------------- - Module Manifest - ------------------------------------------------------------------------- - Module Name: NetboxPS - =========================================================================== -#> - - -@{ - - # Script module or binary module file associated with this manifest - ModuleToProcess = 'NetboxPS.psm1' - - # Version number of this module. - ModuleVersion = '1.0.0.0' - - # ID used to uniquely identify this module - GUID = 'bba9b06c-49c8-47cf-8358-aca7c4e78896' - - # Author of this module - Author = 'Ben Claussen' - - # Company or vendor of this module - CompanyName = 'NEOnet' - - # Copyright statement for this module - Copyright = '(c) 2018. All rights reserved.' - - # Description of the functionality provided by this module - Description = 'A Powershell wrapper for Netbox API' - - # Minimum version of the Windows PowerShell engine required by this module - PowerShellVersion = '5.0' - - # Name of the Windows PowerShell host required by this module - PowerShellHostName = '' - - # Minimum version of the Windows PowerShell host required by this module - PowerShellHostVersion = '' - - # Minimum version of the .NET Framework required by this module - DotNetFrameworkVersion = '2.0' - - # Minimum version of the common language runtime (CLR) required by this module - CLRVersion = '2.0.50727' - - # Processor architecture (None, X86, Amd64, IA64) required by this module - ProcessorArchitecture = 'None' - - # Modules that must be imported into the global environment prior to importing - # this module - RequiredModules = @() - - # Assemblies that must be loaded prior to importing this module - RequiredAssemblies = @('System.Web') - - # Script files (.ps1) that are run in the caller's environment prior to - # importing this module - ScriptsToProcess = @() - - # Type files (.ps1xml) to be loaded when importing this module - TypesToProcess = @() - - # Format files (.ps1xml) to be loaded when importing this module - FormatsToProcess = @() - - # Modules to import as nested modules of the module specified in - # ModuleToProcess - NestedModules = @() - - # Functions to export from this module - FunctionsToExport = '*' #For performanace, list functions explicity - - # Cmdlets to export from this module - CmdletsToExport = '*' - - # Variables to export from this module - VariablesToExport = '*' - - # Aliases to export from this module - AliasesToExport = '*' #For performanace, list alias explicity - - # List of all modules packaged with this module - ModuleList = @() - - # List of all files packaged with this module - FileList = @() - - # Private data to pass to the module specified in ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell. - PrivateData = @{ - - #Support for PowerShellGet galleries. - PSData = @{ - - # Tags applied to this module. These help with module discovery in online galleries. - Tags = @('Netbox', 'API', 'DCIM', 'IPAM') - - # A URL to the license for this module. - # LicenseUri = '' - - # A URL to the main website for this project. - ProjectUri = 'https://github.com/benclaussen/NetboxPS' - - # A URL to an icon representing this module. - # IconUri = '' - - # ReleaseNotes of this module - # ReleaseNotes = '' - - } # End of PSData hashtable - - } # End of PrivateData hashtable -} - - - - - - - diff --git a/Staging/NetboxPS.psm1 b/Staging/NetboxPS.psm1 deleted file mode 100644 index d445259..0000000 --- a/Staging/NetboxPS.psm1 +++ /dev/null @@ -1,1994 +0,0 @@ -<# - .NOTES - -------------------------------------------------------------------------------- - Code generated by: SAPIEN Technologies, Inc., PowerShell Studio 2018 v5.5.152 - Generated on: 5/18/2018 12:40 PM - Generated by: Ben Claussen - Organization: NEOnet - -------------------------------------------------------------------------------- - .DESCRIPTION - Script generated by PowerShell Studio 2018 -#> - - -#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 - A detailed description of the BuildNewURI function. - - .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 $CommonParameterNames) { - # These are common parameters and should not be appended to the URI - Write-Debug "Skipping parameter $CmdletParameterName" - continue - } - - if ($CmdletParameterName -in $SkipParameterByName) { - 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 (@($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]) - } - } elseif ($CmdletParameterName -eq 'Query') { - Write-Verbose " Adding query parameter" - $URIParameters['q'] = $ParametersDictionary[$CmdletParameterName] - } else { - Write-Verbose " Adding $($CmdletParameterName.ToLower()) parameter" - $URIParameters[$CmdletParameterName.ToLower()] = $ParametersDictionary[$CmdletParameterName] - } - } - - 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])] - param - ( - [Parameter(Mandatory = $true)] - [ValidateSet('Circuits', '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 ', ')]" - - if ($ValidValues -inotcontains $ProvidedValue) { - throw "Invalid value '$ProvidedValue' for '$ChoiceName'. Must be one of: $($ValidValues -join ', ')" - } - - # 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-NetboxCredentials - - $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 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 - } - - function Set-NetboxHostName { - [CmdletBinding(ConfirmImpact = 'Medium', - SupportsShouldProcess = $true)] - [OutputType([string])] - param - ( - [Parameter(Mandatory = $true)] - [string]$Hostname - ) - - $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-NetboxCredentials { - [CmdletBinding(DefaultParameterSetName = 'CredsObject', - ConfirmImpact = 'Medium', - SupportsShouldProcess = $true)] - [OutputType([pscredential], ParameterSetName = 'CredsObject')] - [OutputType([pscredential], ParameterSetName = 'UserPass')] - [OutputType([pscredential])] - param - ( - [Parameter(ParameterSetName = 'CredsObject', - Mandatory = $true)] - [pscredential]$Credentials, - - [Parameter(ParameterSetName = 'UserPass', - Mandatory = $true)] - [string]$Token - ) - - switch ($PsCmdlet.ParameterSetName) { - 'CredsObject' { - $script:NetboxConfig.Credentials = $Credentials - break - } - - 'UserPass' { - $securePW = ConvertTo-SecureString $Token -AsPlainText -Force - $script:NetboxConfig.Credentials = [System.Management.Automation.PSCredential]::new('notapplicable', $securePW) - break - } - } - - $script:NetboxConfig.Credentials - } - - function Get-NetboxCredentials { - [CmdletBinding()] - [OutputType([pscredential])] - param () - - if (-not $script:NetboxConfig.Credentials) { - throw "Netbox Credentials not set! You may set with Set-NetboxCredentials" - } - - $script:NetboxConfig.Credentials - } - - function VerifyAPIConnectivity { - [CmdletBinding()] - param () - - $uriSegments = [System.Collections.ArrayList]::new(@('extras', '_choices')) - - $uri = BuildNewURI -Segments $uriSegments -SkipConnectedCheck - - InvokeNetboxRequest -URI $uri - } - - function Connect-NetboxAPI { - <# - .SYNOPSIS - Connects to the Netbox API and ensures credentials work properly - - .DESCRIPTION - A detailed description of the Connect-NetboxAPI function. - - .PARAMETER Hostname - A description of the Hostname parameter. - - .PARAMETER Credentials - A description of the Credentials parameter. - - .EXAMPLE - PS C:\> Connect-NetboxAPI -Hostname "netbox.domain.com" - - This will prompt for credentials, 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]$Credentials - ) - - if (-not $Credentials) { - try { - $Credentials = Get-NetboxCredentials -ErrorAction Stop - } catch { - # Credentials are not set... Try to obtain from the user - if (-not ($Credentials = 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-NetboxCredentials -Credentials $Credentials - - 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 # Not completed yet - $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-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 - #> - - 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 - } - - 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 - -#region Invoke-Virtualization_ps1 - <# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2018 v5.5.150 - Created on: 5/8/2018 3:59 PM - Created by: Ben Claussen - Organization: NEOnet - Filename: Virtualization.ps1 - =========================================================================== - .DESCRIPTION - Virtualization object functions - #> - - function VerifyVirtualizationChoices { - <# - .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 - } - - #region GET commands - - 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 - } - - 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 = VerifyVirtualizationChoices -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 - } - - 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 - } - - 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 - } - - function Get-NetboxVirtualizationClusterGroup { - [CmdletBinding()] - param - ( - [uint16]$Limit, - - [uint16]$Offset, - - [string]$Name, - - [string]$Slug, - - [switch]$Raw - ) - - $uriSegments = [System.Collections.ArrayList]::new(@('virtualization', 'cluster-groups')) - - $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 - } - - $URIParameters[$CmdletParameterName.ToLower()] = $PSBoundParameters[$CmdletParameterName] - } - - $uri = BuildNewURI -Segments $uriSegments -Parameters $URIParameters - - InvokeNetboxRequest -URI $uri -Raw:$Raw - } - - #endregion GET commands - - - #region ADD commands - - function Add-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, - - [hashtable]$Custom_Fields, - - [string]$Comments - ) - - $PSBoundParameters.Status = VerifyVirtualizationChoices -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 - } - - function Add-NetboxVirtualInterface { - [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 ADD commands - - - #region SET commands - - function Set-NetboxVirtualMachine { - [CmdletBinding(ConfirmImpact = 'High', - SupportsShouldProcess = $true)] - param - ( - [Parameter(Mandatory = $true, - ValueFromPipelineByPropertyName = $true)] - [uint16]$Id, - - [string]$Name, - - [uint16]$Role, - - [uint16]$Cluster, - - [object]$Status, - - [uint16]$Platform, - - [uint16]$Primary_IPv4, - - [uint16]$Primary_IPv6, - - [byte]$VCPUs, - - [uint16]$Memory, - - [uint16]$Disk, - - [uint16]$Tenant, - - [string]$Comments, - - [hashtable]$Custom_Fields, - - [switch]$Force - ) - - if ($Status) { - $PSBoundParameters.Status = VerifyVirtualizationChoices -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 SET commands#endregion - -#region Invoke-IPAM_ps1 - <# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2018 v5.5.150 - Created on: 5/10/2018 3:41 PM - Created by: Ben Claussen - Organization: NEOnet - Filename: IPAM.ps1 - =========================================================================== - .DESCRIPTION - IPAM Object functions - #> - - 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 - } - - function VerifyIPAMChoices { - <# - .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 - - .OUTPUTS - This function returns the integer value if valid. Otherwise, it will throw an error. - - .NOTES - Additional information about the function. - - .FUNCTIONALITY - This cmdlet is intended to be used internally and not exposed to the user - #> - - [CmdletBinding(DefaultParameterSetName = 'service:protocol')] - [OutputType([uint16])] - param - ( - [Parameter(Mandatory = $true)] - [object]$ProvidedValue, - - [Parameter(ParameterSetName = 'aggregate:family', - Mandatory = $true)] - [switch]$AggregateFamily, - - [Parameter(ParameterSetName = 'prefix:family', - Mandatory = $true)] - [switch]$PrefixFamily, - - [Parameter(ParameterSetName = 'prefix:status', - Mandatory = $true)] - [switch]$PrefixStatus, - - [Parameter(ParameterSetName = 'ip-address:family', - Mandatory = $true)] - [switch]$IPAddressFamily, - - [Parameter(ParameterSetName = 'ip-address:status', - Mandatory = $true)] - [switch]$IPAddressStatus, - - [Parameter(ParameterSetName = 'ip-address:role', - Mandatory = $true)] - [switch]$IPAddressRole, - - [Parameter(ParameterSetName = 'vlan:status', - Mandatory = $true)] - [switch]$VLANStatus, - - [Parameter(ParameterSetName = 'service:protocol', - Mandatory = $true)] - [switch]$ServiceProtocol - ) - - ValidateChoice -MajorObject 'IPAM' -ChoiceName $PSCmdlet.ParameterSetName -ProvidedValue $ProvidedValue - } - - - function Get-NetboxIPAMAggregate { - [CmdletBinding()] - [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseSingularNouns", "", Justification = "These are literally 'choices' in Netbox")] - 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 = VerifyIPAMChoices -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 - } - - 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 = VerifyIPAMChoices -ProvidedValue $Family -IPAddressFamily - } - - if ($null -ne $Status) { - $PSBoundParameters.Status = VerifyIPAMChoices -ProvidedValue $Status -IPAddressStatus - } - - if ($null -ne $Role) { - $PSBoundParameters.Role = VerifyIPAMChoices -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 - } - - function Get-NetboxIPAMAvailableIP { - <# - .SYNOPSIS - A convenience method for returning available IP addresses within a prefix - - .DESCRIPTION - By default, the number of IPs returned will be equivalent to PAGINATE_COUNT. An arbitrary limit - (up to MAX_PAGE_SIZE, if set) may be passed, however results will not be paginated - - .PARAMETER Prefix_ID - A description of the Prefix_ID parameter. - - .PARAMETER NumberOfIPs - A description of the NumberOfIPs parameter. - - .PARAMETER Raw - A description of the Raw parameter. - - .EXAMPLE - PS C:\> Get-NetboxIPAMAvaiableIP -Prefix_ID $value1 - - .NOTES - Additional information about the function. - #> - - [CmdletBinding()] - param - ( - [Parameter(Mandatory = $true)] - [uint16]$Prefix_ID, - - [Alias('NumberOfIPs')] - [uint16]$Limit, - - [switch]$Raw - ) - - $Segments = [System.Collections.ArrayList]::new(@('ipam', 'prefixes', $Prefix_ID, 'available-ips')) - - $URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters -SkipParameterByName 'prefix_id' - - $uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters - - InvokeNetboxRequest -URI $uri -Raw:$Raw - } - - function Get-NetboxIPAMPrefix { - <# - .SYNOPSIS - A brief description of the Get-NetboxIPAMPrefix function. - - .DESCRIPTION - A detailed description of the Get-NetboxIPAMPrefix function. - - .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 Id - A description of the Id parameter. - - .PARAMETER Query - A description of the Query 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()] - param - ( - [uint16]$Limit, - - [uint16]$Offset, - - [object]$Family, - - [boolean]$Is_Pool, - - [uint16[]]$Id, - - [string]$Query, - - [string]$Within, - - [string]$Within_Include, - - [string]$Contains, - - [ValidateRange(0, 127)] - [byte]$Mask_Length, - - [string]$VRF, - - [uint16]$VRF_Id, - - [string]$Tenant, - - [uint16]$Tenant_Id, - - [string]$Site, - - [uint16]$Site_Id, - - [string]$Vlan_VId, - - [uint16]$Vlan_Id, - - [object]$Status, - - [string]$Role, - - [uint16]$Role_Id, - - [switch]$Raw - ) - - if ($null -ne $Family) { - $PSBoundParameters.Family = VerifyIPAMChoices -ProvidedValue $Family -PrefixFamily - } - - if ($null -ne $Status) { - $PSBoundParameters.Status = VerifyIPAMChoices -ProvidedValue $Status -PrefixStatus - } - - $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 - } - - function Add-NetboxIPAMAddress { - <# - .SYNOPSIS - Add a new IP address to Netbox - - .DESCRIPTION - Adds 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:\> Add-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 = VerifyIPAMChoices -ProvidedValue $Status -IPAddressStatus - - if ($null -ne $Role) { - $PSBoundParameters.Role = VerifyIPAMChoices -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 - } - - 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 - A description of the Id parameter. - - .PARAMETER Force - A description of the Force parameter. - - .PARAMETER Query - A description of the Query parameter. - - .EXAMPLE - PS C:\> Remove-NetboxIPAMAddress -Id $value1 - - .NOTES - Additional information about the function. - #> - - [CmdletBinding(ConfirmImpact = 'High', - SupportsShouldProcess = $true)] - param - ( - [Parameter(Mandatory = $true)] - [uint16[]]$Id, - - [switch]$Force - ) - - $CurrentIPs = @(Get-NetboxIPAMAddress -Id $Id -ErrorAction Stop) - - $Segments = [System.Collections.ArrayList]::new(@('ipam', 'ip-addresses')) - - foreach ($IP in $CurrentIPs) { - if ($Force -or $pscmdlet.ShouldProcess($IP.Address, "Delete")) { - $URIComponents = BuildURIComponents -URISegments $Segments.Clone() -ParametersDictionary @{'id' = $IP.Id} - - $URI = BuildNewURI -Segments $URIComponents.Segments - - InvokeNetboxRequest -URI $URI -Method DELETE - } - } - } - - function Set-NetboxIPAMAddress { - [CmdletBinding(ConfirmImpact = 'High', - 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 - ) - - if ($Status) { - $PSBoundParameters.Status = VerifyIPAMChoices -ProvidedValue $Status -IPAddressStatus - } - - if ($Role) { - $PSBoundParameters.Role = VerifyIPAMChoices -ProvidedValue $Role -IPAddressRole - } - - $Segments = [System.Collections.ArrayList]::new(@('ipam', 'ip-addresses', $Id)) - - Write-Verbose "Obtaining IPs from ID $Id" - $CurrentIP = Get-NetboxIPAMAddress -Id $Id -ErrorAction Stop - - if ($Force -or $PSCmdlet.ShouldProcess($($CurrentIP | Select-Object -ExpandProperty '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 - } - } - - - - - - - - - - - #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 *-* \ No newline at end of file diff --git a/Staging/Tests/Helpers.Tests.ps1 b/Staging/Tests/Helpers.Tests.ps1 deleted file mode 100644 index 331da0f..0000000 --- a/Staging/Tests/Helpers.Tests.ps1 +++ /dev/null @@ -1,481 +0,0 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2018 v5.5.150 - Created on: 5/8/2018 11:36 AM - Created by: Ben Claussen - Organization: NEOnet - Filename: Helpers.Tests.ps1 - =========================================================================== - .DESCRIPTION - Helper functions Pester tests -#> - -Import-Module Pester -Remove-Module NetboxPS -Force -ErrorAction SilentlyContinue - -$ModulePath = "$PSScriptRoot\..\dist\NetboxPS.psd1" - -if (Test-Path $ModulePath) { - Import-Module $ModulePath -ErrorAction Stop -} - -Describe "Helpers tests" -Tag 'Core', 'Helpers' -Fixture { - It "Should throw because we are not connected" { - { - 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' - $URIBuilder.Path | Should -BeExactly 'api//' - $URIBuilder.Scheme | Should -Be 'https' - $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") - $URIComponents.Segments | Should -Be @("segment1", "segment2") - $URIComponents.Parameters.Count | Should -BeExactly 1 - $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") - $URIComponents.Segments | Should -Be @("segment1", "segment2", '123') - $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") - $URIComponents.Segments | Should -Be @("segment1", "segment2") - $URIComponents.Parameters.Count | Should -BeExactly 1 - $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") - $URIComponents.Segments | Should -Be @("segment1", "segment2") - $URIComponents.Parameters.Count | Should -BeExactly 1 - $URIComponents.Parameters | Should -BeOfType [hashtable] - $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") - $URIComponents.Segments | Should -Be @("segment1", "segment2") - $URIComponents.Parameters.Count | Should -BeExactly 1 - $URIComponents.Parameters | Should -BeOfType [hashtable] - $URIComponents.Parameters['q'] | Should -Be 'mytestquery' - } - } - - 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 - return [pscustomobject]@{ - 'Method' = $Method - 'Uri' = $Uri - 'Headers' = $Headers - 'Timeout' = $Timeout - 'ContentType' = $ContentType - 'Body' = $Body - 'results' = 'Only results' - } - } - - Mock -CommandName 'Get-NetboxCredentials' -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] - $Result.Headers.Authorization | Should -Be "Token faketoken" - $Result.Timeout | Should -Be 5 - $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' - InvokeNetboxRequest -URI $URI -Timeout 61 - } | Should -Throw - } - } - - Context -Name "Validating choices" -Fixture { - $script:NetboxConfig.Choices.Virtualization = (Get-Content "$PSScriptRoot\VirtualizationChoices.json" -ErrorAction Stop | ConvertFrom-Json) - $script:NetboxConfig.Choices.IPAM = (Get-Content "$PSScriptRoot\IPAMChoices.json" -ErrorAction Stop | ConvertFrom-Json) - - Context -Name "Virtualization choices" -Fixture { - $MajorObject = 'Virtualization' - - 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' - - 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 - } | Should -Throw - } - } - } - - - } - - - } -} - - - - - - diff --git a/Staging/Tests/IPAM.Tests.ps1 b/Staging/Tests/IPAM.Tests.ps1 deleted file mode 100644 index fd21b2d..0000000 --- a/Staging/Tests/IPAM.Tests.ps1 +++ /dev/null @@ -1,478 +0,0 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2018 v5.5.150 - Created on: 5/10/2018 3:41 PM - Created by: Ben Claussen - Organization: NEOnet - Filename: IPAM.Tests.ps1 - =========================================================================== - .DESCRIPTION - IPAM Pester tests -#> - -Import-Module Pester -Remove-Module NetboxPS -Force -ErrorAction SilentlyContinue - -$ModulePath = "$PSScriptRoot\..\dist\NetboxPS.psd1" - -if (Test-Path $ModulePath) { - Import-Module $ModulePath -ErrorAction Stop -} - - -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]@{ - 'Method' = $Method - 'Uri' = $Uri - 'Headers' = $Headers - 'Timeout' = $Timeout - 'ContentType' = $ContentType - 'Body' = $Body - } - } - - Mock -CommandName 'Get-NetboxCredentials' -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 "VerifyIPAMChoices" -Fixture { - #It "Should return a valid integer" - } - - 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 "Add-NetboxIPAMAddress" -Fixture { - It "Should add a basic IP address" { - $Result = Add-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 add an IP with a status and role names" { - $Result = Add-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 add an IP with a status and role values" { - $Result = Add-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 { - It "Should remove a single IP" { - Mock -CommandName "Get-NetboxIPAMAddress" -ModuleName NetboxPS -MockWith { - return @{ - 'address' = '10.1.1.1/24' - 'id' = 4109 - } - } - - $Result = Remove-NetboxIPAMAddress -Id '4109' -Force - - Assert-VerifiableMock - Assert-MockCalled -CommandName "Get-NetboxIPAMAddress" -Times 1 - - $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 multiple IPs" { - Mock -CommandName "Get-NetboxIPAMAddress" -ModuleName NetboxPS -MockWith { - return @( - @{ - 'address' = '10.1.1.1/24' - 'id' = 4109 - }, - @{ - 'address' = '10.1.1.2/24' - 'id' = 4110 - } - ) - } - - $Result = Remove-NetboxIPAMAddress -Id 4109, 4110 -Force - - Assert-VerifiableMock - Assert-MockCalled -CommandName "Get-NetboxIPAMAddress" -Times 2 - - $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 { - It "Should set an IP with a new status" { - Mock -CommandName "Get-NetboxIPAMAddress" -ModuleName NetboxPS -MockWith { - return @{ - 'address' = '10.1.1.1/24' - 'id' = 4109 - } - } - - $Result = Set-NetboxIPAMAddress -Id '4109' -Status 2 -Force - - Assert-VerifiableMock - Assert-MockCalled -CommandName "Get-NetboxIPAMAddress" -Times 1 - - $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 with VRF, Tenant, and Description" { - $Result = Set-NetboxIPAMAddress -Id 4109 -VRF 10 -Tenant 14 -Description 'Test description' -Force - - Assert-VerifiableMock - Assert-MockCalled -CommandName "Get-NetboxIPAMAddress" -Times 1 - - $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 '{"vrf":10,"description":"Test description","tenant":14}' - } - } - } -} - - - - - - - - - - diff --git a/Staging/Tests/Virtualization.Tests.ps1 b/Staging/Tests/Virtualization.Tests.ps1 deleted file mode 100644 index 6b68819..0000000 --- a/Staging/Tests/Virtualization.Tests.ps1 +++ /dev/null @@ -1,404 +0,0 @@ -<# - .NOTES - =========================================================================== - Created with: SAPIEN Technologies, Inc., PowerShell Studio 2018 v5.5.150 - Created on: 5/8/2018 4:01 PM - Created by: Ben Claussen - Organization: NEOnet - Filename: Virtualization.Tests.ps1 - =========================================================================== - .DESCRIPTION - Virtualization Pester tests -#> - -Import-Module Pester -Remove-Module NetboxPS -Force -ErrorAction SilentlyContinue - -$ModulePath = "$PSScriptRoot\..\dist\NetboxPS.psd1" - -if (Test-Path $ModulePath) { - Import-Module $ModulePath -ErrorAction Stop -} - -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]@{ - 'Method' = $Method - 'Uri' = $Uri - 'Headers' = $Headers - 'Timeout' = $Timeout - 'ContentType' = $ContentType - 'Body' = $Body - } - } - - Mock -CommandName 'Get-NetboxCredentials' -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 - } - } - - 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 "Add-NetboxVirtualMachine" -Fixture { - It "Should add a basic VM" { - $Result = Add-NetboxVirtualMachine -Name 'testvm' -Cluster 1 - - 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 '{"cluster":1,"name":"testvm","status":1}' - } - - It "Should add a VM with CPUs, Memory, Disk, tenancy, and comments" { - $Result = Add-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}' - } - } - - Context -Name "Add-NetboxVirtualInterface" -Fixture { - It "Should add a basic interface" { - $Result = Add-NetboxVirtualInterface -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-NetboxVirtualInterface -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"}' - } - } - - Context -Name "Set-NetboxVirtualMachine" -Fixture { - Mock -CommandName "Get-NetboxVirtualMachine" -ModuleName NetboxPS -MockWith { - return @{ - 'Id' = 1234 - 'Name' = 'TestVM' - } - } - - It "Should set a VM to a new name" { - $Result = Set-NetboxVirtualMachine -Id 1234 -Name 'newtestname' -Force - - Assert-VerifiableMock - - $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 - - $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 - } - } - } -} - - - - - - - - - -