Go Library for the VMware vSphere API
github.com
github.com
It fits in really nicely with plain-old Bash scripts, and has some niceties such as being able to output dumps of data as both human-readable and to JSON for further manipulation/inspection (e.g. jq)
Wait... I can already put it in my resume and be more impressive for hiring managers (and HR?) who can appreciate the superpowers of govc.
I love govc.
I am no Go expert but is that sort of thing ([]string part) used commonly in Go? Sounds like the API would be better if it wasn't so "string oriented" for a lack of better term? This sounds like you are parsing random text which is fine at a lower level where it could be better abstracted out?
err = v.Retrieve(ctx, VSphere.DATASTORE, VSphere.SUMMARY, &dss)
The constants can just be enums that map to the actual valid string representations. That way API user knows the full extent of the parameters and doesn't have to rely on arbitrary strings.It certainly is worthwhile to look at if you are into VMware and go, but should IMO just have been a normal submission.
At least when I looked at it a year ago, govmomi was terrible. Little documentation. Most return values being opaque objects that you have no idea what to do with (and if pass to another function that takes the opaque object, but not what its wrapping) it errors out.
I only was able to manage to get things done via lots of trial and error and seeing examples others had written.
As someone else in this thread mentioned, the libraries are "string oriented" (for lack of a better term), but finding what string to enter is a pain. I'd have to make API call after API call, printing the objects each time, find the string I needed, do another API call to get the next string, and go on and on, like digging into a deeply nested data structure. Compared to AWS via boto, it's hard to imagine not hating the vSphere API, let alone loving it.
But it is good that some people like it, these libraries must be hitting their target market to some extent.
There are community samples for pyvmomi, multiple blogs explaining common use cases etc. But yes, sometimes it's quicker/easier to create thing in the UI and read back the values.
Maybe my standards are low.
EDIT: I also don't understand your "string oriented" comment. Do you mean the object IDs (MOIDs/morefs)?
In pyvmomi you can do this:
vm = vim.VirtualMachine("vm-1297")
vm._stub = service_instance._stub
You now have a VM object, not a string. vm.RebootGuest()
etc (yes you need some helper methods to lookup things by name etc, but various things by name are not unique)