Public/Policy/Infra/segments.ps1
# # Copyright 2019-2020, Alexis La Goutte <alexis dot lagoutte at gmail dot com> # # SPDX-License-Identifier: Apache-2.0 # function Add-NSXTPolicyInfraSegments { <# .SYNOPSIS Add a Segment .DESCRIPTION Add a Segment (Vlan) .EXAMPLE Get-NSXTTransportZones -display_name MyTZ-Vlan | Add-NSXTPolicyInfraSegments -segment MySegment -vlan_ids 2 Add a (vlan) Segment MySegment on MyTZ-Vlan with vlan id 2 .EXAMPLE Get-NSXTTransportZones -display_name MyTZ-Vlan | Add-NSXTPolicyInfraSegments -segment MySegment -vlan_ids 2,44 -display_name MySegment2and44 Add a (vlan) Segment with (display_)name MySegment2and44 on MyTZ-Vlan with vlan id 2 and 44 #> Param( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [ValidateScript( { Confirm-NSXTTransportZones $_ })] [psobject]$tz, [Parameter(Mandatory = $true)] [string]$segment, [Parameter(Mandatory = $false)] [string]$display_name, [Parameter(Mandatory = $true)] [ValidateRange(0, 4096)] [int[]]$vlan_ids, [Parameter(Mandatory = $false)] [psobject]$connection = $DefaultNSXTConnection ) Begin { } Process { $uri = 'policy/api/v1/infra/segments' $uri += "/" + $segment $transport_zone_path = "/infra/sites/default/enforcement-points/default/transport-zones/" + $tz.id $_sg = new-Object -TypeName PSObject $_sg | add-member -name "type" -membertype NoteProperty -Value "DISCONNECTED" $_sg | add-member -name "transport_zone_path" -membertype NoteProperty -Value $transport_zone_path if ( $PsBoundParameters.ContainsKey('display_name') ) { $_sg | add-member -name "display_name" -membertype NoteProperty -Value $display_name } $_sg | add-member -name "vlan_ids" -membertype NoteProperty -Value @($vlan_ids) $response = Invoke-NSXTRestMethod -uri $uri -method 'PATCH' -body $_sg -connection $connection $response Get-NSXTPolicyInfraSegments -segment $segment -connection $connection } End { } } function Get-NSXTPolicyInfraSegments { <# .SYNOPSIS Get information about Segments .DESCRIPTION Returns information about Segments .EXAMPLE Get-NSXTPolicyInfraSegments Display all Transport Zones .EXAMPLE Get-NSXTPolicyInfraSegments -segment mySegment Display Segments with segment mySegment .EXAMPLE Get-NSXTPolicyInfraSegments -display_name mySegment Display Segments with (display) name mySegment #> [CmdletBinding(DefaultParametersetname = "Default")] Param( [Parameter(Mandatory = $false, ParameterSetName = "segment")] [string]$segment, [Parameter(Mandatory = $false, ParameterSetName = "display_name")] [string]$display_name, [Parameter(Mandatory = $false)] [psobject]$connection = $DefaultNSXTConnection ) Begin { } Process { $uri = 'policy/api/v1/infra/segments' if ( $PsBoundParameters.ContainsKey('segment') ) { $uri += "/$segment" } $response = Invoke-NSXTRestMethod -uri $uri -method 'GET' -connection $connection switch ( $PSCmdlet.ParameterSetName ) { "segment" { #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 } } default { $response.results } } } End { } } function Set-NSXTPolicyInfraSegments { <# .SYNOPSIS Configure a Segment .DESCRIPTION Configure a Segment (Vlan) .EXAMPLE Get-NSXTPolicyInfraSegments -display_name MySegment | Set-NSXTPolicyInfraSegments -vlan_ids 23 Configure a (vlan) Segment MySegment with vlan id 23 .EXAMPLE Get-NSXTPolicyInfraSegments -display_name MySegment | Set-NSXTPolicyInfraSegments -vlan_ids 23,44 Configure a (vlan) Segment MySegment with vlan id 23 and 44 .EXAMPLE Get-NSXTPolicyInfraSegments -display_name MySegment | Set-NSXTPolicyInfraSegments -display_name MySegment2 Configure a (vlan) Segment MySegment with (display_)name MySegment2 #> [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'medium')] Param( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [ValidateScript( { Confirm-NSXTSegments $_ })] [psobject]$segment, [Parameter(Mandatory = $false)] [string]$display_name, [Parameter(Mandatory = $false)] [ValidateRange(0, 4096)] [int[]]$vlan_ids, [Parameter(Mandatory = $false)] [psobject]$connection = $DefaultNSXTConnection ) Begin { } Process { $uri = 'policy/api/v1/infra/segments' $uri += "/" + $segment.id $segment_name = $segment.display_name if ( $PsBoundParameters.ContainsKey('display_name') ) { $segment.display_name = $display_name } if ( $PsBoundParameters.ContainsKey('vlan_ids') ) { $segment.vlan_ids = @($vlan_ids) } if ($PSCmdlet.ShouldProcess("$segment_name", 'Configure Segment')) { $response = Invoke-NSXTRestMethod -uri $uri -method 'PUT' -body $segment -connection $connection $response.results } Get-NSXTPolicyInfraSegments -segment $segment.id -connection $connection } End { } } function Remove-NSXTPolicyInfraSegments { <# .SYNOPSIS Remove a Segment .DESCRIPTION Remove a Segment .EXAMPLE $sg = Get-NSXTPolicyInfraSegments -display_name MySegment PS C:\>$sg | Remove-NSXTPolicyInfraSegments Remove Segment e with ff8140b0-010e-4e92-aa62-a55766f17da0 .EXAMPLE Remove-NSXTPolicyInfraSegments -segment MySegment -confirm:$false Remove Segment MySegment with no confirmation #> [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'high')] Param( [Parameter (Mandatory = $true, ParameterSetName = "segment")] [string]$segment, [Parameter (Mandatory = $true, ValueFromPipeline = $true, Position = 1, ParameterSetName = "sg")] [ValidateScript( { Confirm-NSXTSegments $_ })] [psobject]$sg, [Parameter(Mandatory = $false)] [psobject]$connection = $DefaultNSXTConnection ) Begin { } Process { #get segment name froms segment object if ($sg) { $segment = $sg.id $name = " (" + $sg.display_name + ")" } $uri = "policy/api/v1/infra/segments/$segment" if ($PSCmdlet.ShouldProcess("${segment}${name}", "Remove Segment")) { Write-Progress -activity "Remove Segment" Invoke-NSXTRestMethod -method "DELETE" -uri $uri -connection $connection Write-Progress -activity "Remove Segment" -completed } } End { } } |