This commit is contained in:
Wago Louage 2024-08-28 14:52:27 +00:00 committed by GitHub
commit 2fef45b0e1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 59 additions and 48 deletions

View file

@ -14,6 +14,8 @@ function Set-NetboxIPAMAddress {
[uint64]$Tenant,
[uint64][]$Tags,
[uint64]$VRF,
[object]$Role,
@ -80,4 +82,4 @@ function Set-NetboxIPAMAddress {
}
}
}
}
}

View file

@ -271,80 +271,89 @@ function Add-NetboxVirtualMachineInterface {
function BuildNewURI {
<#
.SYNOPSIS
Create a new URI for Netbox
.DESCRIPTION
Internal function used to build a URIBuilder object.
.PARAMETER Hostname
Hostname of the Netbox API
.PARAMETER Segments
Array of strings for each segment in the URL path
.PARAMETER Parameters
Hashtable of query parameters to include
.PARAMETER HTTPS
Whether to use HTTPS or HTTP
.PARAMETER Port
A description of the Port parameter.
.PARAMETER APIInfo
A description of the APIInfo parameter.
.EXAMPLE
PS C:\> BuildNewURI
.NOTES
Additional information about the function.
#>
<#
.SYNOPSIS
Create a new URI for Netbox
.DESCRIPTION
Internal function used to build a URIBuilder object.
.PARAMETER Hostname
Hostname of the Netbox API
.PARAMETER Segments
Array of strings for each segment in the URL path
.PARAMETER Parameters
Hashtable of query parameters to include
.PARAMETER HTTPS
Whether to use HTTPS or HTTP
.PARAMETER Port
A description of the Port parameter.
.PARAMETER APIInfo
A description of the APIInfo parameter.
.EXAMPLE
PS C:\> BuildNewURI
.NOTES
Additional information about the function.
#>
[CmdletBinding()]
[OutputType([System.UriBuilder])]
param
(
[Parameter(Mandatory = $false)]
[string[]]$Segments,
[Parameter(Mandatory = $false)]
[hashtable]$Parameters,
[switch]$SkipConnectedCheck
)
Write-Verbose "Building URI"
if (-not $SkipConnectedCheck) {
# There is no point in continuing if we have not successfully connected to an API
$null = CheckNetboxIsConnected
}
# Begin a URI builder with HTTP/HTTPS and the provided hostname
$uriBuilder = [System.UriBuilder]::new($script:NetboxConfig.HostScheme, $script:NetboxConfig.Hostname, $script:NetboxConfig.HostPort)
# Generate the path by trimming excess slashes and whitespace from the $segments[] and joining together
$uriBuilder.Path = "api/{0}/" -f ($Segments.ForEach({
$_.trim('/').trim()
}) -join '/')
Write-Verbose " URIPath: $($uriBuilder.Path)"
if ($parameters) {
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)
[System.Collections.Specialized.NameValueCollection]$URIParams = [System.Web.HttpUtility]::ParseQueryString($uriBuilder.Query)
foreach ($param in $Parameters.GetEnumerator()) {
Write-Verbose " Adding URI parameter $($param.Key):$($param.Value)"
$URIParams[$param.Key] = $param.Value
if ($param.Key -eq 'q') {
# Append the query string directly
$uriBuilder.Query = $uriBuilder.Query.TrimStart('?') + '&' + $param.Value
}
else {
$URIParams[$param.Key] = $param.Value
}
}
$uriBuilder.Query = $URIParams.ToString()
# Combine the existing query with new parameters
$existingQuery = $uriBuilder.Query.TrimStart('?')
$newQuery = $URIParams.ToString()
$uriBuilder.Query = ($existingQuery + '&' + $newQuery).Trim('&')
}
Write-Verbose " Completed building URIBuilder"
# Return the entire UriBuilder object
$uriBuilder