vim-cmd suspending/resuming a bunch of VMs
Posted by jpluimers on 2016/09/13
These two vim-cmd scripts come in very handy:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/sh | |
| VMS=`vim-cmd vmsvc/getallvms | grep -v Vmid | awk '{print $1}'` | |
| for VM in $VMS ; do | |
| # echo "Probing VM with id: $VM." | |
| PWR=`vim-cmd vmsvc/power.getstate $VM | grep -v "Retrieved runtime info"` | |
| name=`vim-cmd vmsvc/get.config $VM | grep -i "name =" | awk '{print $3}' | head -1 | awk -F'"' '{print $2}'` | |
| echo "VM with id $VM has power state $PWR (name = $name)." | |
| done |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/sh | |
| # https://wiert.me/2021/04/30/vmware-esxi-console-viewing-all-vms-suspending-and-waking-them-up-part-5/ | |
| RUNNING=0 | |
| vmids=`vim-cmd vmsvc/getallvms | sed -n -E -e "s/^([[:digit:]]+)\s+((\S.+\S)?)\s+(\[\S+\])\s+(.+\.vmx)\s+(\S+)\s+(vmx-[[:digit:]]+)\s*?((\S.+)?)$/\1/p"` | |
| for vmid in ${vmids} ; do | |
| # echo "Probing VM with id: $vmid." | |
| powerState=`vim-cmd vmsvc/power.getstate ${vmid} | sed '1d'` | |
| name=`vim-cmd vmsvc/get.config ${vmid} | sed -n -E -e '/\(vim.vm.ConfigInfo\) \{/,/files = \(vim.vm.FileInfo\) \{/ s/^ +name = "(.*)",.*?/\1/p'` | |
| vmPathName=`vim-cmd vmsvc/get.config ${vmid} | sed -n -E -e '/files = \(vim.vm.FileInfo\) \{/,/tools = \(vim.vm.ToolsConfigInfo\) \{/ s/^ +vmPathName = "(.*)",.*?/\1/p'` | |
| # echo "VM with id ${vmid} has power state ${powerState} (name = ${name}; vmPathName = ${vmPathName})." | |
| if [ "${powerState}" == "Powered on" ] ; then | |
| RUNNING=1 | |
| echo "Powered on VM with id ${vmid} and name: $name" | |
| echo "Suspending VM with id ${vmid} and name: $name" | |
| vim-cmd vmsvc/power.suspend ${vmid} > /dev/null & | |
| fi | |
| done | |
| while true ; do | |
| if [ $RUNNING -eq 0 ] ; then | |
| echo "Gone…" | |
| break | |
| fi | |
| RUNNING=0 | |
| for vmid in ${vmids} ; do | |
| # echo "Probing VM with id: $vmid." | |
| powerState=`vim-cmd vmsvc/power.getstate ${vmid} | sed '1d'` | |
| name=`vim-cmd vmsvc/get.config ${vmid} | sed -n -E -e '/\(vim.vm.ConfigInfo\) \{/,/files = \(vim.vm.FileInfo\) \{/ s/^ +name = "(.*)",.*?/\1/p'` | |
| vmPathName=`vim-cmd vmsvc/get.config ${vmid} | sed -n -E -e '/files = \(vim.vm.FileInfo\) \{/,/tools = \(vim.vm.ToolsConfigInfo\) \{/ s/^ +vmPathName = "(.*)",.*?/\1/p'` | |
| # echo "VM with id ${vmid} has power state ${powerState} (name = ${name}; vmPathName = ${vmPathName})." | |
| if [ "${powerState}" == "Powered on" ] ; then | |
| RUNNING=1 | |
| echo "Waiting for id ${vmid} and name: $name…" | |
| fi | |
| done | |
| sleep 1 | |
| done | |
| exit 0 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/sh | |
| SUSPENDED=0 | |
| VMS=`vim-cmd vmsvc/getallvms | grep -v Vmid | awk '{print $1}'` | |
| VMstateToProcess="Suspended" | |
| for VM in $VMS ; do | |
| # echo "Probing VM with id: $VM." | |
| PWR=`vim-cmd vmsvc/power.getstate $VM | grep -v "Retrieved runtime info"` | |
| name=`vim-cmd vmsvc/get.config $VM | grep -i "name =" | awk '{print $3}' | head -1 | awk -F'"' '{print $2}'` | |
| echo "VM with id $VM has power state $PWR (name = $name)." | |
| if [ "$PWR" == "$VMstateToProcess" ] ; then | |
| SUSPENDED=1 | |
| echo "Suspended VM with id $VM and name: $name" | |
| echo "Resuming VM with id $VM and name: $name" | |
| # you'd think power.suspendResume is the inverse of power.suspend, but actually power.on is: | |
| vim-cmd vmsvc/power.on $VM > /dev/null & | |
| fi | |
| done | |
| while true ; do | |
| if [ $SUSPENDED -eq 0 ] ; then | |
| echo "Gone…" | |
| break | |
| fi | |
| SUSPENDED=0 | |
| for VM in $VMS ; do | |
| PWR=`vim-cmd vmsvc/power.getstate $VM | grep -v "Retrieved runtime info"` | |
| if [ "$PWR" == "$VMstateToProcess" ] ; then | |
| name=`vim-cmd vmsvc/get.config $VM | grep -i "name =" | awk '{print $3}' | head -1 | awk -F'"' '{print $2}'` | |
| echo "Waiting for id $VM and name: $name…" | |
| SUSPENDED=1 | |
| fi | |
| done | |
| sleep 1 | |
| done |
–jeroen






Leave a comment