Public/transport-zones.ps1
# # Copyright 2019, Alexis La Goutte <alexis dot lagoutte at gmail dot com> # # SPDX-License-Identifier: Apache-2.0 # function Add-NSXTTransportZones { <# .SYNOPSIS Add a Transport Zones .DESCRIPTION Add a Transport Zones (Vlan or Overlay) .EXAMPLE Add-NSXTTransportZones -transport_type VLAN -host_switch_name NVDS-psNSXT -display_name MyTZ-Vlan -description "Add via psNSXT" Add a TransportZones type Vlan with NVDS (host_switch_name) NVDS-psNSXT named myTZ-Vlan with an description .EXAMPLE Add-NSXTTransportZones -transport_type OVERLAY -host_switch_name NVDS-psNSXT -display_name MyTZ-Overlay -description "Add via psNSXT" Add a TransportZones type Overlay with NVDS (host_switch_name) NVDS-psNSXT named myTZ-Overlay with an description .EXAMPLE Add-NSXTTransportZones -transport_type OVERLAY -host_switch_name NVDS-psNSXT -host_switch_mode ENS Add a TransportZones type Overlay with NVDS (host_switch_name) NVDS-psNSXT using Enhanced Datapath .EXAMPLE Add-NSXTTransportZones -transport_type OVERLAY -host_switch_name NVDS-psNSXT -nested_nsx -is_default Add a TransportZones type Overlay with NVDS (host_switch_name) NVDS-psNSXT and enable NSX nested and default Transport Zone #> Param( [Parameter(Mandatory = $false)] [string]$display_name, [Parameter(Mandatory = $true)] [string]$host_switch_name, [Parameter(Mandatory = $false)] [string]$description, [Parameter(Mandatory = $true)] [ValidateSet("VLAN", "OVERLAY", IgnoreCase = $false)] [string]$transport_type, [Parameter(Mandatory = $false)] [ValidateSet("ENS", "STANDARD", IgnoreCase = $false)] [string]$host_switch_mode, [Parameter(Mandatory = $false)] [switch]$nested_nsx, [Parameter(Mandatory = $false)] [switch]$is_default, [Parameter(Mandatory = $false)] [psobject]$connection = $DefaultNSXTConnection ) Begin { } Process { $uri = 'api/v1/transport-zones' $_tz = new-Object -TypeName PSObject $_tz | add-member -name "host_switch_name" -membertype NoteProperty -Value $host_switch_name $_tz | add-member -name "transport_type" -membertype NoteProperty -Value $transport_type if ( $PsBoundParameters.ContainsKey('display_name') ) { $_tz | add-member -name "display_name" -membertype NoteProperty -Value $display_name } if ( $PsBoundParameters.ContainsKey('description') ) { $_tz | add-member -name "description" -membertype NoteProperty -Value $description } if ( $PsBoundParameters.ContainsKey('host_switch_mode') ) { $_tz | add-member -name "host_switch_mode" -membertype NoteProperty -Value $host_switch_mode } if ( $PsBoundParameters.ContainsKey('nested_nsx') ) { if ( $nested_nsx ) { $_tz | Add-Member -name "nested_nsx" -membertype NoteProperty -Value $True } else { $_tz | Add-Member -name "nested_nsx" -membertype NoteProperty -Value $false } } if ( $PsBoundParameters.ContainsKey('is_default') ) { if ( $is_default ) { $_tz | Add-Member -name "is_default" -membertype NoteProperty -Value $True } else { $_tz | Add-Member -name "is_default" -membertype NoteProperty -Value $false } } $response = Invoke-NSXTRestMethod -uri $uri -method 'POST' -body $_tz -connection $connection $response } End { } } function Get-NSXTTransportZones { <# .SYNOPSIS Get information about Transport Zones .DESCRIPTION Returns information about Transport Zones .EXAMPLE Get-NSXTTransportZones Display all Transport Zones .EXAMPLE Get-NSXTTransportZones -zone_id ede3e69a-6562-49a6-98c4-d23408bd832c Display Transport Zones with (zone) id ede3e69a-6562-49a6-98c4-d23408bd832c .EXAMPLE Get-NSXTTransportZones -display_name TZ-VLAN Display Transport Zones with (display) name TZ-VLAN .EXAMPLE Get-NSXTTransportZones -host_switch_name NVDS-psNSXT Display Transport Zones with host_switch_name (N-VDS) NVDS-psNSXT .EXAMPLE Get-NSXTTransportZones -zone_id ede3e69a-6562-49a6-98c4-d23408bd832c -summary Display Transport Zones Summary (Number of Transport Nodes, Logical Switches, Logical Ports) with (zone) id ede3e69a-6562-49a6-98c4-d23408bd832c .EXAMPLE Get-NSXTTransportZones -status Display Transport Zones Status (Up, Down, degraded, Unknown) #> [CmdletBinding(DefaultParametersetname = "Default")] Param( [Parameter(Mandatory = $false, ParameterSetName = "zone_id")] [string]$zone_id, [Parameter(Mandatory = $false, ParameterSetName = "zone_id")] [switch]$summary, [Parameter(Mandatory = $false, ParameterSetName = "display_name")] [string]$display_name, [Parameter(Mandatory = $false, ParameterSetName = "host_switch_name")] [string]$host_switch_name, [Parameter(Mandatory = $false, ParameterSetName = "status")] [switch]$status, [Parameter(Mandatory = $false)] [psobject]$connection = $DefaultNSXTConnection ) Begin { } Process { $uri = 'api/v1/transport-zones' if ( $PsBoundParameters.ContainsKey('zone_id') ) { $uri += "/$zone_id" #if summary is enable add summary on URI if ( $PsBoundParameters.ContainsKey('summary') ) { if ( $summary ) { $uri += "/summary" } } } if ( $PsBoundParameters.ContainsKey('status') ) { $uri += "/status" } $response = Invoke-NSXTRestMethod -uri $uri -method 'GET' -connection $connection switch ( $PSCmdlet.ParameterSetName ) { "zone_id" { #When there is a zone_id, it is directly the result... $response } "display_name" { #When there is a display_name, search on response $response.results | Where-Object { $_.display_name -eq $display_name } } "host_switch_name" { #When there is a host_switch_name, search on response $response.results | Where-Object { $_.host_switch_name -eq $host_switch_name } } "status" { #When there is a status, it is directly the result... $response } default { $response.results } } } End { } } function Set-NSXTTransportZones { <# .SYNOPSIS Change settings of a Transport Zones .DESCRIPTION Change settings (name, description) of a Transport Zones .EXAMPLE Get-NSXTTransportZones -zone_id ff8140b0-010e-4e92-aa62-a55766f17da0 | Set-NSXTTransportZones -display_name "My New TZ Name" Change name of Transport Zones ff8140b0-010e-4e92-aa62-a55766f17da0 .EXAMPLE Get-NSXTTransportZones -display_name TZ-VLAN | Set-NSXTTransportZones -description "Modified by psNSXT" Change description of Transport Zones TZ-VLAN .EXAMPLE Get-NSXTTransportZones -display_name TZ-VLAN | Set-NSXTTransportZones -is_default Enable default for Transport Zones TZ-VLAN #> [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'medium')] Param( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [ValidateScript( { Confirm-NSXTTransportZones $_ })] [psobject]$tz, [Parameter(Mandatory = $false)] [string]$display_name, [Parameter(Mandatory = $false)] [string]$description, [Parameter(Mandatory = $false)] [switch]$is_default, [Parameter(Mandatory = $false)] [psobject]$connection = $DefaultNSXTConnection ) Begin { } Process { $zone_id = $tz.id $zone_name = "(" + $tz.display_name + ")" $uri = "api/v1/transport-zones/$zone_id" if ( $PsBoundParameters.ContainsKey('display_name') ) { $tz.display_name = $display_name } if ( $PsBoundParameters.ContainsKey('description') ) { if ($null -eq $tz.description) { $tz | Add-member -name "description" -membertype NoteProperty -Value "" } $tz.description = $description } if ( $PsBoundParameters.ContainsKey('is_default') ) { if ( $is_default ) { $tz.is_default = $true } else { $tz.is_default = $false } } if ($PSCmdlet.ShouldProcess("$zone_id $zone_name", 'Configure Transport Zones')) { $response = Invoke-NSXTRestMethod -uri $uri -method 'PUT' -body $tz -connection $connection $response.results } #Display update Transport Zones Get-NSXTTransportZones -zone_id $zone_id -connection $connection } End { } } function Remove-NSXTTransportZones { <# .SYNOPSIS Remove a Transport Zone .DESCRIPTION Remove a Transport Zone .EXAMPLE $tz = Get-TransportZones -zone_id ff8140b0-010e-4e92-aa62-a55766f17da0 PS C:\>$tz | Remove-NSXTTransportZones Remove Transport Zone with (zone) id ff8140b0-010e-4e92-aa62-a55766f17da0 .EXAMPLE Remove-NSXTTransportZones -zone_id ff8140b0-010e-4e92-aa62-a55766f17da0 -confirm:$false Remove Transport Zone with (zone) id ff8140b0-010e-4e92-aa62-a55766f17da0 with no confirmation #> [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'high')] Param( [Parameter (Mandatory = $true, ParameterSetName = "zone_id")] [string]$zone_id, [Parameter (Mandatory = $true, ValueFromPipeline = $true, Position = 1, ParameterSetName = "tz")] [ValidateScript( { Confirm-NSXTTransportZones $_ })] [psobject]$tz, [Parameter(Mandatory = $false)] [psobject]$connection = $DefaultNSXTConnection ) Begin { } Process { #get tz id from tz object if ($tz) { $zone_id = $tz.id $name = " (" + $tz.display_name + ")" } $uri = "api/v1/transport-zones/$zone_id" if ($PSCmdlet.ShouldProcess("TZ", "Remove Transport Zone ${zone_id} ${name}")) { Write-Progress -activity "Remove TZ" Invoke-NSXTRestMethod -method "DELETE" -uri $uri -connection $connection Write-Progress -activity "Remove TZ" -completed } } End { } } |