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
#LongLiveVCD
No Responses