I am working on a few vCloud and NSX API scripts that collect data about Edge Gateways and needed to test how they work at scale. With this little PowerShell script leveraging NSX API I created 500 Edges in 500 seconds. And yes – I cheated as they were in undeployed state.
get-date $NumberOfEdges = 500 $Username = "admin" $Password = "default" $NSXManager="nsx01.fojta.com" $auth = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($Username + ":" + $Password)) $head = @{"Authorization"="Basic $auth"} $Request = "https://$NSXManager/api/4.0/edges" $count=0 DO { $count++ $body = " <edge> <datacenterMoid>datacenter-2</datacenterMoid> <name>$count</name> <description>TEST</description> <vnics> <vnic> <label>vNic_0</label> <name>vnic0</name> <addressGroups/> <mtu>1500</mtu> <type>internal</type> <isConnected>false</isConnected> <index>0</index> <enableProxyArp>false</enableProxyArp> <enableSendRedirects>true</enableSendRedirects> </vnic> <vnic> <label>vNic_1</label> <name>vnic1</name> <addressGroups/> <mtu>1500</mtu> <type>internal</type> <isConnected>false</isConnected> <index>1</index> <enableProxyArp>false</enableProxyArp> <enableSendRedirects>true</enableSendRedirects> </vnic> <vnic> <label>vNic_2</label> <name>vnic2</name> <addressGroups/> <mtu>1500</mtu> <type>internal</type> <isConnected>false</isConnected> <index>2</index> <enableProxyArp>false</enableProxyArp> <enableSendRedirects>true</enableSendRedirects> </vnic> <vnic> <label>vNic_3</label> <name>vnic3</name> <addressGroups/> <mtu>1500</mtu> <type>internal</type> <isConnected>false</isConnected> <index>3</index> <enableProxyArp>false</enableProxyArp> <enableSendRedirects>true</enableSendRedirects> </vnic> <vnic> <label>vNic_4</label> <name>vnic4</name> <addressGroups/> <mtu>1500</mtu> <type>internal</type> <isConnected>false</isConnected> <index>4</index> <enableProxyArp>false</enableProxyArp> <enableSendRedirects>true</enableSendRedirects> </vnic> <vnic> <label>vNic_5</label> <name>vnic5</name> <addressGroups/> <mtu>1500</mtu> <type>internal</type> <isConnected>false</isConnected> <index>5</index> <enableProxyArp>false</enableProxyArp> <enableSendRedirects>true</enableSendRedirects> </vnic> <vnic> <label>vNic_6</label> <name>vnic6</name> <addressGroups/> <mtu>1500</mtu> <type>internal</type> <isConnected>false</isConnected> <index>6</index> <enableProxyArp>false</enableProxyArp> <enableSendRedirects>true</enableSendRedirects> </vnic> <vnic> <label>vNic_7</label> <name>vnic7</name> <addressGroups/> <mtu>1500</mtu> <type>internal</type> <isConnected>false</isConnected> <index>7</index> <enableProxyArp>false</enableProxyArp> <enableSendRedirects>true</enableSendRedirects> </vnic> <vnic> <label>vNic_8</label> <name>vnic8</name> <addressGroups/> <mtu>1500</mtu> <type>internal</type> <isConnected>false</isConnected> <index>8</index> <enableProxyArp>false</enableProxyArp> <enableSendRedirects>true</enableSendRedirects> </vnic> <vnic> <label>vNic_9</label> <name>vnic9</name> <addressGroups/> <mtu>1500</mtu> <type>internal</type> <isConnected>false</isConnected> <index>9</index> <enableProxyArp>false</enableProxyArp> <enableSendRedirects>true</enableSendRedirects> </vnic> </vnics> <appliances> <deployAppliances>false</deployAppliances> </appliances> </edge>" $Response = Invoke-WebRequest -Uri $Request -Method 'Post' -Headers $head -ContentType "application/xml" -Body $body Write-Host -NoNewline "#"; } Until ($count -ge $NumberOfEdges) Write-Host Write-Host "I have created $count Edges" get-date
Well and you probably do not want to delete them by hand either.
Get-Date $Username = "admin" $Password = "default" $NSXManager="nsx01.fojta.com" $auth = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($Username + ":" + $Password)) $head = @{"Authorization"="Basic $auth"} $Request = "https://$NSXManager/api/3.0/edges" $r = Invoke-WebRequest -Uri ($Request+"?startIndex=0&pageSize=1000") -Headers $head -ContentType "application/xml" -ErrorAction:Stop foreach ($Edge in ([xml]$r.content).pagedEdgeList.edgePage.edgeSummary) { $edgeId = $Edge.objectId If ($Edge.description -eq "TEST") { $count++ $Response = Invoke-WebRequest -Uri ($Request+"/"+$edgeId) -Method 'Delete' -Headers $head -ContentType "application/xml" Write-Host Deleting Edge $edgeId } } Write-Host Write-Host "I have deleted $count Edges" Get-Date
Note: You need at least PowerShell 3.0.
