Some time ago I wrote about how to monitor health of NSX Edge Gateways. In this blog post I will show how to get health and other info about vCloud Director Edge Gateways with PowerCLI.
PowerCLI already includes vCloud Director related cmdlets, unforunatelly there is none related to Edge Gateways. This can be easily remediated by using vCloud API however to get detailed information about Edge health we must use NSX API. As of vCloud Director 8.0 the service provider can easily get NSX Edge ID which is backing up particular vCloud Director Edge as a new type GatewayBacking was added.
What follows is an example of function that collects as much information as possible (interfaces, network services, size, syslog, default gateway, health of all services, Org, Org VDC and Provider VDC) about all Edge Gateways from PowerCLI, vCloud API and NSX API.
Note: there is dependency on the Get-NSXEdgeHealth function.
function Get-CIEdgeGateways { <# .SYNOPSIS Gathers Edge Gateways from vCloud Director and all info through PowerCLI, vCloud API and NSX API .DESCRIPTION Will inventory all of your vCloud Director Edge Gateways .NOTES Author: Tomas Fojta #> [CmdletBinding()] param( [Parameter(Mandatory=$true,Position=0)] [String]$NSXManager, [Parameter(Mandatory=$false,Position=1)] [String]$NSXUsername = "admin", [Parameter(Mandatory=$true)] [String]$NSXPassword ) $output = @(); $EdgeGWs = Search-Cloud -QueryType EdgeGateway Foreach ($Edge in $EdgeGWs) { $Edgeview = $Edge | get-ciview $Vdc = get-OrgVdc -Id ($Edge.PropertyList.Vdc) -ErrorAction SilentlyContinue $webclient = New-Object system.net.webclient $webclient.Headers.Add("x-vcloud-authorization",$Edgeview.Client.SessionKey) $webclient.Headers.Add("accept",$EdgeView.Type + ";version=9.0") [xml]$EGWConfXML = $webclient.DownloadString($EdgeView.href) $n = "" | Select Name,Description,EdgeBacking,Interfaces,Firewall,NAT,LoadBalancer,DHCP,VPN,Routing,Syslog,Size,HA,DNSRelay,DefaultGateway,AdvancedNetworking, Org, TenantId, OrgVDC, OrgVDCId, ProviderVDC, ProviderVDCId, Health $n.Name = $EGWConfXML.EdgeGateway.Name $n.Description = $EGWConfXML.EdgeGateway.Description $n.EdgeBacking = $EGWConfXML.EdgeGateway.GatewayBackingRef.gatewayId $n.Interfaces = $EGWConfXML.EdgeGateway.Configuration.GatewayInterfaces.GatewayInterface $n.Firewall = $EGWConfXML.EdgeGateway.Configuration.EdgegatewayServiceConfiguration.FirewallService.FirewallRule $n.NAT = $EGWConfXML.EdgeGateway.Configuration.EdgegatewayServiceConfiguration.NatService.NatRule $n.LoadBalancer = $EGWConfXML.EdgeGateway.Configuration.EdgegatewayServiceConfiguration.LoadBalancerService.VirtualServer $n.DHCP = $EGWConfXML.EdgeGateway.Configuration.EdgegatewayServiceConfiguration.GatewayDHCPService.Pool $n.VPN = $EGWConfXML.EdgeGateway.Configuration.EdgegatewayServiceConfiguration.GatewayIpsecVpnService $n.Routing = $EGWConfXML.EdgeGateway.Configuration.EdgeGatewayServiceConfiguration.StaticRoutingService $n.Syslog = $EGWConfXML.EdgeGateway.Configuration.SyslogServerSettings.TenantSyslogServerSettings.SyslogServerIp $n.Size = $EGWConfXML.EdgeGateway.Configuration.GatewayBackingConfig $n.HA = $EGWConfXML.EdgeGateway.Configuration.HaEnabled $n.DNSRelay = $EGWConfXML.EdgeGateway.Configuration.UseDefaultRouteForDnsRelay Foreach ($Interface in $n.Interfaces) { if ($Interface.UseForDefaultRoute -eq 'true') {$n.DefaultGateway = $Interface.SubnetParticipation.Gateway} } $n.AdvancedNetworking= $EGWConfXML.EdgeGateway.Configuration.AdvancedNetworkingEnabled $n.Org = $Vdc.Org.Name $n.TenantId = $Vdc.Org.Id.Split(':')[3] $n.OrgVDC = $Vdc.Name $n.OrgVDCId = $Vdc.Id.Split(':')[3] $n.ProviderVDC = $Vdc.ProviderVDC.Name $n.ProviderVDCId = $Vdc.ProviderVDC.Id.Split(':')[3] $n.Health = Get-NSXEdgeHealth -NSXManager $NSXManager -Username $NSXUsername -Password $NSXPassword -EdgeID ($n.EdgeBacking) $Output += $n } return $Output }
This is really great Tomas. Is there anyway to get the version of the edge gateway as well (Aka, if its still a vCNS 5.5.4, or an NSX 6.2.4 Edge)?
Not directly with vCloud API. You will first need to find NSX Edge ID of a particular Org VDC Edge Gateway (GatewayBackingRef http://pubs.vmware.com/vcd-810/index.jsp#com.vmware.vcloud.api.reference.doc_20_0/doc/types/GatewayType.html). Then you will need to use NSX API to get Edge GW version (/api/4.0/edges/edge-id/summary) and get apiVersion (3.0 vs 4.0) or vmVersion (5.5.4 vs 6.2.4) elements.
Hello Tomas
Thanks a lot for this great input.
This line looks strange to me:
$n.AdvancedNetworking= $EGWConfXML.EdgeGateway.Configuration.HaEnabled = $EGWConfXML.EdgeGateway.Configuration.AdvancedNetworkingEnabled
Looks like a typo.
Thanks Stephane for reporting. I have fixed the typo.