diff --git a/Functions/DCIM/DCIM.Support.ps1 b/Functions/DCIM/DCIM.Support.ps1 new file mode 100644 index 0000000..25b3130 --- /dev/null +++ b/Functions/DCIM/DCIM.Support.ps1 @@ -0,0 +1,102 @@ +function ValidateDCIMChoice { +<# + .SYNOPSIS + Internal function to validate provided values for static choices + + .DESCRIPTION + When users connect to the API, choices for each major object are cached to the config variable. + These values are then utilized to validate if the provided value from a user is valid. + + .PARAMETER ProvidedValue + The value to validate against static choices + + .PARAMETER PowerConnectionStatus + Validate against power connection status values + + .PARAMETER InterfaceTemplateFormFactor + Validate against interface template form factor values + + .PARAMETER InterfaceConnectionStatus + Validate against interface connection status values + + .PARAMETER InterfaceFormFactor + Validate against interface form factor values + + .PARAMETER ConsolePortConnectionStatus + Validate against console port connection status values + + .PARAMETER DeviceStatus + Validate against device status values + + .PARAMETER DeviceFace + Validate against device face values + + .PARAMETER RackType + Validate against rack type values + + .PARAMETER RackWidth + Validate against rack width values. + + .EXAMPLE + PS C:\> ValidateDCIMChoice -ProvidedValue 'rear' -DeviceFace + + .EXAMPLE + PS C:\> ValidateDCIMChoice -ProvidedValue 'middle' -DeviceFace + >> Invalid value middle for device:face. Must be one of: 0, 1, Front, Rear + + .OUTPUTS + This function returns the integer value if valid. Otherwise, it will throw an error. + + .NOTES + Additional information about the function. + + .FUNCTIONALITY + This cmdlet is intended to be used internally and not exposed to the user +#> + + [CmdletBinding()] + [OutputType([uint16])] + param + ( + [Parameter(Mandatory = $true)] + [object]$ProvidedValue, + + [Parameter(ParameterSetName = 'power-port:connection_status', + Mandatory = $true)] + [switch]$PowerConnectionStatus, + + [Parameter(ParameterSetName = 'interface-template:form_factor', + Mandatory = $true)] + [switch]$InterfaceTemplateFormFactor, + + [Parameter(ParameterSetName = 'interface-connection:connection_status', + Mandatory = $true)] + [switch]$InterfaceConnectionStatus, + + [Parameter(ParameterSetName = 'interface:form_factor', + Mandatory = $true)] + [switch]$InterfaceFormFactor, + + [Parameter(ParameterSetName = 'console-port:connection_status', + Mandatory = $true)] + [switch]$ConsolePortConnectionStatus, + + [Parameter(ParameterSetName = 'device:status', + Mandatory = $true)] + [switch]$DeviceStatus, + + [Parameter(ParameterSetName = 'device:face', + Mandatory = $true)] + [switch]$DeviceFace, + + [Parameter(ParameterSetName = 'rack:type', + Mandatory = $true)] + [switch]$RackType, + + [Parameter(ParameterSetName = 'rack:width', + Mandatory = $true)] + [switch]$RackWidth + ) + + ValidateChoice -MajorObject 'DCIM' -ChoiceName $PSCmdlet.ParameterSetName -ProvidedValue $ProvidedValue +} \ No newline at end of file diff --git a/Functions/DCIM/DCIM.ps1 b/Functions/DCIM/DCIM.ps1 index 6db5e73..138be0a 100644 --- a/Functions/DCIM/DCIM.ps1 +++ b/Functions/DCIM/DCIM.ps1 @@ -23,109 +23,6 @@ function Get-NetboxDCIMChoices { InvokeNetboxRequest -URI $uri } -function ValidateDCIMChoice { -<# - .SYNOPSIS - Internal function to validate provided values for static choices - - .DESCRIPTION - When users connect to the API, choices for each major object are cached to the config variable. - These values are then utilized to validate if the provided value from a user is valid. - - .PARAMETER ProvidedValue - The value to validate against static choices - - .PARAMETER PowerConnectionStatus - Validate against power connection status values - - .PARAMETER InterfaceTemplateFormFactor - Validate against interface template form factor values - - .PARAMETER InterfaceConnectionStatus - Validate against interface connection status values - - .PARAMETER InterfaceFormFactor - Validate against interface form factor values - - .PARAMETER ConsolePortConnectionStatus - Validate against console port connection status values - - .PARAMETER DeviceStatus - Validate against device status values - - .PARAMETER DeviceFace - Validate against device face values - - .PARAMETER RackType - Validate against rack type values - - .PARAMETER RackWidth - Validate against rack width values. - - .EXAMPLE - PS C:\> ValidateDCIMChoice -ProvidedValue 'rear' -DeviceFace - - .EXAMPLE - PS C:\> ValidateDCIMChoice -ProvidedValue 'middle' -DeviceFace - >> Invalid value middle for device:face. Must be one of: 0, 1, Front, Rear - - .OUTPUTS - This function returns the integer value if valid. Otherwise, it will throw an error. - - .NOTES - Additional information about the function. - - .FUNCTIONALITY - This cmdlet is intended to be used internally and not exposed to the user -#> - - [CmdletBinding()] - [OutputType([uint16])] - param - ( - [Parameter(Mandatory = $true)] - [object]$ProvidedValue, - - [Parameter(ParameterSetName = 'power-port:connection_status', - Mandatory = $true)] - [switch]$PowerConnectionStatus, - - [Parameter(ParameterSetName = 'interface-template:form_factor', - Mandatory = $true)] - [switch]$InterfaceTemplateFormFactor, - - [Parameter(ParameterSetName = 'interface-connection:connection_status', - Mandatory = $true)] - [switch]$InterfaceConnectionStatus, - - [Parameter(ParameterSetName = 'interface:form_factor', - Mandatory = $true)] - [switch]$InterfaceFormFactor, - - [Parameter(ParameterSetName = 'console-port:connection_status', - Mandatory = $true)] - [switch]$ConsolePortConnectionStatus, - - [Parameter(ParameterSetName = 'device:status', - Mandatory = $true)] - [switch]$DeviceStatus, - - [Parameter(ParameterSetName = 'device:face', - Mandatory = $true)] - [switch]$DeviceFace, - - [Parameter(ParameterSetName = 'rack:type', - Mandatory = $true)] - [switch]$RackType, - - [Parameter(ParameterSetName = 'rack:width', - Mandatory = $true)] - [switch]$RackWidth - ) - - ValidateChoice -MajorObject 'DCIM' -ChoiceName $PSCmdlet.ParameterSetName -ProvidedValue $ProvidedValue -} - #region GET commands diff --git a/Functions/IPAM/IPAM.Support.ps1 b/Functions/IPAM/IPAM.Support.ps1 new file mode 100644 index 0000000..9d00acf --- /dev/null +++ b/Functions/IPAM/IPAM.Support.ps1 @@ -0,0 +1,95 @@ +function ValidateIPAMChoice { +<# + .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:\> ValidateIPAMChoice -ProvidedValue 'loopback' -IPAddressRole + + .EXAMPLE + PS C:\> ValidateIPAMChoice -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 +} diff --git a/Functions/IPAM/IPAM.ps1 b/Functions/IPAM/IPAM.ps1 index 0edcc90..3066391 100644 --- a/Functions/IPAM/IPAM.ps1 +++ b/Functions/IPAM/IPAM.ps1 @@ -23,102 +23,7 @@ function Get-NetboxIPAMChoices { InvokeNetboxRequest -URI $uri } -function ValidateIPAMChoice { -<# - .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:\> ValidateIPAMChoice -ProvidedValue 'loopback' -IPAddressRole - - .EXAMPLE - PS C:\> ValidateIPAMChoice -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 -} - +#region GET commands function Get-NetboxIPAMAggregate { [CmdletBinding()] @@ -418,6 +323,11 @@ function Get-NetboxIPAMPrefix { InvokeNetboxRequest -URI $uri -Raw:$Raw } +#endregion GET commands + + +#region NEW commands + function New-NetboxIPAMAddress { <# .SYNOPSIS @@ -504,6 +414,58 @@ function New-NetboxIPAMAddress { InvokeNetboxRequest -URI $URI -Method POST -Body $URIComponents.Parameters -Raw:$Raw } +function New-NetboxIPAMPrefix { + [CmdletBinding()] + param + ( + [Parameter(Mandatory = $true)] + [string]$Prefix, + + [object]$Status = 'Active', + + [uint16]$Tenant, + + [object]$Role, + + [bool]$IsPool, + + [string]$Description, + + [uint16]$Site, + + [uint16]$VRF, + + [uint16]$VLAN, + + [hashtable]$Custom_Fields, + + [switch]$Raw + ) + + $PSBoundParameters.Status = ValidateIPAMChoice -ProvidedValue $Status -PrefixStatus + + <# + # As of 2018/10/18, this does not appear to be a validated IPAM choice + if ($null -ne $Role) { + $PSBoundParameters.Role = ValidateIPAMChoice -ProvidedValue $Role -PrefixRole + } + #> + + $segments = [System.Collections.ArrayList]::new(@('ipam', 'prefixes')) + + $URIComponents = BuildURIComponents -URISegments $segments -ParametersDictionary $PSBoundParameters + + $URI = BuildNewURI -Segments $URIComponents.Segments + + InvokeNetboxRequest -URI $URI -Method POST -Body $URIComponents.Parameters -Raw:$Raw +} + + +#endregion ADD commands + + +#region REMOVE commands + function Remove-NetboxIPAMAddress { <# .SYNOPSIS @@ -557,6 +519,11 @@ function Remove-NetboxIPAMAddress { } } +#endregion REMOVE commands + + +#region SET commands + function Set-NetboxIPAMAddress { [CmdletBinding(ConfirmImpact = 'Medium', SupportsShouldProcess = $true)] @@ -618,6 +585,7 @@ function Set-NetboxIPAMAddress { } } +#endregion SET commands diff --git a/Functions/Setup.Support.ps1 b/Functions/Setup.Support.ps1 new file mode 100644 index 0000000..8b618f7 --- /dev/null +++ b/Functions/Setup.Support.ps1 @@ -0,0 +1,34 @@ +function VerifyAPIConnectivity { + [CmdletBinding()] + param () + + $uriSegments = [System.Collections.ArrayList]::new(@('extras', '_choices')) + + $uri = BuildNewURI -Segments $uriSegments -SkipConnectedCheck + + InvokeNetboxRequest -URI $uri +} + +function SetupNetboxConfigVariable { + [CmdletBinding()] + param + ( + [switch]$Overwrite + ) + + Write-Verbose "Checking for NetboxConfig hashtable" + if ((-not ($script:NetboxConfig)) -or $Overwrite) { + Write-Verbose "Creating NetboxConfig hashtable" + $script:NetboxConfig = @{ + 'Connected' = $false + 'Choices' = @{ + } + } + } + + Write-Verbose "NetboxConfig hashtable already exists" +} + +function GetNetboxConfigVariable { + return $script:NetboxConfig +} \ No newline at end of file diff --git a/Functions/Setup.ps1 b/Functions/Setup.ps1 index 7442de0..70d3029 100644 --- a/Functions/Setup.ps1 +++ b/Functions/Setup.ps1 @@ -12,29 +12,6 @@ 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 = 'Low', SupportsShouldProcess = $true)] @@ -108,17 +85,6 @@ function Get-NetboxCredential { $script:NetboxConfig.Credential } -function VerifyAPIConnectivity { - [CmdletBinding()] - param () - - $uriSegments = [System.Collections.ArrayList]::new(@('extras', '_choices')) - - $uri = BuildNewURI -Segments $uriSegments -SkipConnectedCheck - - InvokeNetboxRequest -URI $uri -} - function Connect-NetboxAPI { <# .SYNOPSIS @@ -187,7 +153,7 @@ function Connect-NetboxAPI { $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.Tenancy = Get-NetboxTenancyChoices $script:NetboxConfig.Choices.Virtualization = Get-NetboxVirtualizationChoices Write-Verbose "Connection process completed" diff --git a/Functions/Virtualization/Virtualization.Support.ps1 b/Functions/Virtualization/Virtualization.Support.ps1 new file mode 100644 index 0000000..08be703 --- /dev/null +++ b/Functions/Virtualization/Virtualization.Support.ps1 @@ -0,0 +1,63 @@ +function ValidateVirtualizationChoice { +<# + .SYNOPSIS + Internal function to verify provided values for static choices + + .DESCRIPTION + When users connect to the API, choices for each major object are cached to the config variable. + These values are then utilized to verify if the provided value from a user is valid. + + .PARAMETER ProvidedValue + The value to validate against static choices + + .PARAMETER AggregateFamily + Verify against aggregate family values + + .PARAMETER PrefixFamily + Verify against prefix family values + + .PARAMETER PrefixStatus + Verify against prefix status values + + .PARAMETER IPAddressFamily + Verify against ip-address family values + + .PARAMETER IPAddressStatus + Verify against ip-address status values + + .PARAMETER IPAddressRole + Verify against ip-address role values + + .PARAMETER VLANStatus + Verify against VLAN status values + + .PARAMETER ServiceProtocol + Verify against service protocol values + + .EXAMPLE + PS C:\> VerifyIPAMChoices -ProvidedValue 'loopback' -IPAddressRole + + .EXAMPLE + PS C:\> VerifyIPAMChoices -ProvidedValue 'Loopback' -IPAddressFamily + >> Invalid value Loopback for ip-address:family. Must be one of: 4, 6, IPv4, IPv6 + + .FUNCTIONALITY + This cmdlet is intended to be used internally and not exposed to the user + + .OUTPUT + This function returns nothing if the value is valid. Otherwise, it will throw an error. +#> + + [CmdletBinding()] + param + ( + [Parameter(Mandatory = $true)] + [object]$ProvidedValue, + + [Parameter(ParameterSetName = 'virtual-machine:status', + Mandatory = $true)] + [switch]$VirtualMachineStatus + ) + + ValidateChoice -MajorObject 'Virtualization' -ChoiceName $PSCmdlet.ParameterSetName -ProvidedValue $ProvidedValue +} \ No newline at end of file diff --git a/Functions/Virtualization/Virtualization.ps1 b/Functions/Virtualization/Virtualization.ps1 index 53c7b42..ce122d1 100644 --- a/Functions/Virtualization/Virtualization.ps1 +++ b/Functions/Virtualization/Virtualization.ps1 @@ -11,70 +11,6 @@ Virtualization object functions #> -function ValidateVirtualizationChoice { -<# - .SYNOPSIS - Internal function to verify provided values for static choices - - .DESCRIPTION - When users connect to the API, choices for each major object are cached to the config variable. - These values are then utilized to verify if the provided value from a user is valid. - - .PARAMETER ProvidedValue - The value to validate against static choices - - .PARAMETER AggregateFamily - Verify against aggregate family values - - .PARAMETER PrefixFamily - Verify against prefix family values - - .PARAMETER PrefixStatus - Verify against prefix status values - - .PARAMETER IPAddressFamily - Verify against ip-address family values - - .PARAMETER IPAddressStatus - Verify against ip-address status values - - .PARAMETER IPAddressRole - Verify against ip-address role values - - .PARAMETER VLANStatus - Verify against VLAN status values - - .PARAMETER ServiceProtocol - Verify against service protocol values - - .EXAMPLE - PS C:\> VerifyIPAMChoices -ProvidedValue 'loopback' -IPAddressRole - - .EXAMPLE - PS C:\> VerifyIPAMChoices -ProvidedValue 'Loopback' -IPAddressFamily - >> Invalid value Loopback for ip-address:family. Must be one of: 4, 6, IPv4, IPv6 - - .FUNCTIONALITY - This cmdlet is intended to be used internally and not exposed to the user - - .OUTPUT - This function returns nothing if the value is valid. Otherwise, it will throw an error. -#> - - [CmdletBinding()] - param - ( - [Parameter(Mandatory = $true)] - [object]$ProvidedValue, - - [Parameter(ParameterSetName = 'virtual-machine:status', - Mandatory = $true)] - [switch]$VirtualMachineStatus - ) - - ValidateChoice -MajorObject 'Virtualization' -ChoiceName $PSCmdlet.ParameterSetName -ProvidedValue $ProvidedValue -} - #region GET commands function Get-NetboxVirtualizationChoices {