VMware ESXi: comandos para o admintrator de VMs vía CLI

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:

ESXiCLI01

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

 

BY http://www.blog.davidsole.es/vmware-esxi-comandos-para-la-administracion-de-vms-via-cli/