Public/Vlans.ps1
# # Copyright 2020, Alexis La Goutte <alexis dot lagoutte at gmail dot com> # # SPDX-License-Identifier: Apache-2.0 # function Add-ArubaCXVlans { <# .SYNOPSIS Add Aruba CX Vlan .DESCRIPTION Add Vlan (name, description, vsx_sync...) .EXAMPLE Add-ArubaCXVlans -name Vlan 2 -id 2 Add Vlan id 2 named Vlan 2 .EXAMPLE Add-ArubaCXVlans -name Vlan 2 -id 2 -description "Add via PowerArubaCX" -voice Add Vlan with a description and enable voice .EXAMPLE Add-ArubaCXVlans -name Vlan 2 -id 2 -admin down -vsx_sync Add Vlan with a VSX Sync and admin down #> [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseSingularNouns", "")] Param( [Parameter (Mandatory = $true)] [ValidateRange(1, 4096)] [int]$id, [Parameter (Mandatory = $true)] [string]$name, [Parameter (Mandatory = $false)] [string]$description, [Parameter (Mandatory = $false)] [ValidateSet('up', 'down')] [string]$admin, [Parameter (Mandatory = $false)] [switch]$voice, [Parameter (Mandatory = $false)] [switch]$vsx_sync, [Parameter (Mandatory = $False)] [ValidateNotNullOrEmpty()] [PSObject]$connection = $DefaultArubaCXConnection ) Begin { } Process { $uri = "system/vlans" $_vlan = new-Object -TypeName PSObject $_vlan | add-member -name "id" -membertype NoteProperty -Value $id $_vlan | add-member -name "name" -membertype NoteProperty -Value $name if ( $PsBoundParameters.ContainsKey('description') ) { $_vlan | add-member -name "description" -membertype NoteProperty -Value $description } if ( $PsBoundParameters.ContainsKey('admin') ) { $_vlan | add-member -name "admin" -membertype NoteProperty -Value $admin } if ( $PsBoundParameters.ContainsKey('voice') ) { if ($voice) { $_vlan | add-member -name "voice" -membertype NoteProperty -Value $true } else { $_vlan | add-member -name "voice" -membertype NoteProperty -Value $false } } if ( $PsBoundParameters.ContainsKey('vsx_sync') ) { if ($vsx_sync) { $_vlan | add-member -name "vsx_sync" -membertype NoteProperty -Value @("all_attributes_and_dependents") } else { $_vlan | add-member -name "vsx_sync" -membertype NoteProperty -Value "" } } $response = Invoke-ArubaCXRestMethod -uri $uri -method 'POST' -body $_vlan -connection $connection $response Get-ArubaCXVlans -id $id -connection $connection } End { } } function Get-ArubaCXVlans { <# .SYNOPSIS Get list of all Aruba CX Vlan .DESCRIPTION Get list of all Aruba CX Vlan (name, description, vsx_sync...) .EXAMPLE Get-ArubaCXVlans Get list of all vlan (name, description, vsx_sync...) .EXAMPLE Get-ArubaCXVlans -id 23 Get vlan with id 23 .EXAMPLE Get-ArubaCXVlans -name MyVlan Get vlan named MyVlan #> [CmdletBinding(DefaultParametersetname = "Default")] [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseSingularNouns", "")] Param( [Parameter (Mandatory = $false, ParameterSetName = "id")] [ValidateRange(1, 4096)] [int]$id, [Parameter (Mandatory = $false, ParameterSetName = "name")] [string]$name, [Parameter(Mandatory = $false)] [ValidateRange(1, 4)] [Int]$depth, [Parameter(Mandatory = $false)] [ValidateSet("configuration", "status", "statistics", "writable")] [String]$selector, [Parameter(Mandatory = $false)] [String[]]$attributes, [Parameter(Mandatory = $false)] [switch]$vsx_peer, [Parameter (Mandatory = $False)] [ValidateNotNullOrEmpty()] [PSObject]$connection = $DefaultArubaCXConnection ) Begin { } Process { $invokeParams = @{ } if ( $PsBoundParameters.ContainsKey('depth') ) { $invokeParams.add( 'depth', $depth ) } if ( $PsBoundParameters.ContainsKey('selector') ) { #You need to specify a vlan for use writable selector (it is not possible to use on collections...) if ($PSCmdlet.ParameterSetName -eq "Default" -and $selector -eq "writable") { Throw "You need to specify a vlan (id or name) to use writable selector" } $invokeParams.add( 'selector', $selector ) } if ( $PsBoundParameters.ContainsKey('attributes') ) { $invokeParams.add( 'attributes', $attributes ) } if ( $PsBoundParameters.ContainsKey('vsx_peer') ) { $invokeParams.add( 'vsx_peer', $true ) } #if filter by name always set depth to 2 if ($PsBoundParameters.ContainsKey('name') -and ($depth -eq "")) { $invokeParams.add( 'depth', 2 ) } $uri = "system/vlans" # you can directly filter by id if ( $PsBoundParameters.ContainsKey('id') ) { $uri += "/$id" } $response = Invoke-ArubaCXRestMethod -uri $uri -method 'GET' -connection $connection @invokeParams #Add id parameter when use writable type selector if ( $PsBoundParameters.ContainsKey('selector') -and $selector -eq "writable" ) { $response | add-member -name "id" -membertype NoteProperty -Value $id } switch ( $PSCmdlet.ParameterSetName ) { "name" { #Need to make own filter for name (and use a depth >= 2) $response.psobject.Properties.Value | Where-Object { $_.name -eq $name } } default { $response } } } End { } } function Set-ArubaCXVlans { <# .SYNOPSIS Configure Aruba CX Vlan .DESCRIPTION Configure Vlan (name, description, vsx_sync...) .EXAMPLE Get-ArubaCXVlans -id 44 | Set-ArubaCXVlans -name "My New Vlan Name" -description "My Description change by PowerArubaCX" Change the name and description of vlan id 44 .EXAMPLE Get-ArubaCXVlans -id 44 | Set-ArubaCXVlans -voice -admin up Configure Vlan 44 with voice vlan and set admin to up .EXAMPLE Get-ArubaCXVlans -id 44 | Set-ArubaCXVlans -vsx_sync -voice -admin down Configure Vlan 44 with enable VSX sync and set admin to status .EXAMPLE $vlan = Get-ArubaCXVlans -id 44 -selector writable PS> $vlan.name = "My Vlan" PS> $vlan | Set-ArubaCXVlans -use_pipeline Configure Vlan 44 name using pipeline (can be only with selector equal writable) #> [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'medium')] [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseSingularNouns", "")] Param( [Parameter (Mandatory = $true, ParameterSetName = "id")] [ValidateRange(1, 4096)] [int]$id, [Parameter (Mandatory = $true, ValueFromPipeline = $true, Position = 1, ParameterSetName = "vlan")] [ValidateScript( { Confirm-ArubaCXVlans $_ })] [psobject]$vlan, [Parameter (Mandatory = $false)] [string]$name, [Parameter (Mandatory = $false)] [string]$description, [Parameter (Mandatory = $false)] [ValidateSet('up', 'down')] [string]$admin, [Parameter (Mandatory = $false)] [switch]$voice, [Parameter (Mandatory = $false)] [switch]$vsx_sync, [Parameter (Mandatory = $false)] [switch]$use_pipeline, [Parameter (Mandatory = $False)] [ValidateNotNullOrEmpty()] [PSObject]$connection = $DefaultArubaCXConnection ) Begin { } Process { #get vlan id from vlan ps object if ($vlan) { $id = $vlan.id } $uri = "system/vlans/${id}" if ($use_pipeline) { $_vlan = $vlan } else { $_vlan = Get-ArubaCXVlans -id $id -selector writable -connection $connection } #Remove id from vlan (can not be modified) $_vlan.psobject.Properties.remove("id") if ( $PsBoundParameters.ContainsKey('name') ) { $_vlan.name = $name } if ( $PsBoundParameters.ContainsKey('description') ) { $_vlan.description = $description } if ( $PsBoundParameters.ContainsKey('admin') ) { $_vlan.admin = $admin } if ( $PsBoundParameters.ContainsKey('voice') ) { if ($voice) { $_vlan.voice = $true } else { $_vlan.voice = $false } } if ( $PsBoundParameters.ContainsKey('vsx_sync') ) { if ($vsx_sync) { $_vlan.vsx_sync = @("all_attributes_and_dependents") } else { $_vlan.vsx_sync = $null } } if ($PSCmdlet.ShouldProcess($id, 'Configure Vlan Settings')) { $response = Invoke-ArubaCXRestMethod -uri $uri -method 'PUT' -body $_vlan -connection $connection $response } Get-ArubaCXVlans -id $id -connection $connection } End { } } function Remove-ArubaCXVlans { <# .SYNOPSIS Remove a vlan on Aruba CX Switch .DESCRIPTION Remove a vlan on Aruba CX Switch .EXAMPLE $vlan = Get-ArubaCXVlans -name MyVlan PS C:\>$vlan | Remove-ArubaCXVlans Remove vlan named MyVlan .EXAMPLE Remove-ArubaCXVlans -id 23 -confirm:$false Remove Vlan with id 23 with no confirmation #> [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'high')] [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseSingularNouns", "")] Param( [Parameter (Mandatory = $true, ParameterSetName = "id")] [int]$id, [Parameter (Mandatory = $true, ValueFromPipeline = $true, Position = 1, ParameterSetName = "vlan")] [ValidateScript( { Confirm-ArubaCXVlans $_ })] [psobject]$vlan, [Parameter (Mandatory = $False)] [ValidateNotNullOrEmpty()] [PSObject]$connection = $DefaultArubaCXConnection ) Begin { } Process { #get vlan id from vlan ps object if ($vlan) { $id = $vlan.id } $uri = "system/vlans/${id}" if ($PSCmdlet.ShouldProcess("Vlan", "Remove Vlan ${id}")) { Write-Progress -activity "Remove Vlan" Invoke-ArubaCXRestMethod -method "DELETE" -uri $uri -connection $connection Write-Progress -activity "Remove Vlan" -completed } } End { } } |