Detectar VMs no respaldadas por Veeam con PowerCLI (Parte 1)

Si hay algo que absolutamente siempre debemos tener controlado al dedillo en nuestra infraestructura es el backup, puesto que es ese salvavidas del que siempre vamos a poder tirar en caso de desastre. Una problemática habitual cuando los entornos vSphere empiezan a crecer y cuando muchas manos tocan un mismo entorno es la posibilidad de quedarnos con VMs fuera de backup y, lo más peligroso, sin que nadie se de cuenta de ello. Es por ello que en la entrada de hoy veremos cómo detectar VMs no respaldadas por Veeam Backup de forma automatizada mediante, como no, PowerCLI.

Dejando huella en las VMs respaldadas con Veeam

El primer paso antes de ponernos a picar código de PowerCLI será pasarnos por nuestro (o nuestros) servidor de Veeam para reconfigurar los jobs de backup y hacer que éstos dejen huella en las máquinas virtuales que respalde. La “huella” que dejará en nuestras máquinas virtuales respaldadas será un Custom Attribute de VMware que utilizaremos posteriormente para hacer querys desde PowerCLI.

Editar job de Veeam

Posteriormente nos dirigimos al apartado Storage y pulsamos sobre el botón Advanced.

Veeam editar storage

Una vez aquí debemos desplazarnos a la pestaña Notifications. En la parte inferior encontraremos el campo “Set succesful backup details to this VM attribute”. Deberemos habilitar esta opción y añadir un nombre en el campo de texto correspondiente, que será el nombre del Custom Attribute que se añadirá a la VM.

Custom Attribute Veeam

La forma en que funciona este parámetro es que cuando un backup ha finalizado de forma exitosa sobre una máquina virtual Veeam añade a la misma un nuevo Custom Attribute (si no lo hubiera) y le añade la fecha de dicho backup. Si miramos los Custom Attribute de una VM con backup correcto deberíamos ver algo parecido a esto:

Custom Attribute VM Veeam

Buscando el Custom Attribute con PowerCLI

Vale, ya tenemos funcionando la base sobre la que nuestro script buscará VMs no respaldadas por Veeam, ahora tenemos que construir la query que necesitamos para encontrar dichas VMs.

Para ello vamos a empezar obteniendo todas las VMs que queremos revisar y vamos a ponerlas en una variable para gestionarlas de forma más fácil en el futuro:

$Vms = Get-VM | Where-Object PowerState -eq 'PoweredOn'

En este caso unicamente saco las VMs encendidas, pero podemos hacer la query por un determinado cluster, host o lo que necesitemos.

Ahora que ya tenemos las VMs a escanear en nuestra variable pasaremos a recorrerlas todas en busca de las que no tengan nuestro Custom Attribute lleno. Aquí va el código que os propongo con sus respectivos comentarios:

# Declaramos un array vacío donde almacenar los nombres de las VMs fuera de backup
$VmsSinBackup = @()

# Recorremos la colección de VMs
ForEach ($Vm in $Vms) {
    # Si la VM tiene el Custom Attribute "Sobrebits" sin contenido...
    If (!$Vm.CustomFields.Item("Sobrebits")) {
        # ... añadimos dicha VM a nuestra array de VMs no respaldadas por Veeam
        $VmsSinBackup += $Vm.Name
    }
}

Con esto ya tenemos una variable $VmsSinBackup con todas las VMs no respaldadas en nuestra infraestructura.

Conclusión

Hasta aquí la primera parte de esta entrada. En la segunda parte aplicaremos un poco más de inteligencia a nuestro script añadiendo la posibilidad de añadir excepciones y notificaciones por correo. ¡Muy pronto en Sobrebits!

Deja un comentario