Over the corse of the years, I’ve had to work with Solarwinds IPAM multiple times. It has never been pleasant. I hate IPAM in general for reasons I wont get into, but when you gotta use it, you gotta use it.

While the Solarwinds IPAM has a seemingly greate SDK, the supported client libraries are powershell and python. Both of these have difficulties with cross platform use so I created solarcmd.

It’s an all in one binary written in go, building on the work of to provide an easier cli experience.

Some examples of when you might use it…

Scenario: I have a network in vcenter, but I need to find an IP address for my system.

The below govc command shows the network name.

$ govc ls /Pasadena/network | grep -i DEVNETWORK

Now I need to find the VLAN, and ultimately an IP address from this network.

$ # I can just list all subnets and relevant information
$ $ solarcmd subnet list | jq '.[] | [ .Address, .CIDR, .DisplayName ]'
    "Foobar Network"
$ # I can search for a specific subnet by display name.
$ solarcmd subnet find --name "Foobar Network" | jq .
    "DisplayName": "Foobar Network"
    "VLAN": "1"

Now that I know some subnet information, I can use the API to find and reserve an IP Address

$ # Show available IPs
$ solarcmd ip get --cidr 24
{"IpNodeID": 0, "IPAddress": "", "Status": 0, "StatusString": "", "Comments","" }
$ # Reserve the IP
$ solarcmd ip reserve
{"IpNodeID": 0, "IPAddress": "", "Status": 0, "StatusString": "", "Comments","" }

This code was also used to create my terraform provider which I’ll discuss in detail at a later post.

Go check it out at my github - installation details can be found there. Comments/suggestions/issues welcome!