Características avanzadas de la powerCLI
Desde que VMware decidiera centrar sus esfuerzos en ESXi e ir abandonando paulatinamente ESX el desarrollo de herramientas para la administración remota ha sido potenciada sobre todo para sustituir aquellas funcionalidades que teníamos en nuestra querida Service Console.
Una de esas herramientas de administración remota es la powerCLI, con la que podemos realizar y automatizar multitud de tareas sobre nuestra infraestructura virtual. El problema era que en ocasiones estos cmdlets no tenían toda la funcionalidad que necesitábamos. Y digo era, porque eso ha cambiado en la versión 4.1 de la powerCLI.
Antes de esta versión, si queríamos acceder a la SDK del host ESX(i) y vCenter teníamos que hacerlo mediante el uso de Get-View, que si bien no es que fuese un trauma, sí que añadía un poco de complejidad a nuestros scripts.
En la última versión de la powerCLI se ha añadido una nueva propiedad, ExtensionData, que nos da acceso directo a la SDK subyacente sin necesidad de hacer uso de Get-View. La principal ventaja de hacer uso de la SDK, a pesar de que pueda duplicar cierta información, era que la velocidad de acceso a los objetos es infinitamente mayor que haciendo uso de los cmdlets “tradicionales”. Y de nuevo digo era porque también esto es algo que ha cambiado en la powerCLI 4.1, ya que ahora se hace uso de la propiedad ExtensionData para acelerar la ejecución de cmdlets tan comunes como Get-VM, que devuelve las propiedades de una máquina virtual.
Por ilustrar un poco el uso de esta nueva propiedad supongamos que necesitamos obtener la versión de las vmware tools instaladas en todas nuestras máquinas virtuales. El script para versiones antiguas sería algo como esto:
get-vm | select name,@{N=’version’;e={(get-view $_.Id).guest.toolsversion}}
mientras que para la versión 4.1 tendremos:
get-vm | select name,@{n=’version’;e={ $_.extensiondata.guest.toolsversion }}
La principal ventaja es la claridad en la lectura del código y la velocidad de ejecución, ya que nos ahorramos ejecutar un cmdlet adicional, Get-View.
Pero si hay algo realmente interesante en esta última versión de la powerCLI es la posibilidad de añadir (y quitar) propiedades a los objetos de la powerCLI mediante los cmdlets New-VIProperty y Remove-VIProperty. Como muestra os pongo un ejemplo sacado directamente de la referencia de la PowerCLI que nos permite añadir una propiedad llamada CommittedSpaceMB que se encarga de almacenar el espacio provisionado en MB para una máquina virtual:
New-VIProperty -ObjectType VirtualMachine -Name CommittedSpaceMB -Value { param($vm) $sum = 0; $vm.ExtensionData.Storage.PerDatastoreUsage | foreach { $sum += $_.Committed} ; $sum = [int]($sum / 1024 / 1024); return $sum } -BasedOnExtensionProperty ‘Storage.PerDatastoreUsage.Committed’ -Force
Get-VM | select Name,CommittedSpaceMB
Como veis se abre un universo de posibilidades para la automatización y obtención de información de nuestro entorno virtual. Os animo a investigar y experimentar con estas nuevas funcionalidades, y por supuesto en todo lo que os pueda ayudar no dudéis en compartir vuestras inquietudes con nosotros.
A continuación os pongo algunas referencias interesantes:
- Referencia oficial New-VIProperty
- PowerCLI 4.1 brings the New-VIProperty cmdlet del blog de LucD
- Why New-VIProperty Matters! de Arnim Van Lieshout