Over the last few years I’ve had a chance to work with NSX-V REST APIs in many different shapes and forms. Directly from vRealize Orchestrator and PowerShell/PowerNSX, indirectly from vRealize Automation or simply by making calls from Postman, which is sometimes required during NSX deployment and upgrades.
To date I haven’t been able to find any gaps in the API and can say only good things about it. It is very well documented. You can find detailed descriptions of all requests in NSX API Guide PDF or interactively browse it in API explorer on https://code.vmware.com.
But at the end of the day, NSX REST API is only a subset of what you can do from CLI and there are situations where it’s not sufficient. I’ll give you an example. Let’s say you want to know how much storage is available on NSX Manager appliance log partition. There’s a REST API call, which will give you a response similar to this:
GET https://nsxm/api/1.0/appliance-management/system/storageinfo
<storageInfo>
<totalStorage>86G</totalStorage>
<usedStorage>22G</usedStorage>
<freeStorage>64G</freeStorage>
<usedPercentage>25</usedPercentage>
</storageInfo>
As you can see, it answers the question of how much total space is available on the appliance, but doesn’t provide a full per partition breakdown available from the CLI via “show filesystem”:
Filesystem Size Used Avail Use% Mounted on /dev/root 5.6G 1.2G 4.1G 23% / tmpfs 7.9G 232K 7.9G 1% /run devtmpfs 7.9G 0 7.9G 0% /dev /dev/sda6 44G 19G 24G 44% /common /dev/loop0 16G 45M 15G 1% /common/vdisk_mnt
So what are the options here? What is not widely known is that you can use NSX central command-line interface to remotely invoke appliance CLI commands using REST API.
Invoking CLI Commands
NSX REST API has a handy POST call https://nsxm/api/1.0/nsx/cli?action=execute. All you need to provide in addition to Authorization credentials using “Basic Auth” option is the following body in XML format:
<nsxcli> <command>show filesystem</command> </nsxcli>
In response you will get a body in “text/plain” format, which is the only drawback of this method. You will need to parse the response in your scripting language of choice. In PowerShell, if you made the original call using Invoke-WebRequest cmdlet and saved it into the $response variable, it can look something like this:
$responseRows = $response.Content -split "`n" foreach($row in $responseRows) { if($row -Like "*/dev/sda6*") { $pctUsed = $row.Split(" ",[StringSplitOptions]"RemoveEmptyEntries")[4] $pctUsedValue = $pctUsed.Substring(0, $pctUsed.Length-1) Write-Host "Space utilization on the log partition is $pctUsed." break } }
Conclusion
For most use cases NSX REST API provides all the necessary information about NSX component configuration in structured JSON or XML format. This method is more of an exception rather than a rule, but it’s a nice tool to have in your tool belt, when you run out of options.