En ocasiones viene bien poder hacer algunas consultas u operaciones usando comandos para la administración de VMs vía CLI ya sea por motivos de acceso a vSphere Client (no tenemos el cliente, por ejemplo, o los management agents no están funcionando) o bien porque necesitamos anidar resultados o scriptar operaciones. En este post veremos algunos comandos para la administración de VMs vía CLI con ejemplos sencillos que pueden combinarse para obtener la información que deseemos accediendo por SSH a un Host ESXi (recordemos que el servicio SSH debe estar activo).
El comando «raíz», por decirlo de alguna forma, sería vim-cmd vmsvc/ y la lista de opciones para vmsvc/ es la siguiente:
Con esta lista podemos construir todos los comandos para generar nuestras consultas/operaciones/scripts. Veamos algunos de ellos:
NOTA: muchas de las operaciones descritas a continuación requieren que la máquina virtual tenga instaladas las VMware Tools. En general, como Best Practice, siempre las deberemos tener instaladas.
Registrar una VM: vim-cmd solo/registervm /vmfs/volumes/»Datastore»/»carpeta»/»VM».vmx
Des-registrar una VM: vim-cmd vmsvc/unregister /vmfs/volumes/»Datastore»/»carpeta»/»VM».vmx
Listar las VMs del inventario del Host ESXi: vim-cmd vmsvc/getallvms –> Este comando lista las VMs con su VMid, un entero que identifica de forma única cada una de ellas. El VMid es fundamental para ejecutar los comandos sobre la VM que identifica.
Si conocemos el nombre de inventario de la VM podemos usar el comando vim-cmd vmsvc/getallvms |grep «nombre VM» para obtener su VMid.
Conocer el Power State de una VM: vim-cmd vmsvc/power.getstate «VMid»
Tiempo que lleva una VM encendida en segundos (Uptime): vim-cmd vmsvc/get.summary «VMid» |grep uptimeSeconds
–> Lista de propiedades del Data Object – VirtualMachineConfigSummary
Arrancar una VM: vim-cmd vmsvc/power.on «VMid»
Apagar de forma ordenada una VM: vim-cmd vmsvc/power.shutdown «VMid»
Apagar una VM de forma inmediata («botonazo»): vim-cmd vmsvc/power.off «VMid»
Reiniciar una VM: vim-cmd vmsvc/power.reboot «VMid»
Hacer un reset de una VM: vim-cmd vmsvc/power.reset «VMid»
Instalar las VMware Tools: vim-cmd vmsvc/tools.install «VMid»
Actualizar las VMware Tools: vim-cmd vmsvc/tools.upgrade «VMid»
Mostrar la IP de una VM: vim-cmd vmsvc/get.guest «VMid» |grep -m 1 «ipAddress = \»»
Mostrar la VLAN o VM Network de una VM: vim-cmd vmsvc/get.guest «VMid» |grep -m 1 «network = \»»
Mostrar el nombre DNS de una VM: vim-cmd vmsvc/get.guest «VMid» |grep -m 1 «hostName = \»»
–> Lista de propiedades del Data Object – GuestInfo
Determinar si una VM tiene algún Snapshot: vim-cmd vmsvc/get.snapshot «VMid»
Crear un Snapshot: vim-cmd vmsvc/snapshot.create «VMid» snapshot_nombre
Borrar un Snapshot: vim-cmd vmsvc/snapshot.remove «VMid» «SNAPid» –> En este comando necesitamos saber el identificador del Snapshot. Lo obtendremos con el comando vim-cmd vmsvc/get.snapshot «VMid» | grep -m 1 «id =«
–> Lista de propiedades del Data Object – VirtualMachineSnapshotInfo
Esto es sólo una lista de los principales comandos que en general nos pueden ayudar a automatizar tareas «cotidianas» como por ejemplo listar aquellas VMs apagadas, encendidas, … listar información sobre el Sistema Operativo Guest, listar información de red, etc. Podemos obtener mucha más información el respecto consultando la VMware API and SDK Documentation.
En la automatización de las tareas antes mencionadas podemos apoyarnos en instrucciones de iteración básicas como for o condicionales como if (en algunos casos puede que nos interese combinar iteración con condición para la obtención de algunos resultados). Dado que el denominador común para toda consulta en una VM es su VMid podemos usar las instrucciones siguientes para su obtención:
a) vim-cmd vmsvc/getallvms | tail -n +2 | cut -c 1-3
b) vim-cmd vmsvc/getallvm | awk -F’ ‘ ‘/[0-9]/{print $1}’
En ambos casos se obtienen los VMids de todas las VMs por lo que podemos iterar de la siguiente forma:
for i in $(vim-cmd vmsvc/getallvm | awk -F’ ‘ ‘/[0-9]/{print $1}’); do «Instrucción 1 sobre $i»; «Instrucción 2 sobre $i»; «Instrucción N sobre $i»; done
Veamos algunos ejemplos:
Listar VMs que contienen Snapshots: for i in $(vim-cmd vmsvc/getallvm | awk -F’ ‘ ‘/[0-9]/{print $1}’); do vim-cmd vmsvc/get.summary $i | grep name; vim-cmd vmsvc/get.snapshot $i; done
Listar el Power State de todas las VMs: for i in $(vim-cmd vmsvc/getallvm | awk -F’ ‘ ‘/[0-9]/{print $1}’); do vim-cmd vmsvc/get.summary $i | grep name; vim-cmd vmsvc/power.getstate $i; done
Apagar todas las VMs: for i in $(vim-cmd vmsvc/getallvm | awk -F’ ‘ ‘/[0-9]/{print $1}’); do vim-cmd vmsvc/get.summary $i | grep name; vim-cmd vmsvc/power.shutdown $i; done
Arrancar todas las VMs: for i in $(vim-cmd vmsvc/getallvm | awk -F’ ‘ ‘/[0-9]/{print $1}’); do vim-cmd vmsvc/get.summary $i | grep name; vim-cmd vmsvc/power.on $i; done
This Post by David Solé Pérez is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License