VMware ESXi console: viewing all VMs, suspending and waking them up: part 2
Posted by jpluimers on 2021/04/27
Last week ended up to be a kind of VMware ESXi heavey, and this week will be similar. So it is time for following up on VMware ESXi console: viewing all VMs, suspending and waking them up: part 1.
That one ended with
Then we get this to print some of the capture groups:
vim-cmd vmsvc/getallvms | sed -n -E -e "s/^([[:digit:]]+)\s+((\S.+\S)?)\s+(\[\S+\])\s+(.+\.vmx)\s+(\S+)\s+(vmx-[[:digit:]]+)\s*?((\S.+)?)$/Vmid:\1 Guest:\6 Version:\7 Name:\3 Datastore:\4 File:\5 Annotation:\8/p"
With this output:
Vmid:10 Guest:windows9_64Guest Version:vmx-14 Name:X9SRI-3F-W10P-EN-MEDIA Datastore:[EVO860_500GB] File:VM/X9SRI-3F-W10P-EN-MEDIA/X9SRI-3F-W10P-EN-MEDIA.vmx Annotation: Vmid:5 Guest:centos64Guest Version:vmx-11 Name:PPB Local_Virtual Machine_v4.0 Datastore:[EVO860_500GB] File:VM/PPB-Local_Virtual-Machine_v4.0/PPB Local_Virtual Machine_v4.0.vmx Annotation:PowerPanel Business software(Local) provides the service which communicates
Figuring out power state for each VM
This will be in the next installment, as by now this already has become a big blog-post (:
I basically went the vim-cmd vmsvc
way instead of the esxcli vm
way. My motivation was the easier to understand ID values. They are the basis of virtually all vim-cmd vmsvc
based commands:
# vim-cmd vmsvc --help Commands available under vmsvc/: acquiremksticket get.snapshotinfo acquireticket get.spaceNeededForConsolidation createdummyvm get.summary destroy get.tasklist device.connection getallvms device.connusbdev gethostconstraints device.ctlradd message device.ctlrremove power.getstate device.disconnusbdev power.hibernate device.diskadd power.off device.diskaddexisting power.on device.diskextend power.reboot device.diskremove power.reset device.getdevices power.shutdown device.nvdimmadd power.suspend device.nvdimmremove power.suspendResume device.toolsSyncSet queryftcompat devices.createnic reload get.capability setscreenres get.config snapshot.create get.config.cpuidmask snapshot.dumpoption get.configoption snapshot.get get.datastores snapshot.remove get.disabledmethods snapshot.removeall get.environment snapshot.revert get.filelayout snapshot.setoption get.filelayoutex tools.cancelinstall get.guest tools.install get.guestheartbeatStatus tools.upgrade get.managedentitystatus unregister get.networks upgrade get.runtime
My “goto” for getting information is [Wayback] “vim-cmd vmsvc” site:vmware.com – Google Search, and a few sample pages are here:
- [Wayback] Performing common virtual machine-related tasks with command-line utilities (2012964) (showing that there are many tasks only
vim-cmd vmsvc
can do, butesxcli vm
cannot) - [Wayback] Powering on a virtual machine from the command line when the host cannot be managed using vSphere Client (1038043) (showing how to combine
vim-cmd vmsvc/getallvms
,vim-cmd vmsvc/power.getstate
andvim-cmd vmsvc/power.on
) - [Wayback] Determine the power status of a virtual machine on an ESX or ESXi host (1003737) (showing
vim-cmd vmsvc/getallvms
,vim-cmd vmsvc/power.getstate
andps –auxwww | grep –i VM_NAME
) - [Wayback] Collecting information about tasks in VMware ESXi/ESX (1013003) (showing the relation between VMs and tasks using
vim-cmd vimsvc/task_list
,vim-cmd vmsvc/getallvms
andvim-cmd vimsvc/task_info
) - [Wayback] Unable to Power off a Virtual Machine in an ESXi host (1014165) (focussing on
vim-cmd vmsvc/getallvms
,vim-cmd vmsvc/power.getstate
,vim-cmd vmsvc/power.shutdown
andvim-cmd vmsvc/power.off
) - [Wayback] Reloading a vmx file without removing the virtual machine from inventory (1026043) (showing
vim-cmd vmsvc/getallvms
andvim-cmd vmsvc/reload
) - [Wayback] Investigating virtual machine file locks on ESXi hosts (10051) (trying to show how to combine
vim-cmd vmsvc/getallvms
,grep
,awk
,find
andxargs
to findvmdk
files, but fails because of parsing errors)
The pattern above is that most of the vim-cmd vmsvc
examples are for power state and tasks. Not fully sure why, but my guess is it is what most people use it for. That kind of use what this series of posts also focuses on too, but certainly not the only use. Read the first numbered entry above to get a full grasp of what is possible. I hope to find time in the future to show some more examples outside the power and task realms.
Basically the only time you need to check out esxcli
with VMs is when you cannot shut down a VM in a normal way. These links explain what to do in that case:
- [Wayback] Powering off an unresponsive virtual machine on an ESXi host (1004340)
- [Wayback] Unable to Power off a Virtual Machine in an ESXi host (1014165)
So let’s go back to basics, and start with getting info on all vim-cmd vmsvc
commands.
Help on all vim-cmd vmsvc
commands
Executing vim-cmd help vmsvc
(preferred) or vim-cmd help vmsvc --help
gives you all commands prepended with the line Commands available under vmsvc/:
.
Executing vim-cmd help vmsvc/command
prints the help for a single command (but vim-cmd help vmsvc/command -help
first prints an error, then the help).
Here are the steps how I got the help help for all commands.
First I needed a list of all commands. This is already a multi-stage process, so below the full command I will explain the bits.
vim-cmd help vmsvc | sed '1d' | xargs -n 1 -r echo | sort
vim-cmd help vmsvc
gives all the commands (two per line!) prepended by the lineCommands available under vmsvc/:
.sed '1d'
stripts that line.xargs -n 1 -r echo
does a lot of things:- It parses the
sed '1d'
input line by line, splits each line into parts, combines all the parts, then executesecho
with the combined parts - The
-n 1
ensures each invocation ofecho
takes only a single one of the combined parts -r
is just a protection: if there is no input, thenecho
is never executed, resulting in empty output
- It parses the
sort
will sort all the combined output of all theecho
invocations to undo the horizontal combination of parts thatxargs
did
Now getting the help is doing more of the above, with some more bits to explain:
vim-cmd help vmsvc | sed '1d' | xargs -n 1 -r echo | sort | xargs -n 1 -r -I {} vim-cmd help vmsvc/{}
- Normally,
xargs
will execute each command by appending the parameter inserting a space in front of each parameter -I {}
will forcexargs
to put each argument just as is in the place where{}
is used in the argument- This executes
vim-cmd help vmsvc/command
in stead ofvim-cmd help vmsvc/ command
The result is a long blob of text that is very hard to read as there are no separators between the commands. I saved it as a [Wayback] vim-cmd help for each vmsvc command.txt gist.
With a sh -c
shell trick, you can add some more information and separation to the output by embedding :
vim-cmd help vmsvc | sed '1d' | xargs -n 1 -r echo | sort | xargs -n 1 -r -I {} sh -c 'echo "-----" ; echo "help for vim-cmd help vmsvc/{}" ; echo ; vim-cmd help vmsvc/{}'
I have added the output to the [Wayback] delimited vim-cmd help for each vmsvc command.txt gist.
Commands taking a vmid
parameter
Now that we know how to output all help, we can filter on it.
An interesting one is to filder only commands taking a vmid
parameter:
vim-cmd help vmsvc | sed '1d' | xargs -n 1 -r echo | sort | xargs -n 1 -r -I {} vim-cmd help vmsvc/{} | grep -iw vmid
On VMware ESXi 6.7, this gets you the list:
Usage: acquiremksticket vmid Usage: acquireticket vmid ticketType Usage: destroy vmid Usage: device.connection vmid deviceKey connect Usage: device.connusbdev vmid usbid Usage: device.ctlradd vmid ctlr_type bus_number Usage: device.ctlrremove vmid ctlr_type bus_number Usage: device.disconnusbdev vmid usbid Usage: device.diskadd vmid size controller_numer unit_number datastore [ctlr_type] Usage: device.diskaddexisting vmid disk_file controller_number unit_number [ctlr_type] Usage: device.diskextend vmid new_size controller_numer unit_number [ctlr_type] Usage: device.diskremove vmid controller_number unit_number delete_file [controller_type] Usage: device.getdevices vmid Usage: device.nvdimmadd vmid size Usage: device.nvdimmremove vmid deviceKey Usage: device.toolsSyncSet vmid new state Usage: devices.createnic vmid adapter-type network-id [network-type] Usage: get.capability vmid Usage: get.config vmid Usage: get.config.cpuidmask vmid Usage: get.configoption vmid Usage: get.datastores vmid Usage: get.disabledmethods vmid Usage: get.environment vmid Usage: get.filelayout vmid Usage: get.filelayoutex vmid Usage: get.guest vmid Usage: get.guestheartbeatStatus vmid Usage: get.managedentitystatus vmid Usage: get.networks vmid Usage: get.runtime vmid Usage: get.snapshotinfo vmid Usage: get.spaceNeededForConsolidation vmid Usage: get.summary vmid Usage: get.tasklist vmid Usage: message vmid [messageId] [messageChoice] Usage: power.getstate vmid Usage: power.hibernate vmid Usage: power.off vmid Usage: power.on vmid Usage: power.reboot vmid Usage: power.reset vmid Usage: power.shutdown vmid Usage: power.suspend vmid Usage: power.suspendResume vmid Usage: queryftcompat vmid [faultToleranceType] Usage: reload vmid Usage: setscreenres vmid width height Usage: snapshot.create vmid [snapshotName] [snapshotDescription] [includeMemory] [quiesced] Usage: snapshot.get vmid Usage: snapshot.remove vmid snapshotId [removeChildren] Usage: snapshot.removeall vmid Usage: snapshot.revert vmid snapshotId suppressPowerOn Usage: snapshot.setoption [OPTIONS] vmid Usage: tools.cancelinstall vmid Usage: tools.install vmid Usage: tools.upgrade vmid [args] Usage: unregister vmid Usage: upgrade vmid [vm_hwversion]
In the above list, the bold
entries have to do with power, that is what this series is supposed to center around, so more on that tomorrow.
–jeroen
Leave a Reply