I created a workflow to create 5000 virtual switches in NSX… which was cool. But it did create 5000 virtual switches which now needed to be deleted. So I created a new workflow to delete them. In my case I created all 5000 switches on the same distributed logical router. I had to delete the DLR before starting this workflow. I used two RESTAPI calls to complete this work as show below:
And
Notice the URL templates on both as they are critical. Otherwise it’s just a RESTAPI call to NSX Manager.
These two workflows along with the RestHost get passed into a workflow as shown:
Otherwise it’s just a scriptable task. I ran into an issue with it running too fast for NSX manager so I put a 1 second wait in between each call. Here is the code:
function sleep(milliseconds) { var start = new Date().getTime(); for (var i = 0; i < 1e7; i++) { if ((new Date().getTime() - start) > milliseconds){ break; } } } //Setup the get request for wires var inParamtersValues = []; var request = restOperation.createRequest(inParamtersValues, null); request.contentType = ""; var response = request.execute(); //prepare output parameters //System.log("Response: " + response); statusCode = response.statusCode; statusCodeAttribute = statusCode; //System.log("Status code: " + statusCode); contentLength = response.contentLength; headers = response.getAllHeaders(); contentAsString = response.contentAsString; System.log(response); var xmlObj = new XML(contentAsString); var document = XMLManager.fromString(contentAsString); var count = document.getElementsByTagName("vdnId"); System.log("Count : " + count.length); j = 0; for (i=0; i < count.length; i++) { //System.log("Scope: " + xmlObj.dataPage.virtualWire[i].objectId + " vdnId: " + xmlObj.dataPage.virtualWire[i].vdnId ); if ( xmlObj.dataPage.virtualWire[i].vdnId > 5010) { System.log("Scope: " + xmlObj.dataPage.virtualWire[i].objectId + " vdnId: " + xmlObj.dataPage.virtualWire[i].vdnId ); var virtualWireID = xmlObj.dataPage.virtualWire[i].objectId; var inParamtersValues = [virtualWireID]; var request = restOperationDelete.createRequest(inParamtersValues, null); request.contentType = ""; var response = request.execute(); statusCode = response.statusCode; System.log("Response : " + statusCode + " Rest request : " + virtualWireID); j++; sleep(1000); } } System.log("j : " + j + " Total : " + count.length);
It should work great it’s currently set to delete every vnri above 5010 (mine start at 5000) you can adjust this number to whatever you want…