Major refactoring
Major refactoring - replaced hashtables with classes. Can now accept pipeline input.
This commit is contained in:
@@ -259,89 +259,114 @@ Function Get-NSXTManager {
|
|||||||
$results
|
$results
|
||||||
}
|
}
|
||||||
|
|
||||||
Function Get-NSXTTransportNodes {
|
Function Get-NSXTTransportNode {
|
||||||
Param (
|
Param (
|
||||||
[parameter(Mandatory=$false,ValueFromPipeline=$true)][string]$Id
|
[parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)]
|
||||||
|
[Alias("Id","Tranportnode_id")]
|
||||||
|
[string]$transport_node_id
|
||||||
)
|
)
|
||||||
|
|
||||||
$transport_nodesService = Get-NsxtService -Name "com.vmware.nsx.transport_nodes"
|
begin
|
||||||
$transport_nodesstateService = Get-NsxtService -Name "com.vmware.nsx.transport_nodes.state"
|
{
|
||||||
|
$NSXTransportNodesService = Get-NsxtService -Name "com.vmware.nsx.transport_nodes"
|
||||||
if($Id) {
|
|
||||||
$transport_nodes = $transport_nodesService.get($Id)
|
|
||||||
} else {
|
|
||||||
$transport_nodes = $transport_nodesService.list().results
|
|
||||||
}
|
|
||||||
|
|
||||||
$results = @()
|
class NSXTransportNode {
|
||||||
foreach ($transport_node in $transport_nodes) {
|
[string]$Name
|
||||||
|
[string]$Tranport_node_id
|
||||||
$transport_nodesstate = $transport_nodesstateService.get("$($transport_node.Id)")
|
[string]$maintenance_mode
|
||||||
|
hidden $tags = [System.Collections.Generic.List[string]]::new()
|
||||||
$tmp = [pscustomobject] @{
|
hidden $host_switches = [System.Collections.Generic.List[string]]::new()
|
||||||
Id = $transport_node.Id;
|
hidden [string]$host_switch_spec
|
||||||
Name = $transport_node.display_name;
|
hidden $transport_zone_endpoints = [System.Collections.Generic.List[string]]::new()
|
||||||
Tags = $transport_node.tags;
|
|
||||||
MaintenanceMode = $transport_node.maintenance_mode;
|
|
||||||
HostSwitchesName = $transport_node.host_switches.host_switch_name;
|
|
||||||
Default_gateway = $transport_nodesstate.host_switch_states.endpointsdefault_gateway;
|
|
||||||
Device_name = $transport_nodesstate.host_switch_states.endpoints.device_name;
|
|
||||||
Ip = $transport_nodesstate.host_switch_states.endpoints.ip;
|
|
||||||
Subnet_mask =$transport_nodesstate.host_switch_states.endpoints.subnet_mask
|
|
||||||
}
|
}
|
||||||
$results+=$tmp
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$results
|
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.Tranport_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
|
||||||
|
write-output $results
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Function Get-NSXTTraceFlows {
|
Function Get-NSXTTraceFlow {
|
||||||
Param (
|
Param (
|
||||||
[parameter(Mandatory=$false,ValueFromPipeline=$true)][string]$Id
|
[parameter(Mandatory=$false,ValueFromPipeline=$true)]
|
||||||
|
[Alias("Id")]
|
||||||
|
[string]$traceflow_id
|
||||||
)
|
)
|
||||||
|
|
||||||
$NSXTraceFlowsService = Get-NsxtService -Name "com.vmware.nsx.traceflows"
|
$NSXTraceFlowsService = Get-NsxtService -Name "com.vmware.nsx.traceflows"
|
||||||
|
|
||||||
if($Id) {
|
if($traceflow_id) {
|
||||||
$NSXTraceFlows = $NSXTraceFlowsService.get($Id)
|
$NSXTraceFlows = $NSXTraceFlowsService.get($traceflow_id)
|
||||||
} else {
|
} else {
|
||||||
$NSXTraceFlows = $NSXTraceFlowsService.list().results
|
$NSXTraceFlows = $NSXTraceFlowsService.list().results
|
||||||
}
|
}
|
||||||
|
|
||||||
$results = @()
|
class NSXTraceFlow {
|
||||||
foreach ($NSXTraceFlow in $NSXTraceFlows) {
|
[string]$traceflow_id
|
||||||
|
hidden [string]$lport_id
|
||||||
$tmp = [pscustomobject] @{
|
[string]$Operation_State
|
||||||
Id = $NSXTraceFlow.Id;
|
[int]$Forwarded
|
||||||
Operation_State = $NSXTraceFlow.operation_state;
|
[int]$Delivered
|
||||||
Delivered = $NSXTraceFlow.Counters.delivered_count;
|
[int]$Received
|
||||||
Dropped = $NSXTraceFlow.Counters.dropped_count;
|
[int]$Dropped
|
||||||
Analysis = $NSXTraceFlow.maintenance_mode;
|
[string]$Analysis
|
||||||
}
|
|
||||||
$results+=$tmp
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$results
|
foreach ($NSXTraceFlow in $NSXTraceFlows) {
|
||||||
|
|
||||||
if ($Id) {
|
$results = [NSXTraceFlow]::new()
|
||||||
write-output $Id
|
$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
|
||||||
|
write-output $results
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Function Get-NSXTTraceFlowObservations {
|
Function Get-NSXTTraceFlowObservations {
|
||||||
Param (
|
Param (
|
||||||
[parameter(Mandatory=$true,ValueFromPipeline=$true)][string]$Id
|
[parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true)]
|
||||||
|
[Alias("Id")]
|
||||||
|
[string]$traceflow_id
|
||||||
)
|
)
|
||||||
|
|
||||||
$NSXTraceFlowsObservService = Get-NsxtService -Name "com.vmware.nsx.traceflows.observations"
|
begin
|
||||||
|
{
|
||||||
if($Id) {
|
$NSXTraceFlowsObservService = Get-NsxtService -Name "com.vmware.nsx.traceflows.observations"
|
||||||
$NSXTraceFlowsObserv = $NSXTraceFlowsObservService.list($Id)
|
|
||||||
} else {
|
|
||||||
throw "TraceFlow ID required"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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")}}
|
$NSXTraceFlowsObserv.results | select transport_node_name,component_name,@{N='PacketEvent';E={($_.resource_type).TrimStart("TraceflowObservation")}}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Function Set-NSXTTraceFlow {
|
Function Set-NSXTTraceFlow {
|
||||||
@@ -416,36 +441,55 @@ Function Set-NSXTTraceFlow {
|
|||||||
|
|
||||||
$NSXTraceFlowsService = Get-NsxtService -Name "com.vmware.nsx.traceflows"
|
$NSXTraceFlowsService = Get-NsxtService -Name "com.vmware.nsx.traceflows"
|
||||||
|
|
||||||
# This is where I need help - the method does not ingest the complete $traceflow_request object!
|
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()
|
||||||
|
|
||||||
# Create the example object
|
packet_data(){
|
||||||
$traceflow_request = $NSXTraceFlowService.help.create.traceflow_request.Create()
|
$this.routed = 'true'
|
||||||
$traceflow_request.lport_id = $LPORTID
|
$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'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[traceflow_request]$traceflow_request = [traceflow_request]::new()
|
||||||
|
|
||||||
|
$traceflow_request.lport_id = '8afcd58a-4bdc-483c-97a5-c5f08df7f772'
|
||||||
$traceflow_request.timeout = '15000'
|
$traceflow_request.timeout = '15000'
|
||||||
$traceflow_request.packet.routed = 'true'
|
$traceflow_request.packet.routed = 'true'
|
||||||
$traceflow_request.packet.transport_type = $TrafficType.ToUpper()
|
$traceflow_request.packet.transport_type = 'UNICAST'
|
||||||
$traceflow_request.packet.resource_type = 'FieldsPacketData'
|
$traceflow_request.packet.resource_type = 'FieldsPacketData'
|
||||||
$traceflow_request.packet.frame_size = '64'
|
$traceflow_request.packet.frame_size = '128'
|
||||||
|
$traceflow_request.packet.eth_header.src_mac = '00:50:56:b3:90:e3'
|
||||||
# The example object is missing packet data, so we create it.
|
$traceflow_request.packet.eth_header.dst_mac = '00:50:56:b3:0e:91'
|
||||||
$eth_header = @{src_mac = $SMAC;eth_type = '2048';dst_mac = $DMAC}
|
$traceflow_request.packet.ip_header.src_ip = '15.128.160.20'
|
||||||
$ip_header = @{src_ip = $SIPAddr;protocol = '1';ttl = '64';dst_ip = $DIPAddr}
|
$traceflow_request.packet.ip_header.dst_ip = '15.128.160.24'
|
||||||
$traceflow_request.packet | Add-Member -NotePropertyMembers $eth_header -TypeName eth_header
|
|
||||||
$traceflow_request.packet | Add-Member -NotePropertyMembers $ip_header -TypeName ip_header
|
|
||||||
|
|
||||||
# Alternative method of creating $traceflow_request (not working either)
|
|
||||||
<#
|
|
||||||
$TraceFlow_Request = [PSCustomObject]@{
|
|
||||||
packet = @{routed = 'true';
|
|
||||||
transport_type = $TrafficType.ToUpper();
|
|
||||||
ip_header = @{src_ip = $SIPAddr;dst_ip = $DIPAddr};
|
|
||||||
eth_header = @{dst_mac = $DMAC;src_mac = $SMAC};
|
|
||||||
payload = 'test_payload';
|
|
||||||
resource_type = 'FieldsPacketData'};
|
|
||||||
timeout = '10000';
|
|
||||||
lport_id = $LPORTID
|
|
||||||
}
|
|
||||||
#>
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Process
|
Process
|
||||||
@@ -470,4 +514,138 @@ Function Set-NSXTTraceFlow {
|
|||||||
Get-NSXttraceflow
|
Get-NSXttraceflow
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Function Get-NSXTEdgeCluster {
|
||||||
|
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
|
||||||
|
write-output $results
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Function Get-NSXTLogicalRouter {
|
||||||
|
Param (
|
||||||
|
[parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true)]
|
||||||
|
[Alias("Id")]
|
||||||
|
[string]$Logical_router_id
|
||||||
|
)
|
||||||
|
|
||||||
|
begin
|
||||||
|
{
|
||||||
|
$NSXTLogicalRoutersService = Get-NsxtService -Name "com.vmware.nsx.logical_routers"
|
||||||
|
|
||||||
|
class NSXTLogicalRouter {
|
||||||
|
[string]$Name
|
||||||
|
[string]$Logical_router_id
|
||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Process
|
||||||
|
{
|
||||||
|
if($Logical_router_id) {
|
||||||
|
$NSXLogicalRouters = $NSXTLogicalRoutersService.get($Logical_router_id)
|
||||||
|
} else {
|
||||||
|
$NSXLogicalRouters = $NSXTLogicalRoutersService.list().results
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($NSXLogicalRouter in $NSXLogicalRouters) {
|
||||||
|
|
||||||
|
$results = [NSXTLogicalRouter]::new()
|
||||||
|
$results.Name = $NSXLogicalRouter.display_name;
|
||||||
|
$results.Logical_router_id = $NSXLogicalRouter.Id;
|
||||||
|
$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
|
||||||
|
write-output $results
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Function Get-NSXTRoutingTable {
|
||||||
|
Param (
|
||||||
|
[parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true)]
|
||||||
|
[string]$Logical_router_id,
|
||||||
|
[parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true)]
|
||||||
|
[string]$Tranport_node_id
|
||||||
|
)
|
||||||
|
|
||||||
|
Begin
|
||||||
|
{
|
||||||
|
$NSXTRoutingTableService = Get-NsxtService -Name "com.vmware.nsx.logical_routers.routing.route_table"
|
||||||
|
|
||||||
|
class NSXTRoutingTable {
|
||||||
|
[string]$Name
|
||||||
|
hidden [string]$Id
|
||||||
|
hidden $tags = [System.Collections.Generic.List[string]]::new()
|
||||||
|
#more things need to be added when .list actually works
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Process
|
||||||
|
{
|
||||||
|
$NSXTRoutingTable = [NSXTRoutingTable]::new()
|
||||||
|
|
||||||
|
$NSXTRoutingTable = $NSXTRoutingTableService.list($Logical_router_id, $transport_node_id)
|
||||||
|
|
||||||
|
#$NSXTRoutingTable = $NSXTRoutingTableService.list("ca02cb69-0210-4f34-8164-42943a1cc974","309fda89-3439-40ff-996e-b7eb2ec69ace")
|
||||||
|
|
||||||
|
write-output $NSXTRoutingTable
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user