I work for a MSP that manages many customer networks. Despite Solarwinds not being the proper tool for multi-tenancy monitoring, we have done a pretty good job with it so far. There is one thing that bothers me though, every time Soalrwinds comes out with a new feature, it seems like they overlook a few things and it doesn't work the way its supposed to. We have been on an initiative to automate as much stuff as we can to handle our increasing work load, but I have been getting nothing but roadblocks with Solarwinds.
My idea was to take a list of IP address and create a script using the orionSDK to automate loading the devices into the platform. In theory it should work fine, but in reality; it doesn't. Here are the issues that I have run into. If anyone has any viable work-arounds; I'm all ears.
Adding Devices
1. Adding devices through the API using swis.create('Orion.Nodes', **props). This should essentially be the same thing as adding a single node through the web UI. You supply the IP, and SNMP creds and it gets added, but it doesn't work like that. For some reason, Solarwinds decided it would be fun to make us search for, and manually configure all the default pollers that would normally get automatically added when doing it through the UI. Why do I have to supply that through the API when it is automatically detected when adding a node through the UI?? The functionality should be the same regardless of how I'm adding a device. We support a multitude of device vendors, and if I'm going to build a dictionary or database table with all the default pollers for each vendor so my script can add the correct ones, then I may as well just build my own NMS...
2. Adding devices using the discovery API. For this, there are 2 options:
Option A: Setup and run the discovery, but don't import the nodes automatically. This defeats the purpose of automation as we will then have to go into the UI and find the discovery results and finish adding interfaces/volumes. This just saves 8 clicks of the 'Next' button when having to manually configure the discovery.
Option B: Setup and run the discovery, and automatically import the nodes. When reading through the documentation, this seemed like it would be the best way to go. In my mind, it should discover the devices and apply the default pollers, then add them to the system with no interfaces or volumes, we could then add specific interfaces using the AddInterfacesOnNode verb. But, as with everything else I have tried, this doesn't work as expected either. When I run the script to add just the nodes (there is no PluginConfigurationItem configured for the Interfaces in my script), it discovers the device, and brings in all Up/Up interfaces as well as every Volume (including A:). Once again this defeats the purpose of automation because now I have to go back to every node I create and remove the resources I didn't need. The options for configuring the Interfaces PluginConfigurationItem are the same options that you get when configuring the discovery through the web. It seems like it would work until you realize that the filters for interface names are treated as AND instead of OR which basically keeps any interfaces from matching your filters and you end up with nothing.
Creating User Accounts
Here is another feature that doesn't work like it should. I have successfully created a script that can create a list of user accounts. There are 2 problems with the API though:
1. All attempts at creating/applying account limitations to the user accounts through the API have failed, so I still have to manually add them after the accounts are created.
2. While the accounts appear to get created successfully, They are missing the options to set which menu bars are visible to the account. The options don't appear in the account properties until the account has logged into the Web UI at least once. This does not apply to accounts created through the UI, those are fine. In order to make this 'feature' remotely useful (we often get asked to create 10-15 accounts per customer) I had to make another method that logs each user into the web so that I can configure their menu bars. I ended up using Google's Selenium package in python to accomplish this, and while it works; its something that I shouldn't have had to do at all.
There seems to be a big disconnect between UI functionality, and the functionality/efficacy of the API. It makes me wonder if the developers have ever had to use their platform at all, or fully test the features that they implement in the API.