From 7436f53f54d73dc851bb20d7747bd9e3ee5b8e61 Mon Sep 17 00:00:00 2001 From: Ben Claussen Date: Wed, 31 Mar 2021 10:24:08 -0400 Subject: [PATCH] Update version to 1.3.3 --- NetboxPS/NetboxPS.psd1 | 4 +- NetboxPS/NetboxPS.psm1 | 175 ++++++++++++++++++++++++++++++++--------- 2 files changed, 140 insertions(+), 39 deletions(-) diff --git a/NetboxPS/NetboxPS.psd1 b/NetboxPS/NetboxPS.psd1 index 63ef84e..5601780 100644 --- a/NetboxPS/NetboxPS.psd1 +++ b/NetboxPS/NetboxPS.psd1 @@ -3,7 +3,7 @@ # # Generated by: Ben Claussen # -# Generated on: 2021-03-30 +# Generated on: 2021-03-31 # @{ @@ -12,7 +12,7 @@ RootModule = 'NetboxPS.psm1' # Version number of this module. -ModuleVersion = '1.3.2' +ModuleVersion = '1.3.3' # Supported PSEditions # CompatiblePSEditions = @() diff --git a/NetboxPS/NetboxPS.psm1 b/NetboxPS/NetboxPS.psm1 index a4b5aa6..f500181 100644 --- a/NetboxPS/NetboxPS.psm1 +++ b/NetboxPS/NetboxPS.psm1 @@ -264,21 +264,12 @@ function BuildNewURI { [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 ) @@ -289,28 +280,8 @@ function BuildNewURI { $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) + $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({ @@ -476,6 +447,22 @@ function CheckNetboxIsConnected { +#endregion + +#region File Clear-NetboxCredential.ps1 + +function Clear-NetboxCredential { + [CmdletBinding(ConfirmImpact = 'Medium', SupportsShouldProcess = $true)] + param + ( + [switch]$Force + ) + + if ($Force -or ($PSCmdlet.ShouldProcess('Netbox Credentials', 'Clear'))) { + $script:NetboxConfig.Credential = $null + } +} + #endregion #region File Connect-NetboxAPI.ps1 @@ -486,13 +473,22 @@ function Connect-NetboxAPI { Connects to the Netbox API and ensures Credential work properly .DESCRIPTION - A detailed description of the Connect-NetboxAPI function. + Connects to the Netbox API and ensures Credential work properly .PARAMETER Hostname - A description of the Hostname parameter. + The hostname for the resource such as netbox.domain.com .PARAMETER Credential - A description of the Credential parameter. + Credential object containing the API key in the password. Username is not applicable + + .PARAMETER Scheme + Scheme for the URI such as HTTP or HTTPS. Defaults to HTTPS + + .PARAMETER Port + Port for the resource. Value between 1-65535 + + .PARAMETER URI + The full URI for the resource such as "https://netbox.domain.com:8443" .EXAMPLE PS C:\> Connect-NetboxAPI -Hostname "netbox.domain.com" @@ -503,14 +499,26 @@ function Connect-NetboxAPI { Additional information about the function. #> - [CmdletBinding()] + [CmdletBinding(DefaultParameterSetName = 'Manual')] param ( - [Parameter(Mandatory = $true)] + [Parameter(ParameterSetName = 'Manual', + Mandatory = $true)] [string]$Hostname, [Parameter(Mandatory = $false)] - [pscredential]$Credential + [pscredential]$Credential, + + [Parameter(ParameterSetName = 'Manual')] + [ValidateSet('https', 'http', IgnoreCase = $true)] + [string]$Scheme = 'https', + + [Parameter(ParameterSetName = 'Manual')] + [uint16]$Port = 443, + + [Parameter(ParameterSetName = 'URI', + Mandatory = $true)] + [string]$URI ) if (-not $Credential) { @@ -524,9 +532,25 @@ function Connect-NetboxAPI { } } - $null = Set-NetboxHostName -Hostname $Hostname $null = Set-NetboxCredential -Credential $Credential + switch ($PSCmdlet.ParameterSetName) { + 'Manual' { + $uriBuilder = [System.UriBuilder]::new($Scheme, $Hostname, $Port) + } + + 'URI' { + $uriBuilder = [System.UriBuilder]::new($URI) + if ([string]::IsNullOrWhiteSpace($uriBuilder.Host)) { + throw "URI appears to be invalid. Must be in format [host.name], [scheme://host.name], or [scheme://host.name:port]" + } + } + } + + $null = Set-NetboxHostName -Hostname $uriBuilder.Host + $null = Set-NetboxHostScheme -Scheme $uriBuilder.Scheme + $null = Set-NetboxHostPort -Port $uriBuilder.Port + try { Write-Verbose "Verifying API connectivity..." $null = VerifyAPIConnectivity @@ -1689,6 +1713,38 @@ function Get-NetboxHostname { #endregion +#region File Get-NetboxHostPort.ps1 + +function Get-NetboxHostPort { + [CmdletBinding()] + param () + + Write-Verbose "Getting Netbox host port" + if ($null -eq $script:NetboxConfig.HostPort) { + throw "Netbox host port is not set! You may set it with Set-NetboxHostPort -Port 'https'" + } + + $script:NetboxConfig.HostPort +} + +#endregion + +#region File Get-NetboxHostScheme.ps1 + +function Get-NetboxHostScheme { + [CmdletBinding()] + param () + + Write-Verbose "Getting Netbox host scheme" + if ($null -eq $script:NetboxConfig.Hostscheme) { + throw "Netbox host sceme is not set! You may set it with Set-NetboxHostScheme -Scheme 'https'" + } + + $script:NetboxConfig.HostScheme +} + +#endregion + #region File Get-NetboxIPAMAddress.ps1 function Get-NetboxIPAMAddress { @@ -4237,6 +4293,51 @@ function Set-NetboxHostName { #endregion +#region File Set-NetboxHostPort.ps1 + +function Set-NetboxHostPort { + [CmdletBinding(ConfirmImpact = 'Low', + SupportsShouldProcess = $true)] + [OutputType([string])] + param + ( + [Parameter(Mandatory = $true)] + [uint16]$Port + ) + + if ($PSCmdlet.ShouldProcess('Netbox Port', 'Set')) { + $script:NetboxConfig.HostPort = $Port + $script:NetboxConfig.HostPort + } +} + +#endregion + +#region File Set-NetboxHostScheme.ps1 + +function Set-NetboxHostScheme { + [CmdletBinding(ConfirmImpact = 'Low', + SupportsShouldProcess = $true)] + [OutputType([string])] + param + ( + [Parameter(Mandatory = $false)] + [ValidateSet('https', 'http', IgnoreCase = $true)] + [string]$Scheme = 'https' + ) + + if ($PSCmdlet.ShouldProcess('Netbox Host Scheme', 'Set')) { + if ($Scheme -eq 'http') { + Write-Warning "Connecting via non-secure HTTP is not-recommended" + } + + $script:NetboxConfig.HostScheme = $Scheme + $script:NetboxConfig.HostScheme + } +} + +#endregion + #region File Set-NetboxIPAMAddress.ps1 <#