vCloud Director Edge-Gateway IP Report

Zur internen Dokumentation war es vor kurzem notwendig, einen vollständigen vCloud Director Edge-Gateway IP Report aller Netze anzufertigen. Der Report sollte nicht nur die IP’s der Gateways selbst beinhalten, sondern auch die eventuelle Unterzuweisung von IP-Pools (SubAllocations).

Vielen dank übrigens an der Stelle noch einmal an Adam Rush für seinen sehr hilfreichen Kommentar in meinem VMware Community Thread zu dem Thema.

Report Daten:

  • Edge-Gateway Name
  • Verbundenes Netz
  • IP
  • Unterzuweisung von IP-Pools

Wenn ein Edge-Gateway mehrere Netze verbunden hat, wird der Name mehrfach gelistet, jeweils mit den dazugehörigen Parametern.

vCloud Director Edge-Gateway IP Report Script

Um sauber die Liste der IP’s anahnd von Start und End IP zu errechnen habe ich mich der tollen „List IP addresses in a range using Powershell“ Funktion aus dem Microsoft Script Center bedient.

## IP range Function
function Get-IPrange
{
<# 
  .SYNOPSIS  
    Get the IP addresses in a range 
  .EXAMPLE 
   Get-IPrange -start 192.168.8.2 -end 192.168.8.20 
  .EXAMPLE 
   Get-IPrange -ip 192.168.8.2 -mask 255.255.255.0 
  .EXAMPLE 
   Get-IPrange -ip 192.168.8.3 -cidr 24 
#> 
 
param 
( 
  [string]$start, 
  [string]$end, 
  [string]$ip, 
  [string]$mask, 
  [int]$cidr 
) 
 
function IP-toINT64 () { 
  param ($ip) 
 
  $octets = $ip.split(".") 
  return [int64]([int64]$octets[0]*16777216 +[int64]$octets[1]*65536 +[int64]$octets[2]*256 +[int64]$octets[3]) 
} 
 
function INT64-toIP() { 
  param ([int64]$int) 

  return (([math]::truncate($int/16777216)).tostring()+"."+([math]::truncate(($int%16777216)/65536)).tostring()+"."+([math]::truncate(($int%65536)/256)).tostring()+"."+([math]::truncate($int%256)).tostring() )
} 
 
if ($ip) {$ipaddr = [Net.IPAddress]::Parse($ip)} 
if ($cidr) {$maskaddr = [Net.IPAddress]::Parse((INT64-toIP -int ([convert]::ToInt64(("1"*$cidr+"0"*(32-$cidr)),2)))) } 
if ($mask) {$maskaddr = [Net.IPAddress]::Parse($mask)} 
if ($ip) {$networkaddr = new-object net.ipaddress ($maskaddr.address -band $ipaddr.address)} 
if ($ip) {$broadcastaddr = new-object net.ipaddress (([system.net.ipaddress]::parse("255.255.255.255").address -bxor $maskaddr.address -bor $networkaddr.address))} 
 
if ($ip) { 
  $startaddr = IP-toINT64 -ip $networkaddr.ipaddresstostring 
  $endaddr = IP-toINT64 -ip $broadcastaddr.ipaddresstostring 
} else { 
  $startaddr = IP-toINT64 -ip $start 
  $endaddr = IP-toINT64 -ip $end 
} 
 
 
for ($i = $startaddr; $i -le $endaddr; $i++) 
{ 
  INT64-toIP -int $i 
}

}

## Report
# Get Edge CIView object
$EdgeName = '*'
$EdgeView = Search-Cloud -QueryType EdgeGateway -Name $EdgeName | Get-CIView

# Build Output
$EdgeReport = @()
foreach ($Edge in $EdgeView) {

    [Array]$GatewayInterfaces = $Edge.Configuration.GatewayInterfaces
    foreach($GatewayInterface in $GatewayInterfaces.GatewayInterface){ 
                $obj = "" | Select-Object EdgeName, NetworkName, IP, IPRanges              
                $obj.EdgeName = $Edge.Name
                $obj.NetworkName = $GatewayInterface.Name
                $obj.IP = $GatewayInterface.SubnetParticipation.IpAddress
                [Array] $RangeReport = @()
                foreach ($IPRange in $GatewayInterface.SubnetParticipation.IpRanges.IpRange) {
                    [Array] $Range = Get-IPrange -start $IPRange.StartAddress -end $IPRange.EndAddress
                    foreach($IP in $Range){  
                        $RangeReport += $IP
                        }
                    }
                    
                $obj.IPRanges = $RangeReport -join "," 
                $EdgeReport += $obj     
                }
                
               
    }
# Output
#$EdgeReport | Export-Csv C:\Output.csv -Delimiter ";"
$EdgeReport | Sort EdgeName, NetworkName | Format-Table -AutoSize

vCloud Director Edge-Gateway IP Report Ausgabe

Die Ausgabe des Skripts ist eigentlich als CSV Export gedacht, um diesen weiter zu verarbeiten.

Zur besseren Darstellung habe ich ein Netz bzw. ein Edge-Gateway aus dem vCloud Director Edge-Gateway IP Report gefiltert.

$EdgeReport | where {$_.NetworkName -eq "MyNetwork"} | Sort EdgeName, NetworkName | Format-Table -AutoSize

$EdgeReport | where {$_.EdgeName -eq "MyEdge"} | Sort EdgeName, NetworkName | Format-Table -AutoSize

vCloud Director Edge-Gateway IP Report - Edge Snipet

vCloud Director Edge-Gateway IP Report - Edge Snipet in Excel

#LongLiveVCD

Leave a Reply