From 657a8405bc3f827e3156bc23293516b01dd6166c Mon Sep 17 00:00:00 2001 From: Ben Claussen Date: Mon, 4 May 2020 12:36:46 -0400 Subject: [PATCH] Remove parameter validation as workaround for CHOICES API endpoint until further testing --- .../DCIM/Devices/New-NetboxDCIMDevice.ps1 | 30 ++++---- .../DCIM/Devices/Set-NetboxDCIMDevice.ps1 | 14 ++-- .../Interfaces/Add-NetboxDCIMInterface.ps1 | 6 +- .../Interfaces/Set-NetboxDCIMInterface.ps1 | 6 +- .../Set-NetboxDCIMInterfaceConnection.ps1 | 6 +- .../IPAM/Address/Get-NetboxIPAMAddress.ps1 | 65 ++++++++++++----- .../IPAM/Address/New-NetboxIPAMAddress.ps1 | 41 ++++++++--- .../IPAM/Address/Remove-NetboxIPAMAddress.ps1 | 6 -- .../IPAM/Address/Set-NetboxIPAMAddress.ps1 | 32 +++++---- .../Aggregate/Get-NetboxIPAMAggregate.ps1 | 72 +++++++++++++------ .../IPAM/Prefix/Get-NetboxIPAMPrefix.ps1 | 2 +- .../IPAM/Prefix/New-NetboxIPAMPrefix.ps1 | 2 +- Functions/IPAM/Role/Get-NetboxIPAMRole.ps1 | 4 +- Functions/IPAM/VLAN/Get-NetboxIPAMVLAN.ps1 | 8 +-- Functions/IPAM/VLAN/New-NetboxIPAMVLAN.ps1 | 10 +-- Functions/Setup/Connect-NetboxAPI.ps1 | 29 +++++--- .../Setup/Support/Get-NetboxAPIDefinition.ps1 | 29 ++++++++ .../Support/SetupNetboxConfigVariable.ps1 | 1 + .../Setup/Support/VerifyAPIConnectivity.ps1 | 4 +- Functions/Tenancy/Get-NetboxTenant.ps1 | 10 +-- .../New-NetboxVirtualMachine.ps1 | 15 +++- .../Set-NetboxVirtualMachine.ps1 | 12 ++-- .../Get-NetboxVirtualMachineInterface.ps1 | 10 +-- .../Get-NetboxVirtualizationCluster.ps1 | 39 +++------- .../Get-NetboxVirtualizationClusterGroup.ps1 | 31 ++++---- 25 files changed, 294 insertions(+), 190 deletions(-) create mode 100644 Functions/Setup/Support/Get-NetboxAPIDefinition.ps1 diff --git a/Functions/DCIM/Devices/New-NetboxDCIMDevice.ps1 b/Functions/DCIM/Devices/New-NetboxDCIMDevice.ps1 index f209a93..3a6751d 100644 --- a/Functions/DCIM/Devices/New-NetboxDCIMDevice.ps1 +++ b/Functions/DCIM/Devices/New-NetboxDCIMDevice.ps1 @@ -64,21 +64,21 @@ function New-NetboxDCIMDevice { ) #endregion Parameters - if ($null -ne $Device_Role) { - # Validate device role? - } - - if ($null -ne $Device_Type) { - # Validate device type? - } - - if ($null -ne $Status) { - $PSBoundParameters.Status = ValidateDCIMChoice -ProvidedValue $Status -DeviceStatus - } - - if ($null -ne $Face) { - $PSBoundParameters.Face = ValidateDCIMChoice -ProvidedValue $Face -DeviceFace - } +# if ($null -ne $Device_Role) { +# # Validate device role? +# } +# +# if ($null -ne $Device_Type) { +# # Validate device type? +# } +# +# if ($null -ne $Status) { +# $PSBoundParameters.Status = ValidateDCIMChoice -ProvidedValue $Status -DeviceStatus +# } +# +# if ($null -ne $Face) { +# $PSBoundParameters.Face = ValidateDCIMChoice -ProvidedValue $Face -DeviceFace +# } $Segments = [System.Collections.ArrayList]::new(@('dcim', 'devices')) diff --git a/Functions/DCIM/Devices/Set-NetboxDCIMDevice.ps1 b/Functions/DCIM/Devices/Set-NetboxDCIMDevice.ps1 index e15ce9f..00b50fc 100644 --- a/Functions/DCIM/Devices/Set-NetboxDCIMDevice.ps1 +++ b/Functions/DCIM/Devices/Set-NetboxDCIMDevice.ps1 @@ -64,13 +64,13 @@ function Set-NetboxDCIMDevice { ) begin { - if ($null -ne $Status) { - $PSBoundParameters.Status = ValidateDCIMChoice -ProvidedValue $Status -DeviceStatus - } - - if ($null -ne $Face) { - $PSBoundParameters.Face = ValidateDCIMChoice -ProvidedValue $Face -DeviceFace - } +# if ($null -ne $Status) { +# $PSBoundParameters.Status = ValidateDCIMChoice -ProvidedValue $Status -DeviceStatus +# } +# +# if ($null -ne $Face) { +# $PSBoundParameters.Face = ValidateDCIMChoice -ProvidedValue $Face -DeviceFace +# } } process { diff --git a/Functions/DCIM/Interfaces/Add-NetboxDCIMInterface.ps1 b/Functions/DCIM/Interfaces/Add-NetboxDCIMInterface.ps1 index a19da07..c792d35 100644 --- a/Functions/DCIM/Interfaces/Add-NetboxDCIMInterface.ps1 +++ b/Functions/DCIM/Interfaces/Add-NetboxDCIMInterface.ps1 @@ -47,9 +47,9 @@ function Add-NetboxDCIMInterface { [uint16[]]$Tagged_VLANs ) - if ($null -ne $Form_Factor) { - $PSBoundParameters.Form_Factor = ValidateDCIMChoice -ProvidedValue $Form_Factor -InterfaceFormFactor - } +# if ($null -ne $Form_Factor) { +# $PSBoundParameters.Form_Factor = ValidateDCIMChoice -ProvidedValue $Form_Factor -InterfaceFormFactor +# } if (-not [System.String]::IsNullOrWhiteSpace($Mode)) { $PSBoundParameters.Mode = switch ($Mode) { diff --git a/Functions/DCIM/Interfaces/Set-NetboxDCIMInterface.ps1 b/Functions/DCIM/Interfaces/Set-NetboxDCIMInterface.ps1 index fbfb552..431065a 100644 --- a/Functions/DCIM/Interfaces/Set-NetboxDCIMInterface.ps1 +++ b/Functions/DCIM/Interfaces/Set-NetboxDCIMInterface.ps1 @@ -50,9 +50,9 @@ function Set-NetboxDCIMInterface { ) begin { - if ($null -ne $Form_Factor) { - $PSBoundParameters.Form_Factor = ValidateDCIMChoice -ProvidedValue $Form_Factor -InterfaceFormFactor - } +# if ($null -ne $Form_Factor) { +# $PSBoundParameters.Form_Factor = ValidateDCIMChoice -ProvidedValue $Form_Factor -InterfaceFormFactor +# } if (-not [System.String]::IsNullOrWhiteSpace($Mode)) { $PSBoundParameters.Mode = switch ($Mode) { diff --git a/Functions/DCIM/Interfaces/Set-NetboxDCIMInterfaceConnection.ps1 b/Functions/DCIM/Interfaces/Set-NetboxDCIMInterfaceConnection.ps1 index 2e2496f..0836bfc 100644 --- a/Functions/DCIM/Interfaces/Set-NetboxDCIMInterfaceConnection.ps1 +++ b/Functions/DCIM/Interfaces/Set-NetboxDCIMInterfaceConnection.ps1 @@ -60,9 +60,9 @@ function Set-NetboxDCIMInterfaceConnection { ) begin { - if ($null -ne $Connection_Status) { - $PSBoundParameters.Connection_Status = ValidateDCIMChoice -ProvidedValue $Connection_Status -InterfaceConnectionStatus - } +# if ($null -ne $Connection_Status) { +# $PSBoundParameters.Connection_Status = ValidateDCIMChoice -ProvidedValue $Connection_Status -InterfaceConnectionStatus +# } if ((@($ID).Count -gt 1) -and ($Interface_A -or $Interface_B)) { throw "Cannot set multiple connections to the same interface" diff --git a/Functions/IPAM/Address/Get-NetboxIPAMAddress.ps1 b/Functions/IPAM/Address/Get-NetboxIPAMAddress.ps1 index 5a57726..b98d00a 100644 --- a/Functions/IPAM/Address/Get-NetboxIPAMAddress.ps1 +++ b/Functions/IPAM/Address/Get-NetboxIPAMAddress.ps1 @@ -1,65 +1,92 @@ function Get-NetboxIPAMAddress { - [CmdletBinding()] + [CmdletBinding(DefaultParameterSetName = 'Query')] param ( + [Parameter(ParameterSetName = 'Query')] [string]$Address, + [Parameter(ParameterSetName = 'ByID')] [uint16[]]$Id, + [Parameter(ParameterSetName = 'Query')] [string]$Query, + [Parameter(ParameterSetName = 'Query')] [object]$Family, + [Parameter(ParameterSetName = 'Query')] [uint16]$Parent, + [Parameter(ParameterSetName = 'Query')] [byte]$Mask_Length, + [Parameter(ParameterSetName = 'Query')] [string]$VRF, + [Parameter(ParameterSetName = 'Query')] [uint16]$VRF_Id, + [Parameter(ParameterSetName = 'Query')] [string]$Tenant, + [Parameter(ParameterSetName = 'Query')] [uint16]$Tenant_Id, + [Parameter(ParameterSetName = 'Query')] [string]$Device, + [Parameter(ParameterSetName = 'Query')] [uint16]$Device_ID, + [Parameter(ParameterSetName = 'Query')] [string]$Virtual_Machine, + [Parameter(ParameterSetName = 'Query')] [uint16]$Virtual_Machine_Id, + [Parameter(ParameterSetName = 'Query')] [uint16]$Interface_Id, + [Parameter(ParameterSetName = 'Query')] [object]$Status, + [Parameter(ParameterSetName = 'Query')] [object]$Role, + [Parameter(ParameterSetName = 'Query')] [uint16]$Limit, + [Parameter(ParameterSetName = 'Query')] [uint16]$Offset, [switch]$Raw ) - if ($null -ne $Family) { - $PSBoundParameters.Family = ValidateIPAMChoice -ProvidedValue $Family -IPAddressFamily + switch ($PSCmdlet.ParameterSetName) { + 'ById' { + foreach ($IP_ID in $Id) { + $Segments = [System.Collections.ArrayList]::new(@('ipam', 'ip-addresses', $IP_ID)) + + $URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id' + + $uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters + + InvokeNetboxRequest -URI $uri -Raw:$Raw + } + + break + } + + default { + $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 + + break + } } - - if ($null -ne $Status) { - $PSBoundParameters.Status = ValidateIPAMChoice -ProvidedValue $Status -IPAddressStatus - } - - if ($null -ne $Role) { - $PSBoundParameters.Role = ValidateIPAMChoice -ProvidedValue $Role -IPAddressRole - } - - $Segments = [System.Collections.ArrayList]::new(@('ipam', 'ip-addresses')) - - $URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters - - $uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters - - InvokeNetboxRequest -URI $uri -Raw:$Raw } \ No newline at end of file diff --git a/Functions/IPAM/Address/New-NetboxIPAMAddress.ps1 b/Functions/IPAM/Address/New-NetboxIPAMAddress.ps1 index 0ee365a..ce45fec 100644 --- a/Functions/IPAM/Address/New-NetboxIPAMAddress.ps1 +++ b/Functions/IPAM/Address/New-NetboxIPAMAddress.ps1 @@ -47,6 +47,9 @@ function New-NetboxIPAMAddress { .PARAMETER Description Description of IP address + .PARAMETER Force + A description of the Force parameter. + .PARAMETER Raw Return raw results from API service @@ -57,7 +60,8 @@ function New-NetboxIPAMAddress { Additional information about the function. #> - [CmdletBinding()] + [CmdletBinding(ConfirmImpact = 'Low', + SupportsShouldProcess = $true)] [OutputType([pscustomobject])] param ( @@ -80,20 +84,35 @@ function New-NetboxIPAMAddress { [string]$Description, + [switch]$Force, + [switch]$Raw ) - $PSBoundParameters.Status = ValidateIPAMChoice -ProvidedValue $Status -IPAddressStatus + $Segments = [System.Collections.ArrayList]::new(@('ipam', 'ip-addresses')) + $Method = 'POST' - if ($null -ne $Role) { - $PSBoundParameters.Role = ValidateIPAMChoice -ProvidedValue $Role -IPAddressRole - } - - $segments = [System.Collections.ArrayList]::new(@('ipam', 'ip-addresses')) - - $URIComponents = BuildURIComponents -URISegments $segments -ParametersDictionary $PSBoundParameters +# # Value validation +# $ModelDefinition = GetModelDefinitionFromURIPath -Segments $Segments -Method $Method +# $EnumProperties = GetModelEnumProperties -ModelDefinition $ModelDefinition +# +# foreach ($Property in $EnumProperties.Keys) { +# if ($PSBoundParameters.ContainsKey($Property)) { +# Write-Verbose "Validating property [$Property] with value [$($PSBoundParameters.$Property)]" +# $PSBoundParameters.$Property = ValidateValue -ModelDefinition $ModelDefinition -Property $Property -ProvidedValue $PSBoundParameters.$Property +# } +# } +# + $URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters $URI = BuildNewURI -Segments $URIComponents.Segments - InvokeNetboxRequest -URI $URI -Method POST -Body $URIComponents.Parameters -Raw:$Raw -} \ No newline at end of file + if ($Force -or $PSCmdlet.ShouldProcess($Address, 'Create new IP address')) { + InvokeNetboxRequest -URI $URI -Method $Method -Body $URIComponents.Parameters -Raw:$Raw + } +} + + + + + diff --git a/Functions/IPAM/Address/Remove-NetboxIPAMAddress.ps1 b/Functions/IPAM/Address/Remove-NetboxIPAMAddress.ps1 index da80014..48871db 100644 --- a/Functions/IPAM/Address/Remove-NetboxIPAMAddress.ps1 +++ b/Functions/IPAM/Address/Remove-NetboxIPAMAddress.ps1 @@ -43,9 +43,6 @@ function Remove-NetboxIPAMAddress { [switch]$Force ) - begin { - } - process { foreach ($IPId in $Id) { $CurrentIP = Get-NetboxIPAMAddress -Id $IPId -ErrorAction Stop @@ -59,7 +56,4 @@ function Remove-NetboxIPAMAddress { } } } - - end { - } } \ No newline at end of file diff --git a/Functions/IPAM/Address/Set-NetboxIPAMAddress.ps1 b/Functions/IPAM/Address/Set-NetboxIPAMAddress.ps1 index de2d07e..5b8614e 100644 --- a/Functions/IPAM/Address/Set-NetboxIPAMAddress.ps1 +++ b/Functions/IPAM/Address/Set-NetboxIPAMAddress.ps1 @@ -43,20 +43,31 @@ function Set-NetboxIPAMAddress { ) begin { - if ($Status) { - $PSBoundParameters.Status = ValidateIPAMChoice -ProvidedValue $Status -IPAddressStatus - } - - if ($Role) { - $PSBoundParameters.Role = ValidateIPAMChoice -ProvidedValue $Role -IPAddressRole - } +# Write-Verbose "Validating enum properties" +# $Segments = [System.Collections.ArrayList]::new(@('ipam', 'ip-addresses', 0)) + $Method = 'PATCH' +# +# # Value validation +# $ModelDefinition = GetModelDefinitionFromURIPath -Segments $Segments -Method $Method +# $EnumProperties = GetModelEnumProperties -ModelDefinition $ModelDefinition +# +# foreach ($Property in $EnumProperties.Keys) { +# if ($PSBoundParameters.ContainsKey($Property)) { +# Write-Verbose "Validating property [$Property] with value [$($PSBoundParameters.$Property)]" +# $PSBoundParameters.$Property = ValidateValue -ModelDefinition $ModelDefinition -Property $Property -ProvidedValue $PSBoundParameters.$Property +# } else { +# Write-Verbose "User did not provide a value for [$Property]" +# } +# } +# +# Write-Verbose "Finished enum validation" } process { foreach ($IPId in $Id) { $Segments = [System.Collections.ArrayList]::new(@('ipam', 'ip-addresses', $IPId)) - Write-Verbose "Obtaining IPs from ID $IPId" + Write-Verbose "Obtaining IP from ID $IPId" $CurrentIP = Get-NetboxIPAMAddress -Id $IPId -ErrorAction Stop if ($Force -or $PSCmdlet.ShouldProcess($CurrentIP.Address, 'Set')) { @@ -64,11 +75,8 @@ function Set-NetboxIPAMAddress { $URI = BuildNewURI -Segments $URIComponents.Segments - InvokeNetboxRequest -URI $URI -Body $URIComponents.Parameters -Method PATCH + InvokeNetboxRequest -URI $URI -Body $URIComponents.Parameters -Method $Method } } } - - end { - } } \ No newline at end of file diff --git a/Functions/IPAM/Aggregate/Get-NetboxIPAMAggregate.ps1 b/Functions/IPAM/Aggregate/Get-NetboxIPAMAggregate.ps1 index 03e5255..a696bc6 100644 --- a/Functions/IPAM/Aggregate/Get-NetboxIPAMAggregate.ps1 +++ b/Functions/IPAM/Aggregate/Get-NetboxIPAMAggregate.ps1 @@ -13,37 +13,67 @@ function Get-NetboxIPAMAggregate { - [CmdletBinding()] + [CmdletBinding(DefaultParameterSetName = 'Query')] param ( - [uint16]$Limit, - - [uint16]$Offset, - - [object]$Family, - - [datetime]$Date_Added, - - [uint16[]]$Id, - + [Parameter(ParameterSetName = 'Query')] [string]$Query, + [Parameter(ParameterSetName = 'ByID')] + [uint16[]]$Id, + + [Parameter(ParameterSetName = 'Query')] + [string]$Prefix, + + [Parameter(ParameterSetName = 'Query')] + [object]$Family, + + [Parameter(ParameterSetName = 'Query')] [uint16]$RIR_Id, + [Parameter(ParameterSetName = 'Query')] [string]$RIR, + [Parameter(ParameterSetName = 'Query')] + [datetime]$Date_Added, + + [Parameter(ParameterSetName = 'Query')] + [uint16]$Limit, + + [Parameter(ParameterSetName = 'Query')] + [uint16]$Offset, + [switch]$Raw ) - if ($null -ne $Family) { - $PSBoundParameters.Family = ValidateIPAMChoice -ProvidedValue $Family -AggregateFamily +# if ($null -ne $Family) { +# $PSBoundParameters.Family = ValidateIPAMChoice -ProvidedValue $Family -AggregateFamily + # } + + switch ($PSCmdlet.ParameterSetName) { + 'ById' { + foreach ($IP_ID in $Id) { + $Segments = [System.Collections.ArrayList]::new(@('ipam', 'aggregates', $IP_ID)) + + $URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id' + + $uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters + + InvokeNetboxRequest -URI $uri -Raw:$Raw + } + break + } + + default { + $Segments = [System.Collections.ArrayList]::new(@('ipam', 'aggregates')) + + $URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters + + $uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters + + InvokeNetboxRequest -URI $uri -Raw:$Raw + + break + } } - - $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 } \ No newline at end of file diff --git a/Functions/IPAM/Prefix/Get-NetboxIPAMPrefix.ps1 b/Functions/IPAM/Prefix/Get-NetboxIPAMPrefix.ps1 index 1236046..c6668d7 100644 --- a/Functions/IPAM/Prefix/Get-NetboxIPAMPrefix.ps1 +++ b/Functions/IPAM/Prefix/Get-NetboxIPAMPrefix.ps1 @@ -93,7 +93,7 @@ function Get-NetboxIPAMPrefix { Additional information about the function. #> - [CmdletBinding()] + [CmdletBinding(DefaultParameterSetName = 'Query')] param ( [string]$Prefix, diff --git a/Functions/IPAM/Prefix/New-NetboxIPAMPrefix.ps1 b/Functions/IPAM/Prefix/New-NetboxIPAMPrefix.ps1 index a085eab..c9c7577 100644 --- a/Functions/IPAM/Prefix/New-NetboxIPAMPrefix.ps1 +++ b/Functions/IPAM/Prefix/New-NetboxIPAMPrefix.ps1 @@ -40,7 +40,7 @@ function New-NetboxIPAMPrefix { [switch]$Raw ) - $PSBoundParameters.Status = ValidateIPAMChoice -ProvidedValue $Status -PrefixStatus +# $PSBoundParameters.Status = ValidateIPAMChoice -ProvidedValue $Status -PrefixStatus <# # As of 2018/10/18, this does not appear to be a validated IPAM choice diff --git a/Functions/IPAM/Role/Get-NetboxIPAMRole.ps1 b/Functions/IPAM/Role/Get-NetboxIPAMRole.ps1 index 03cbb64..1d4cc03 100644 --- a/Functions/IPAM/Role/Get-NetboxIPAMRole.ps1 +++ b/Functions/IPAM/Role/Get-NetboxIPAMRole.ps1 @@ -41,11 +41,11 @@ function Get-NetboxIPAMRole { [CmdletBinding()] param ( - [uint16[]]$Id, + [string]$Name, [string]$Query, - [string]$Name, + [uint16[]]$Id, [string]$Slug, diff --git a/Functions/IPAM/VLAN/Get-NetboxIPAMVLAN.ps1 b/Functions/IPAM/VLAN/Get-NetboxIPAMVLAN.ps1 index 025c028..b85f545 100644 --- a/Functions/IPAM/VLAN/Get-NetboxIPAMVLAN.ps1 +++ b/Functions/IPAM/VLAN/Get-NetboxIPAMVLAN.ps1 @@ -16,10 +16,6 @@ function Get-NetboxIPAMVLAN { [CmdletBinding()] param ( - [uint16]$Limit, - - [uint16]$Offset, - [uint16]$VID, [uint16[]]$Id, @@ -52,6 +48,10 @@ function Get-NetboxIPAMVLAN { [uint16]$Role_Id, + [uint16]$Limit, + + [uint16]$Offset, + [switch]$Raw ) diff --git a/Functions/IPAM/VLAN/New-NetboxIPAMVLAN.ps1 b/Functions/IPAM/VLAN/New-NetboxIPAMVLAN.ps1 index bc55aed..c846296 100644 --- a/Functions/IPAM/VLAN/New-NetboxIPAMVLAN.ps1 +++ b/Functions/IPAM/VLAN/New-NetboxIPAMVLAN.ps1 @@ -63,11 +63,11 @@ [switch]$Raw ) - $PSBoundParameters.Status = ValidateIPAMChoice -ProvidedValue $Status -VLANStatus - - if ($null -ne $Role) { - $PSBoundParameters.Role = ValidateIPAMChoice -ProvidedValue $Role -IPAddressRole - } +# $PSBoundParameters.Status = ValidateIPAMChoice -ProvidedValue $Status -VLANStatus +# +# if ($null -ne $Role) { +# $PSBoundParameters.Role = ValidateIPAMChoice -ProvidedValue $Role -IPAddressRole +# } $segments = [System.Collections.ArrayList]::new(@('ipam', 'vlans')) diff --git a/Functions/Setup/Connect-NetboxAPI.ps1 b/Functions/Setup/Connect-NetboxAPI.ps1 index c4e9809..9c372b2 100644 --- a/Functions/Setup/Connect-NetboxAPI.ps1 +++ b/Functions/Setup/Connect-NetboxAPI.ps1 @@ -48,8 +48,6 @@ 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 @@ -60,14 +58,25 @@ } } - Write-Verbose "Caching static choices" - $script:NetboxConfig.Choices.Circuits = Get-NetboxCircuitsChoices - $script:NetboxConfig.Choices.DCIM = Get-NetboxDCIMChoices # Not completed yet - $script:NetboxConfig.Choices.Extras = Get-NetboxExtrasChoices - $script:NetboxConfig.Choices.IPAM = Get-NetboxIPAMChoices - #$script:NetboxConfig.Choices.Secrets = Get-NetboxSecretsChoices # Not completed yet - #$script:NetboxConfig.Choices.Tenancy = Get-NetboxTenancyChoices - $script:NetboxConfig.Choices.Virtualization = Get-NetboxVirtualizationChoices + Write-Verbose "Caching API definition" + $script:NetboxConfig.APIDefinition = Get-NetboxAPIDefinition + + if ([version]$script:NetboxConfig.APIDefinition.info.version -lt 2.8) { + $Script:NetboxConfig.Connected = $false + throw "Netbox version is incompatible with this PS module. Requires >=2.8.*, found version $($script:NetboxConfig.APIDefinition.info.version)" + } + + $script:NetboxConfig.Connected = $true + Write-Verbose "Successfully connected!" + + #Write-Verbose "Caching static choices" + #$script:NetboxConfig.Choices.Circuits = Get-NetboxCircuitsChoices + #$script:NetboxConfig.Choices.DCIM = Get-NetboxDCIMChoices # Not completed yet + #$script:NetboxConfig.Choices.Extras = Get-NetboxExtrasChoices + #$script:NetboxConfig.Choices.IPAM = Get-NetboxIPAMChoices + ##$script:NetboxConfig.Choices.Secrets = Get-NetboxSecretsChoices # Not completed yet + ##$script:NetboxConfig.Choices.Tenancy = Get-NetboxTenancyChoices + #$script:NetboxConfig.Choices.Virtualization = Get-NetboxVirtualizationChoices Write-Verbose "Connection process completed" } \ No newline at end of file diff --git a/Functions/Setup/Support/Get-NetboxAPIDefinition.ps1 b/Functions/Setup/Support/Get-NetboxAPIDefinition.ps1 new file mode 100644 index 0000000..b525a2e --- /dev/null +++ b/Functions/Setup/Support/Get-NetboxAPIDefinition.ps1 @@ -0,0 +1,29 @@ +<# + .NOTES + =========================================================================== + Created with: SAPIEN Technologies, Inc., PowerShell Studio 2020 v5.7.174 + Created on: 4/28/2020 11:57 + Created by: Claussen + Organization: NEOnet + Filename: Get-NetboxAPIDefinition.ps1 + =========================================================================== + .DESCRIPTION + A description of the file. +#> + + + +function Get-NetboxAPIDefinition { + [CmdletBinding()] + param () + + #$URI = "https://netbox.neonet.org/api/docs/?format=openapi" + + $Segments = [System.Collections.ArrayList]::new(@('docs')) + + $URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary @{'format' = 'openapi'} + + $URI = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters + + InvokeNetboxRequest -URI $URI -Timeout 10 +} diff --git a/Functions/Setup/Support/SetupNetboxConfigVariable.ps1 b/Functions/Setup/Support/SetupNetboxConfigVariable.ps1 index 8c28e27..20d84a8 100644 --- a/Functions/Setup/Support/SetupNetboxConfigVariable.ps1 +++ b/Functions/Setup/Support/SetupNetboxConfigVariable.ps1 @@ -12,6 +12,7 @@ 'Connected' = $false 'Choices' = @{ } + 'APIDefinition' = $null } } diff --git a/Functions/Setup/Support/VerifyAPIConnectivity.ps1 b/Functions/Setup/Support/VerifyAPIConnectivity.ps1 index dc461d0..b53760e 100644 --- a/Functions/Setup/Support/VerifyAPIConnectivity.ps1 +++ b/Functions/Setup/Support/VerifyAPIConnectivity.ps1 @@ -2,9 +2,9 @@ [CmdletBinding()] param () - $uriSegments = [System.Collections.ArrayList]::new(@('extras', '_choices')) + $uriSegments = [System.Collections.ArrayList]::new(@('extras')) - $uri = BuildNewURI -Segments $uriSegments -SkipConnectedCheck + $uri = BuildNewURI -Segments $uriSegments -Parameters @{'format' = 'json'} -SkipConnectedCheck InvokeNetboxRequest -URI $uri } \ No newline at end of file diff --git a/Functions/Tenancy/Get-NetboxTenant.ps1 b/Functions/Tenancy/Get-NetboxTenant.ps1 index 4686223..32ca539 100644 --- a/Functions/Tenancy/Get-NetboxTenant.ps1 +++ b/Functions/Tenancy/Get-NetboxTenant.ps1 @@ -16,12 +16,10 @@ function Get-NetboxTenant { [CmdletBinding()] param ( - [uint16]$Limit, - - [uint16]$Offset, - [string]$Name, + [string]$Slug, + [uint16[]]$Id, [string]$Query, @@ -32,6 +30,10 @@ function Get-NetboxTenant { [hashtable]$CustomFields, + [uint16]$Limit, + + [uint16]$Offset, + [switch]$Raw ) diff --git a/Functions/Virtualization/VirtualMachine/New-NetboxVirtualMachine.ps1 b/Functions/Virtualization/VirtualMachine/New-NetboxVirtualMachine.ps1 index 31bc926..6798c36 100644 --- a/Functions/Virtualization/VirtualMachine/New-NetboxVirtualMachine.ps1 +++ b/Functions/Virtualization/VirtualMachine/New-NetboxVirtualMachine.ps1 @@ -46,7 +46,14 @@ function New-NetboxVirtualMachine { [string]$Comments ) - $PSBoundParameters.Status = ValidateVirtualizationChoice -ProvidedValue $Status -VirtualMachineStatus +# $ModelDefinition = $script:NetboxConfig.APIDefinition.definitions.WritableVirtualMachineWithConfigContext +# +# # Validate the status against the APIDefinition +# if ($ModelDefinition.properties.status.enum -inotcontains $Status) { +# throw ("Invalid value [] for Status. Must be one of []" -f $Status, ($ModelDefinition.properties.status.enum -join ', ')) +# } +# + #$PSBoundParameters.Status = ValidateVirtualizationChoice -ProvidedValue $Status -VirtualMachineStatus $Segments = [System.Collections.ArrayList]::new(@('virtualization', 'virtual-machines')) @@ -55,4 +62,8 @@ function New-NetboxVirtualMachine { $URI = BuildNewURI -Segments $URIComponents.Segments InvokeNetboxRequest -URI $URI -Method POST -Body $URIComponents.Parameters -} \ No newline at end of file +} + + + + diff --git a/Functions/Virtualization/VirtualMachine/Set-NetboxVirtualMachine.ps1 b/Functions/Virtualization/VirtualMachine/Set-NetboxVirtualMachine.ps1 index 3cb7aff..abfaac5 100644 --- a/Functions/Virtualization/VirtualMachine/Set-NetboxVirtualMachine.ps1 +++ b/Functions/Virtualization/VirtualMachine/Set-NetboxVirtualMachine.ps1 @@ -50,19 +50,19 @@ function Set-NetboxVirtualMachine { [switch]$Force ) - if ($null -ne $Status) { - $PSBoundParameters.Status = ValidateVirtualizationChoice -ProvidedValue $Status -VirtualMachineStatus - } - +# if ($null -ne $Status) { +# $PSBoundParameters.Status = ValidateVirtualizationChoice -ProvidedValue $Status -VirtualMachineStatus +# } +# $Segments = [System.Collections.ArrayList]::new(@('virtualization', 'virtual-machines', $Id)) Write-Verbose "Obtaining VM from ID $Id" - $CurrentVM = Get-NetboxVirtualMachine -Id $Id -ErrorAction Stop + #$CurrentVM = Get-NetboxVirtualMachine -Id $Id -ErrorAction Stop Write-Verbose "Finished obtaining VM" - if ($Force -or $pscmdlet.ShouldProcess($CurrentVM.Name, "Set")) { + if ($Force -or $pscmdlet.ShouldProcess($ID, "Set properties on VM ID")) { $URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters -SkipParameterByName 'Id', 'Force' $URI = BuildNewURI -Segments $URIComponents.Segments diff --git a/Functions/Virtualization/VirtualMachineInterface/Get-NetboxVirtualMachineInterface.ps1 b/Functions/Virtualization/VirtualMachineInterface/Get-NetboxVirtualMachineInterface.ps1 index e1438e4..0b0c3c4 100644 --- a/Functions/Virtualization/VirtualMachineInterface/Get-NetboxVirtualMachineInterface.ps1 +++ b/Functions/Virtualization/VirtualMachineInterface/Get-NetboxVirtualMachineInterface.ps1 @@ -60,15 +60,13 @@ function Get-NetboxVirtualMachineInterface { [CmdletBinding()] param ( - [uint16]$Limit, - - [uint16]$Offset, - [Parameter(ValueFromPipeline = $true)] [uint16]$Id, [string]$Name, + [string]$Query, + [boolean]$Enabled, [uint16]$MTU, @@ -79,6 +77,10 @@ function Get-NetboxVirtualMachineInterface { [string]$MAC_Address, + [uint16]$Limit, + + [uint16]$Offset, + [switch]$Raw ) diff --git a/Functions/Virtualization/VirtualizationCluster/Get-NetboxVirtualizationCluster.ps1 b/Functions/Virtualization/VirtualizationCluster/Get-NetboxVirtualizationCluster.ps1 index 327d948..bb373a6 100644 --- a/Functions/Virtualization/VirtualizationCluster/Get-NetboxVirtualizationCluster.ps1 +++ b/Functions/Virtualization/VirtualizationCluster/Get-NetboxVirtualizationCluster.ps1 @@ -66,16 +66,11 @@ function Get-NetboxVirtualizationCluster { [CmdletBinding()] param ( - [uint16]$Limit, - - [uint16]$Offset, + [string]$Name, [Alias('q')] [string]$Query, - [string]$Name, - - [Alias('id__in')] [uint16[]]$Id, [string]$Group, @@ -90,36 +85,18 @@ function Get-NetboxVirtualizationCluster { [uint16]$Site_Id, + [uint16]$Limit, + + [uint16]$Offset, + [switch]$Raw ) - $uriSegments = [System.Collections.ArrayList]::new(@('virtualization', 'clusters')) + $Segments = [System.Collections.ArrayList]::new(@('virtualization', 'clusters')) - $URIParameters = @{ - } + $URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters - 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 + $uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters InvokeNetboxRequest -URI $uri -Raw:$Raw } \ No newline at end of file diff --git a/Functions/Virtualization/VirtualizationCluster/Get-NetboxVirtualizationClusterGroup.ps1 b/Functions/Virtualization/VirtualizationCluster/Get-NetboxVirtualizationClusterGroup.ps1 index f558bd8..467e716 100644 --- a/Functions/Virtualization/VirtualizationCluster/Get-NetboxVirtualizationClusterGroup.ps1 +++ b/Functions/Virtualization/VirtualizationCluster/Get-NetboxVirtualizationClusterGroup.ps1 @@ -16,33 +16,28 @@ function Get-NetboxVirtualizationClusterGroup { [CmdletBinding()] param ( - [uint16]$Limit, - - [uint16]$Offset, - [string]$Name, [string]$Slug, + [string]$Description, + + [string]$Query, + + [uint32[]]$Id, + + [uint16]$Limit, + + [uint16]$Offset, + [switch]$Raw ) - $uriSegments = [System.Collections.ArrayList]::new(@('virtualization', 'cluster-groups')) + $Segments = [System.Collections.ArrayList]::new(@('virtualization', 'cluster-groups')) - $URIParameters = @{ - } + $URIComponents = BuildURIComponents -URISegments $Segments -ParametersDictionary $PSBoundParameters - 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 + $uri = BuildNewURI -Segments $URIComponents.Segments -Parameters $URIComponents.Parameters InvokeNetboxRequest -URI $uri -Raw:$Raw } \ No newline at end of file