Files
PowerCLI-Example-Scripts/Modules/NSXT/NSXT.psm1
AndyG 2103438f8a Added Help & Get-NSXTLogicalRouterPorts
Added Help & Get-NSXTLogicalRouterPorts
2018-09-14 12:27:31 -04:00

1183 lines
42 KiB
PowerShell

Function Get-NSXTController {
Param (
[parameter(Mandatory=$false,ValueFromPipeline=$true)][string]$Id
)
$clusterNodeService = Get-NsxtService -Name "com.vmware.nsx.cluster.nodes"
$clusterNodeStatusService = Get-NsxtService -Name "com.vmware.nsx.cluster.nodes.status"
if($Id) {
$nodes = $clusterNodeService.get($Id)
} else {
$nodes = $clusterNodeService.list().results | where { $_.manager_role -eq $null }
}
$results = @()
foreach ($node in $nodes) {
$nodeId = $node.id
$nodeName = $node.controller_role.control_plane_listen_addr.ip_address
$nodeStatusResults = $clusterNodeStatusService.get($nodeId)
$tmp = [pscustomobject] @{
Id = $nodeId;
Name = $nodeName;
ClusterStatus = $nodeStatusResults.control_cluster_status.control_cluster_status;
Version = $nodeStatusResults.version;
}
$results+=$tmp
}
$results
}
Function Get-NSXTFabricNode {
Param (
[parameter(Mandatory=$false,ValueFromPipeline=$true)][string]$Id,
[Switch]$ESXi,
[Switch]$Edge
)
$fabricNodeService = Get-NsxtService -Name "com.vmware.nsx.fabric.nodes"
$fabricNodeStatusService = Get-NsxtService -Name "com.vmware.nsx.fabric.nodes.status"
if($Id) {
$nodes = $fabricNodeService.get($Id)
} else {
if($ESXi) {
$nodes = $fabricNodeService.list().results | where { $_.resource_type -eq "HostNode" }
} elseif ($Edge) {
$nodes = $fabricNodeService.list().results | where { $_.resource_type -eq "EdgeNode" }
} else {
$nodes = $fabricNodeService.list().results
}
}
$results = @()
foreach ($node in $nodes) {
$nodeStatusResult = $fabricNodeStatusService.get($node.id)
$tmp = [pscustomobject] @{
Id = $node.id;
Name = $node.display_name;
Type = $node.resource_type;
Address = $node.ip_addresses;
NSXVersion = $nodeStatusResult.software_version
OS = $node.os_type;
Version = $node.os_version;
Status = $nodeStatusResult.host_node_deployment_status
ManagerStatus = $nodeStatusResult.mpa_connectivity_status
ControllerStatus = $nodeStatusResult.lcp_connectivity_status
}
$results+=$tmp
}
$results
}
Function Get-NSXTIPPool {
Param (
[parameter(Mandatory=$false,ValueFromPipeline=$true)][string]$Id
)
$ipPoolService = Get-NsxtService -Name "com.vmware.nsx.pools.ip_pools"
if($Id) {
$ipPools = $ipPoolService.get($Id)
} else {
$ipPools = $ipPoolService.list().results
}
$results = @()
foreach ($ipPool in $ipPools) {
$tmp = [pscustomobject] @{
Id = $ipPool.Id;
Name = $ipPool.Display_Name;
Total = $ipPool.pool_usage.total_ids;
Free = $ipPool.pool_usage.free_ids;
Network = $ipPool.subnets.cidr;
Gateway = $ipPool.subnets.gateway_ip;
DNS = $ipPool.subnets.dns_nameservers;
RangeStart = $ipPool.subnets.allocation_ranges.start;
RangeEnd = $ipPool.subnets.allocation_ranges.end
}
$results+=$tmp
}
$results
}
Function Get-NSXTTransportZone {
Param (
[parameter(Mandatory=$false,ValueFromPipeline=$true)][string]$Id
)
$transportZoneService = Get-NsxtService -Name "com.vmware.nsx.transport_zones"
if($Id) {
$transportZones = $transportZoneService.get($Id)
} else {
$transportZones = $transportZoneService.list().results
}
$results = @()
foreach ($transportZone in $transportZones) {
$tmp = [pscustomobject] @{
Id = $transportZone.Id;
Name = $transportZone.display_name;
Type = $transportZone.transport_type;
HostSwitchName = $transportZone.host_switch_name;
}
$results+=$tmp
}
$results
}
Function Get-NSXTComputeManager {
Param (
[parameter(Mandatory=$false,ValueFromPipeline=$true)][string]$Id
)
$computeManagerSerivce = Get-NsxtService -Name "com.vmware.nsx.fabric.compute_managers"
$computeManagerStatusService = Get-NsxtService -Name "com.vmware.nsx.fabric.compute_managers.status"
if($Id) {
$computeManagers = $computeManagerSerivce.get($id)
} else {
$computeManagers = $computeManagerSerivce.list().results
}
$results = @()
foreach ($computeManager in $computeManagers) {
$computeManagerStatus = $computeManagerStatusService.get($computeManager.Id)
$tmp = [pscustomobject] @{
Id = $computeManager.Id;
Name = $computeManager.display_name;
Server = $computeManager.server
Type = $computeManager.origin_type;
Version = $computeManagerStatus.Version;
Registration = $computeManagerStatus.registration_status;
Connection = $computeManagerStatus.connection_status;
}
$results+=$tmp
}
$results
}
Function Get-NSXTLogicalSwitch {
Param (
[parameter(Mandatory=$false,ValueFromPipeline=$true)][string]$Id
)
$logicalSwitchService = Get-NsxtService -Name "com.vmware.nsx.logical_switches"
$logicalSwitchSummaryService = Get-NsxtService -Name "com.vmware.nsx.logical_switches.summary"
if($Id) {
$logicalSwitches = $logicalSwitchService.get($Id)
} else {
$logicalSwitches = $logicalSwitchService.list().results
}
$results = @()
foreach ($logicalSwitch in $logicalSwitches) {
$transportZone = (Get-NSXTTransportZone -Id $logicalSwitch.transport_zone_id | Select Name | ft -HideTableHeaders | Out-String).trim()
$ports = $logicalSwitchSummaryService.get($logicalSwitch.id).num_logical_ports
$tmp = [pscustomobject] @{
Id = $logicalSwitch.Id;
Name = $logicalSwitch.display_name;
VLAN = $logicalSwitch.vlan;
AdminStatus = $logicalSwitch.admin_state;
Ports = $ports;
TransportZone = $transportZone;
}
$results+=$tmp
}
$results
}
Function Get-NSXTFirewallRule {
Param (
[parameter(Mandatory=$false,ValueFromPipeline=$true)][string]$Id
)
$firewallService = Get-NsxtService -Name "com.vmware.nsx.firewall.sections"
$firewallRuleService = Get-NsxtService -Name "com.vmware.nsx.firewall.sections.rules"
if($Id) {
$firewallRuleSections = $firewallService.get($Id)
} else {
$firewallRuleSections = $firewallService.list().results
}
$sectionResults = @()
foreach ($firewallRuleSection in $firewallRuleSections) {
$tmp = [pscustomobject] @{
Id = $firewallRuleSection.Id;
Name = $firewallRuleSection.display_name;
Type = $firewallRuleSection.section_type;
Stateful = $firewallRuleSection.stateful;
RuleCount = $firewallRuleSection.rule_count;
}
$sectionResults+=$tmp
}
$sectionResults
$firewallResults = @()
if($id) {
$firewallRules = $firewallRuleService.list($id).results
foreach ($firewallRule in $firewallRules) {
$tmp = [pscustomobject] @{
Id = $firewallRule.id;
Name = $firewallRule.display_name;
Sources = if($firewallRule.sources -eq $null) { "ANY" } else { $firewallRule.sources};
Destination = if($firewallRule.destinations -eq $null) { "ANY" } else { $firewallRule.destinations };
Services = if($firewallRule.services -eq $null) { "ANY" } else { $firewallRule.services } ;
Action = $firewallRule.action;
AppliedTo = if($firewallRule.applied_tos -eq $null) { "ANY" } else { $firewallRule.applied_tos };
Log = $firewallRule.logged;
}
$firewallResults+=$tmp
}
}
$firewallResults
}
Function Get-NSXTManager {
$clusterNodeService = Get-NsxtService -Name "com.vmware.nsx.cluster.nodes"
$nodes = $clusterNodeService.list().results
$results = @()
foreach ($node in $nodes) {
if($node.manager_role -ne $null) {
$tmp = [pscustomobject] @{
Id = $node.id;
Name = $node.display_name;
Address = $node.appliance_mgmt_listen_addr;
SHA256Thumbprint = $node.manager_role.api_listen_addr.certificate_sha256_thumbprint;
}
$results+=$tmp
}
}
$results
}
Function Get-NSXTTransportNode {
<#
.Synopsis
Retrieves the transport_node information
.DESCRIPTION
Retrieves transport_node information for a single or multiple IDs. Execute with no parameters to get all ports, specify a transport_node if known.
.EXAMPLE
Get-NSXTTransportNode
.EXAMPLE
Get-NSXTThingTemplate -Tranport_node_id "TN ID"
#>
Param (
[parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)]
[Alias("Id","Tranportnode_id")]
[string]$transport_node_id
)
begin
{
$NSXTransportNodesService = Get-NsxtService -Name "com.vmware.nsx.transport_nodes"
class NSXTransportNode {
[string]$Name
[string]$Transport_node_id
[string]$maintenance_mode
hidden $tags = [System.Collections.Generic.List[string]]::new()
hidden $host_switches = [System.Collections.Generic.List[string]]::new()
hidden [string]$host_switch_spec
hidden $transport_zone_endpoints = [System.Collections.Generic.List[string]]::new()
}
}
Process
{
if($transport_node_id) {
$NSXTransportNodes = $NSXTransportNodesService.get($transport_node_id)
} else {
$NSXTransportNodes = $NSXTransportNodesService.list().results
}
foreach ($NSXTransportNode in $NSXTransportNodes) {
$results = [NSXTransportNode]::new()
$results.Name = $NSXTransportNode.display_name;
$results.Transport_node_id = $NSXTransportNode.Id;
$results.maintenance_mode = $NSXTransportNode.maintenance_mode;
$results.Tags = $NSXTransportNode.tags;
$results.host_switches = $NSXTransportNode.host_switches;
$results.host_switch_spec = $NSXTransportNode.host_switch_spec;
$results.transport_zone_endpoints = $NSXTransportNode.transport_zone_endpoints;
$results.host_switches = $NSXTransportNode.host_switches
$results
}
}
}
Function Get-NSXTTraceFlow {
<#
.Synopsis
Retrieves traceflow information
.DESCRIPTION
Retrieves traceflow information for a single or multiple traceflows. Execute with no parameters to get all traceflows, specify a traceflow_id if known.
.EXAMPLE
Get-NSXTTraceFlow
.EXAMPLE
Get-NSXTTraceFlow -traceflow_id "TF ID
#>
Param (
[parameter(Mandatory=$false,ValueFromPipeline=$true)]
[Alias("Id")]
[string]$traceflow_id
)
$NSXTraceFlowsService = Get-NsxtService -Name "com.vmware.nsx.traceflows"
if($traceflow_id) {
$NSXTraceFlows = $NSXTraceFlowsService.get($traceflow_id)
} else {
$NSXTraceFlows = $NSXTraceFlowsService.list().results
}
class NSXTraceFlow {
[string]$traceflow_id
hidden [string]$lport_id
[string]$Operation_State
[int]$Forwarded
[int]$Delivered
[int]$Received
[int]$Dropped
[string]$Analysis
}
foreach ($NSXTraceFlow in $NSXTraceFlows) {
$results = [NSXTraceFlow]::new()
$results.traceflow_id = $NSXTraceFlow.Id;
$results.Operation_State = $NSXTraceFlow.operation_state;
$results.forwarded = $NSXTraceFlow.Counters.forwarded_count;
$results.delivered = $NSXTraceFlow.Counters.delivered_count;
$results.received = $NSXTraceFlow.Counters.received_count;
$results.dropped = $NSXTraceFlow.Counters.dropped_count;
$results.analysis = $NSXTraceFlow.analysis
$results
}
}
Function Get-NSXTTraceFlowObservations {
<#
.Synopsis
Retrieves traceflow observations information
.DESCRIPTION
Retrieves traceflow observations information for a single traceflow. Must specify a current traceflow_id
.EXAMPLE
Get-NSXTTraceFlowObservations -traceflow_id "TF ID"
.EXAMPLE
Get-NSXTTraceFlow | Get-NSXTTraceFlowObservations
#>
Param (
[parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true)]
[Alias("Id")]
[string]$traceflow_id
)
begin
{
$NSXTraceFlowsObservService = Get-NsxtService -Name "com.vmware.nsx.traceflows.observations"
}
Process
{
if($traceflow_id) {
$NSXTraceFlowsObserv = $NSXTraceFlowsObservService.list($traceflow_id)
} else {
throw "TraceFlow ID required"
}
$NSXTraceFlowsObserv.results | select transport_node_name,component_name,@{N='PacketEvent';E={($_.resource_type).TrimStart("TraceflowObservation")}}
}
}
Function Set-NSXTTraceFlow {
<#
.Synopsis
Creates a TraceFlow
.DESCRIPTION
Create a TraceFlow for later observation.
.EXAMPLE
Set-NSXTTraceFlow -transport_type "UNICAST" -lport_id "LP ID" -src_ip "IP Address" -src_mac "MAC" -dst_ip "IP Address" -dst_mac "MAC"
.EXAMPLE
Set-NSXTTraceFlow -transport_type "UNICAST" -lport_id "LP ID" -src_ip "IP Address" -src_mac "MAC" -dst_ip "IP Address" -dst_mac "MAC" | Get-NSXTTraceFlow
.EXAMPLE
Set-NSXTTraceFlow -transport_type "UNICAST" -lport_id "LP ID" -src_ip "IP Address" -src_mac "MAC" -dst_ip "IP Address" -dst_mac "MAC" | Get-NSXTTraceFlow | Get-NSXTTraceFlowObservations
#>
[CmdletBinding()]
# Paramameter Set variants will be needed Multicast & Broadcast Traffic Types as well as VM & Logical Port Types
Param (
[parameter(Mandatory=$true,
ParameterSetName='Parameter Set VM Type')]
[ValidateSet("UNICAST")]
[string]
$transport_type = "UNICAST",
[parameter(Mandatory=$true,
ValueFromPipeline=$true,
ParameterSetName='Parameter Set VM Type')]
[ValidateNotNullOrEmpty()]
#[ValidateScript({Get-NSXTLogicalPort -Id $_}]
[string]
$lport_id,
[parameter(Mandatory=$true,
ValueFromPipeline=$true,
ParameterSetName='Parameter Set VM Type')]
[ValidateNotNullOrEmpty()]
[ValidateScript({$_ -match [IPAddress]$_})]
[string]
$src_ip,
[parameter(Mandatory=$true,
ValueFromPipeline=$true,
ParameterSetName='Parameter Set VM Type')]
[ValidateNotNullOrEmpty()]
[ValidateScript({$pattern = '^(([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2}))|(([0-9A-Fa-f]{2}[-]){5}([0-9A-Fa-f]{2}))$'
if ($_ -match ($pattern -join '|')) {$true} else {
throw "The argument '$_' does not match a valid MAC address format."
}
})]
[string]
$src_mac,
[parameter(Mandatory=$true,
ValueFromPipeline=$true,
ParameterSetName='Parameter Set VM Type')]
[ValidateNotNullOrEmpty()]
[ValidateScript({$_ -match [IPAddress]$_ })]
[string]
$dst_ip,
[parameter(Mandatory=$true,
ValueFromPipeline=$true,
ParameterSetName='Parameter Set VM Type')]
[ValidateNotNullOrEmpty()]
[ValidateScript({$pattern = '^(([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2}))|(([0-9A-Fa-f]{2}[-]){5}([0-9A-Fa-f]{2}))$'
if ($_ -match ($pattern -join '|')) {$true} else {
throw "The argument '$_' does not match a valid MAC address format."
}
})]
[string]
$dst_mac)
Begin
{
if (-not $global:DefaultNsxtServers.isconnected)
{
try
{
Connect-NsxtServer -Menu -ErrorAction Stop
}
catch
{
throw "Could not connect to an NSX-T Manager, please try again"
}
}
$NSXTraceFlowsService = Get-NsxtService -Name "com.vmware.nsx.traceflows"
class ip_header {
[string]$src_ip
[string]$dst_ip
}
class eth_header {
[string]$src_mac
[string]$dst_mac
}
class packet_data {
[boolean]$routed
[ValidateSet("UNICAST","BROADCAST","MULTICAST","UNKNOWN")]
[string]$transport_type
[ValidateSet("BINARYPACKETDATA","FIELDSPACKETDATA")]
[string]$resource_type
[long]$frame_size
[eth_header]$eth_header = [eth_header]::new()
[ip_header]$ip_header = [ip_header]::new()
packet_data(){
$this.routed = 'true'
$this.transport_type = 'UNICAST'
$this.resource_type = 'FieldsPacketData'
}
}
class traceflow_request {
[string]$lport_id
[long]$timeout
[packet_data]$packet = [packet_data]::new()
traceflow_request(){
$this.timeout = '15000'
}
}
}
Process
{
[traceflow_request]$traceflow_request = [traceflow_request]::new()
$traceflow_request.lport_id = $lport_id
$traceflow_request.packet.transport_type = $transport_type
$traceflow_request.packet.eth_header.src_mac = $src_mac
$traceflow_request.packet.eth_header.dst_mac = $dst_mac
$traceflow_request.packet.ip_header.src_ip = $src_ip
$traceflow_request.packet.ip_header.dst_ip = $dst_ip
try
{
# This does not work, bug report submitted to PowerCLI team
$NSXTraceFlow = $NSXTraceFlowService.create($traceflow_request)
}
catch
{
throw $Error[0].Exception.ServerError.data
# more error data found in the NSX-T Manager /var/log/vmware/nsx-manager.log file. Filter by MONITORING.
}
$NSXTraceFlow
}
}
Function Get-NSXTEdgeCluster {
<#
.Synopsis
Retrieves the Edge cluster information
.DESCRIPTION
Retrieves Edge cluster information for a single or multiple clusterss. Execute with no parameters to get all ports, specify a edge_cluster_id if known.
.EXAMPLE
Get-NSXTEdgeCluster
.EXAMPLE
Get-NSXTEdgeCluster -edge_cluster_id "Edge Cluster ID"
.EXAMPLE
Get-NSXTThingTemplate | where name -eq "My Edge Cluster Name"
#>
Param (
[parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)]
[Alias("Id")]
[string]$edge_cluster_id
)
Begin
{
$NSXTEdgeClustersService = Get-NsxtService -Name "com.vmware.nsx.edge_clusters"
class NSXEdgeCluster {
[string]$Name
hidden [string]$Protection
hidden [string]$Tags
[string]$edge_cluster_id
[string]$resource_type
[string]$deployment_type
[string]$member_node_type
$members = [System.Collections.Generic.List[string]]::new()
$cluster_profile_bindings = [System.Collections.Generic.List[string]]::new()
}
}
Process
{
if ($edge_cluster_id) {
$NSXEdgeClusters = $NSXTEdgeClustersService.get($edge_cluster_id)
}
else {
$NSXEdgeClusters = $NSXTEdgeClustersService.list().results
}
foreach ($NSXEdgeCluster in $NSXEdgeClusters) {
$results = [NSXEdgeCluster]::new()
$results.Name = $NSXEdgeCluster.display_name;
$results.Protection = $NSXEdgeCluster.Protection;
$results.edge_cluster_id = $NSXEdgeCluster.Id;
$results.resource_type = $NSXEdgeCluster.resource_type;
$results.Tags = $NSXEdgeCluster.tags;
$results.deployment_type = $NSXEdgeCluster.deployment_type;
$results.member_node_type = $NSXEdgeCluster.member_node_type;
$results.members = $NSXEdgeCluster.members;
$results.cluster_profile_bindings = $NSXEdgeCluster.cluster_profile_bindings
$results
}
}
}
Function Get-NSXTLogicalRouter {
<#
.Synopsis
Retrieves the Logical Router information
.DESCRIPTION
Retrieves Logical Router information for a single or multiple LR's. This includes corresponding SR's and transport_node_id. Execute with no parameters to get all ports, specify a Logical_router_id if known.
.EXAMPLE
Get-NSXTLogicalRouter
.EXAMPLE
Get-NSXTLogicalRouter -Logical_router_id "LR ID"
.EXAMPLE
Get-NSXTLogicalRouter | where name -eq "LR Name"
.EXAMPLE
(Get-NSXTLogicalRouter -Logical_router_id "LR ID").per_node_status
#>
Param (
[parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)]
[Alias("Id")]
[string]$Logical_router_id
)
begin
{
$NSXTLogicalRoutersService = Get-NsxtService -Name "com.vmware.nsx.logical_routers"
$NSXTLogicalRoutersStatusService = Get-NsxtService -Name "com.vmware.nsx.logical_routers.status"
class per_node_status {
$service_router_id
[ValidateSet("ACTIVE","STANDBY","DOWN","SYNC","UNKNOWN")]
$high_availability_status
$transport_node_id
per_node_status(){}
per_node_status(
$service_router_id,
$high_availability_status,
$transport_node_id
) {
$this.service_router_id = $service_router_id
$this.high_availability_status = $high_availability_status
$this.transport_node_id = $transport_node_id
}
}
class NSXTLogicalRouter {
[string]$Name
[string]$Logical_router_id
[string]$protection
hidden [string]$Tags
[string]$edge_cluster_id
[ValidateSet("TIER0","TIER1")]
[string]$router_type
[ValidateSet("ACTIVE_ACTIVE","ACTIVE_STANDBY","")]
[string]$high_availability_mode
[ValidateSet("PREEMPTIVE","NON_PREEMPTIVE","")]
[string]$failover_mode
[string]$external_transit
[string]$internal_transit
hidden [string]$advanced_config = [System.Collections.Generic.List[string]]::new()
hidden [string]$firewall_sections = [System.Collections.Generic.List[string]]::new()
$per_node_status = [System.Collections.Generic.List[string]]::new()
}
}
Process
{
if($Logical_router_id) {
$NSXLogicalRouters = $NSXTLogicalRoutersService.get($Logical_router_id)
} else {
$NSXLogicalRouters = $NSXTLogicalRoutersService.list().results
}
foreach ($NSXLogicalRouter in $NSXLogicalRouters) {
$NSXTLogicalRoutersStatus = $NSXTLogicalRoutersStatusService.get($NSXLogicalRouter.id)
$results = [NSXTLogicalRouter]::new()
foreach ($NSXTLogicalRouterStatus in $NSXTLogicalRoutersStatus.per_node_status) {
$results.per_node_status += [per_node_status]::new($NSXTLogicalRouterStatus.service_router_id,$NSXTLogicalRouterStatus.high_availability_status,$NSXTLogicalRouterStatus.transport_node_id)
}
$results.Name = $NSXLogicalRouter.display_name;
$results.Logical_router_id = $NSXLogicalRouter.Id;
$results.protection = $NSXLogicalRouter.protection;
$results.Tags = $NSXLogicalRouter.tags;
$results.edge_cluster_id = $NSXLogicalRouter.edge_cluster_id;
$results.router_type = $NSXLogicalRouter.router_type;
$results.high_availability_mode = $NSXLogicalRouter.high_availability_mode;
$results.failover_mode =$NSXLogicalRouter.failover_mode;
$results.external_transit = $NSXLogicalRouter.advanced_config.external_transit_networks;
$results.internal_transit = $NSXLogicalRouter.advanced_config.internal_transit_network;
$results.advanced_config =$NSXLogicalRouter.advanced_config;
$results.firewall_sections =$NSXLogicalRouter.firewall_sections
$results
}
}
}
Function Get-NSXTRoutingTable {
<#
.Synopsis
Retrieves the routing table information
.DESCRIPTION
Retrieves routing table for a single LR including LR type (SR/DR) and next_hop. Must specify Logical_router_id & transport_node_id. Pipeline input supported.
.EXAMPLE
Get-NSXTRoutingTable -Logical_router_id "LR ID" -transport_node_id "TN ID" | format-table -autosize
.EXAMPLE
Get-NSXTLogicalRouter | where name -eq "LR Name" | Get-NSXTRoutingTable -transport_node_id "TN ID"
.EXAMPLE
Get-NSXTLogicalRouter | where name -eq INT-T1 | Get-NSXTRoutingTable -transport_node_id ((Get-NSXTTransportNode | where name -match "INT")[0].transport_node_id)
.EXAMPLE
Get-NSXTLogicalRouter | where name -eq INT-T1 | Get-NSXTRoutingTable -transport_node_id (((Get-NSXTLogicalRouter | where name -eq INT-T1).per_node_status | where high_availability_status -eq ACTIVE).transport_node_id)
#>
Param (
[parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true)]
[string]$Logical_router_id,
[parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true)]
[string]$transport_node_id
)
Begin
{
$NSXTRoutingTableService = Get-NsxtService -Name "com.vmware.nsx.logical_routers.routing.route_table"
class NSXTRoutingTable {
hidden [string]$Logical_router_id
[string]$lr_component_id
[string]$lr_component_type
[string]$network
[string]$next_hop
[string]$route_type
hidden [string]$logical_router_port_id
[long]$admin_distance
}
}
Process
{
$NSXTRoutingTable = $NSXTRoutingTableService.list($Logical_router_id,$transport_node_id,$null,$null,$null,$null,$null,'realtime')
foreach ($NSXTRoute in $NSXTRoutingTable.results) {
$results = [NSXTRoutingTable]::new()
$results.Logical_router_id = $Logical_router_id;
$results.lr_component_type = $NSXTRoute.lr_component_type;
$results.lr_component_id = $NSXTRoute.lr_component_id;
$results.next_hop = $NSXTRoute.next_hop;
$results.route_type = $NSXTRoute.route_type;
$results.logical_router_port_id = $NSXTRoute.logical_router_port_id;
$results.admin_distance = $NSXTRoute.admin_distance;
$results.network = $NSXTRoute.network
$results
}
}
}
Function Get-NSXTFabricVM {
<#
.Synopsis
Retrieves the VM's attached to the fabric.
.DESCRIPTION
Retrieves all VM's attached to the fabric.
.EXAMPLE
Get-NSXTFabricVM
#>
Begin
{
$NSXTVMService = Get-NsxtService -Name "com.vmware.nsx.fabric.virtual_machines"
class NSXVM {
[string]$Name
$resource_type
hidden [string]$Tags
hidden $compute_ids
hidden [string]$external_id
[string]$host_id
[string]$power_state
[string]$type
hidden $source
}
}
Process
{
$NSXTVMs = $NSXTVMService.list().results
foreach ($NSXTVM in $NSXTVMs) {
$results = [NSXVM]::new()
$results.Name = $NSXTVM.display_name;
$results.resource_type = $NSXTVM.resource_type;
$results.compute_ids = $NSXTVM.compute_ids;
$results.resource_type = $NSXTVM.resource_type;
$results.Tags = $NSXTVM.tags;
$results.external_id = $NSXTVM.external_id;
$results.host_id = $NSXTVM.host_id;
$results.power_state = $NSXTVM.power_state;
$results.type = $NSXTVM.type;
$results.source = $NSXTVM.source
$results
}
}
}
Function Get-NSXTBGPNeighbors {
<#
.Synopsis
Retrieves the BGP neighbor information
.DESCRIPTION
Retrieves BGP neighbor information for a single logical router. Must specify logical_router_id parameter. Pipeline input supported
.EXAMPLE
Get-NSXTBGPNeighbors -logical_router_id "LR ID"
.EXAMPLE
Get-NSXTLogicalRouter | where name -eq "LR Name" | Get-NSXTBGPNeighbors
#>
Param (
[parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true)]
[Alias("Id")]
[string]$logical_router_id
)
begin
{
$NSXTThingsService = Get-NsxtService -Name "com.vmware.nsx.logical_routers.routing.bgp.neighbors"
class NSXTBGPNeighbors {
[string]$Name
[string]$logical_router_id
hidden $tags = [System.Collections.Generic.List[string]]::new()
[string]$protection
[string]$resource_type
[string]$address_families = [System.Collections.Generic.List[string]]::new()
hidden $bfd_config
[bool]$enable_bfd
[bool]$enabled
hidden $filter_in_ipprefixlist_id
hidden $filter_in_routemap_id
hidden $filter_out_ipprefixlist_id
hidden $filter_out_routemap_id
hidden [long]$hold_down_timer
hidden [long]$keep_alive_timer
hidden [long]$maximum_hop_limit
[string]$neighbor_address
hidden [string]$password
[long]$remote_as
[string]$remote_as_num
[string]$source_address
[string]$source_addresses = [System.Collections.Generic.List[string]]::new()
}
}
Process
{
$NSXTThings = $NSXTThingsService.list($logical_router_id).results
foreach ($NSXTThing in $NSXTThings) {
$results = [NSXTBGPNeighbors]::new()
$results.Name = $NSXTThing.display_name;
$results.logical_router_id = $NSXTThing.logical_router_id;
$results.tags = $NSXTThing.tags;
$results.protection = $NSXTThing.protection;
$results.resource_type = $NSXTThing.resource_type;
$results.address_families = $NSXTThing.address_families;
$results.bfd_config = $NSXTThing.bfd_config;
$results.enable_bfd = $NSXTThing.enable_bfd;
$results.enabled = $NSXTThing.enabled;
$results.filter_in_ipprefixlist_id = $NSXTThing.filter_in_ipprefixlist_id;
$results.filter_in_routemap_id = $NSXTThing.filter_in_routemap_id;
$results.filter_out_ipprefixlist_id = $NSXTThing.filter_out_ipprefixlist_id;
$results.filter_out_routemap_id = $NSXTThing.filter_out_routemap_id;
$results.hold_down_timer = $NSXTThing.hold_down_timer;
$results.keep_alive_timer = $NSXTThing.keep_alive_timer;
$results.maximum_hop_limit = $NSXTThing.maximum_hop_limit;
$results.neighbor_address = $NSXTThing.neighbor_address;
$results.password = $NSXTThing.password;
$results.remote_as = $NSXTThing.remote_as;
$results.remote_as_num = $NSXTThing.remote_as_num;
$results.source_address = $NSXTThing.source_address;
$results.source_addresses = $NSXTThing.source_addresses
$results
}
}
}
Function Get-NSXTForwardingTable {
<#
.Synopsis
Retrieves the forwarding table information
.DESCRIPTION
Retrieves forwarding table for a single LR including LR type (SR/DR) and next_hop. Must specify Logical_router_id & transport_node_id. Pipeline input supported.
.EXAMPLE
Get-Get-NSXTForwardingTable -Logical_router_id "LR ID" -transport_node_id "TN ID" | format-table -autosize
.EXAMPLE
Get-NSXTLogicalRouter | where name -eq "LR Name" | Get-NSXTForwardingTable -transport_node_id "TN ID"
.EXAMPLE
Get-NSXTLogicalRouter | where name -eq "LR Name" | Get-NSXTForwardingTable -transport_node_id ((Get-NSXTTransportNode | where name -match "Edge Name")[0].transport_node_id)
.EXAMPLE
Get-NSXTLogicalRouter | where name -eq "LR Name" | Get-NSXTForwardingTable -transport_node_id (((Get-NSXTLogicalRouter | where name -eq "Edge Name").per_node_status | where high_availability_status -eq ACTIVE).transport_node_id)
#>
Param (
[parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true)]
[string]$Logical_router_id,
[parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true)]
[string]$transport_node_id
)
Begin
{
$NSXTForwardingTableService = Get-NsxtService -Name "com.vmware.nsx.logical_routers.routing.forwarding_table"
class NSXTForwardingTable {
hidden [string]$Logical_router_id
[string]$lr_component_id
[string]$lr_component_type
[string]$network
[string]$next_hop
[string]$route_type
hidden [string]$logical_router_port_id
}
}
Process
{
$NSXTForwardingTable = $NSXTForwardingTableService.list($Logical_router_id,$transport_node_id,$null,$null,$null,$null,$null,$null,'realtime')
foreach ($NSXTForwarding in $NSXTForwardingTable.results) {
$results = [NSXTForwardingTable]::new()
$results.Logical_router_id = $Logical_router_id;
$results.lr_component_type = $NSXTForwarding.lr_component_type;
$results.lr_component_id = $NSXTForwarding.lr_component_id;
$results.network = $NSXTForwarding.network;
$results.next_hop = $NSXTForwarding.next_hop;
$results.route_type = $NSXTForwarding.route_type;
$results.logical_router_port_id = $NSXTForwarding.logical_router_port_id
$results
}
}
}
Function Get-NSXTNetworkRoutes {
<#
.Synopsis
Retrieves the network routes information
.DESCRIPTION
Retrieves the network routes information for a single or multiple routes.
.EXAMPLE
Get-NSXTNetworkRoutes
.EXAMPLE
Get-NSXTNetworkRoutes -route_id "Route ID"
#>
Param (
[parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)]
[string]$route_id
)
Begin
{
$NSXTNetworkRoutesService = Get-NsxtService -Name "com.vmware.nsx.node.network.routes"
class NSXTNetworkRoutes {
[string]$route_id
$route_type
$interface_id
$gateway
$from_address
$destination
$netmask
$metric
$proto
$scope
$src
}
}
Process
{
if ($route_id) {
$NSXTNetworkRoutes = $NSXTNetworkRoutesService.get($route_id)
}
else {
$NSXTNetworkRoutes = $NSXTNetworkRoutesService.list().results
}
foreach ($NSXTRoute in $NSXTNetworkRoutes) {
$results = [NSXTNetworkRoutes]::new()
$results.route_id = $NSXTRoute.route_id;
$results.route_type = $NSXTRoute.route_type;
$results.interface_id = $NSXTRoute.interface_id;
$results.gateway = $NSXTRoute.gateway;
$results.from_address = $NSXTRoute.from_address;
$results.destination = $NSXTRoute.destination;
$results.netmask = $NSXTRoute.netmask;
$results.metric = $NSXTRoute.metric;
$results.proto = $NSXTRoute.proto;
$results.scope = $NSXTRoute.scope;
$results.src = $NSXTRoute.src
$results
}
}
}
Function Get-NSXTLogicalRouterPorts {
<#
.Synopsis
Retrieves the logical router port information
.DESCRIPTION
Retrieves logical router port information for a single or multiple ports. Execute with no parameters to get all ports, specify a single port if known, or feed a logical switch for filtered output.
.EXAMPLE
Get-NSXTLogicalRouterPorts
.EXAMPLE
Get-NSXTLogicalRouterPorts -logical_router_port_id "LR Port Name"
.EXAMPLE
Get-NSXTLogicalRouterPorts -logical_router_id "LR Name"
.EXAMPLE
Get-NSXTLogicalRouterPorts -logical_router_id (Get-NSXTLogicalRouter | where name -eq "LR Name")
#>
Param (
[parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)]
[Alias("Id")]
[string]$logical_router_port_id,
[parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)]
[string]$logical_router_id
)
begin
{
$NSXTLogicalRouterPortsService = Get-NsxtService -Name "com.vmware.nsx.logical_router_ports"
class subnets {
$ip_addresses
$prefix_length
subnets(){}
subnets(
$ip_addresses,
$prefix_length
) {
$this.ip_addresses = $ip_addresses
$this.prefix_length = $prefix_length
}
}
class NSXTLogicalRouterPorts {
[string]$Name
$Id
[string]$logical_router_id
$resource_type
[string]$protection
$mac_address
$subnets = [System.Collections.Generic.List[string]]::new()
hidden [string]$Tags
hidden $linked_logical_switch_port_id
}
}
Process
{
if($logical_router_port_id) {
$NSXTLogicalRouterPorts = $NSXTLogicalRouterPortsService.get($logical_router_port_id)
} else {
if ($logical_router_id) {
$NSXTLogicalRouterPorts = $NSXTLogicalRouterPortsService.list().results | where {$_.logical_router_id -eq $Logical_router_id}
}
else {
$NSXTLogicalRouterPorts = $NSXTLogicalRouterPortsService.list().results
}
}
foreach ($NSXTLogicalRouterPort in $NSXTLogicalRouterPorts) {
$results = [NSXTLogicalRouterPorts]::new()
foreach ($subnet in $NSXTLogicalRouterPort.subnets) {
$results.subnets += [subnets]::new($subnet.ip_addresses,$subnet.prefix_length)
}
$results.Name = $NSXTLogicalRouterPort.display_name
$results.Id = $NSXTLogicalRouterPort.Id
$results.Logical_router_id = $NSXTLogicalRouterPort.Logical_router_id
$results.resource_type = $NSXTLogicalRouterPort.resource_type
$results.protection = $NSXTLogicalRouterPort.protection
$results.Tags = $NSXTLogicalRouterPort.tags
$results.mac_address = $NSXTLogicalRouterPort.mac_address
$results.linked_logical_switch_port_id = $NSXTLogicalRouterPort.linked_logical_switch_port_id
$results
}
}
}
# Get Template
Function Get-NSXTThingTemplate {
<#
.Synopsis
Retrieves the THING information
.DESCRIPTION
Retrieves THING information for a single or multiple ports. Execute with no parameters to get all ports, specify a PARAM if known.
.EXAMPLE
Get-NSXTThingTemplate
.EXAMPLE
Get-NSXTThingTemplate -param1 "LR Port Name"
.EXAMPLE
Get-NSXTThingTemplate -param2 "LR Name"
.EXAMPLE
Get-NSXTThingTemplate -param2 (Get-NSXTLogicalRouter | where name -eq "LR Name")
#>
Param (
[parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)]
[Alias("Id")]
[string]$Thing_id
)
begin
{
$NSXTThingsService = Get-NsxtService -Name "com.vmware.nsx.API.Thing"
class NSXTThing {
[string]$Name
[string]$Thing1
hidden [string]$Tags = [System.Collections.Generic.List[string]]::new()
[string]$Thing2
#[ValidateSet("TIER0","TIER1")]
[string]$Thing3
#[ValidateSet("ACTIVE_ACTIVE","ACTIVE_STANDBY","")]
[string]$Thing4
#[ValidateSet("PREEMPTIVE","NON_PREEMPTIVE","")]
[string]$Thing5
[string]$Thing6
[string]$Thing7
}
}
Process
{
if($Thing_id) {
$NSXTThings = $NSXTThingsService.get($Thing_id)
} else {
$NSXTThings = $NSXTThingsService.list().results
}
foreach ($NSXTThing in $NSXTThings) {
$results = [NSXTThing]::new()
$results.Name = $NSXTThing.display_name;
$results.Logical_router_id = $NSXTThing.Id;
$results.Tags = $NSXTThing.tags;
$results.thing1 = $NSXTThing.thing1;
$results.thing2 = $NSXTThing.thing2
$results
}
}
}