VMWare – Snapshots – Parte 2


Hola Blogueros!! Tras la resaca del partido que nos ha concedido la tercera final en 4 años – Enhorabuena España! – continuamos con la segunda parte sobre los snapshots. En nuestra primera parte explicábamos que eran, para que servían y todo lo que podíamos hacer con ellos. Ahora explicaremos como controlar nuestra infraestructura con ayuda de scripts en PowerCLI.

Cuando manejas una infraestructura con varios virtual center, en el que el número de máquinas virtuales excede de lo considerado “normal”, llega un momento en el que no hay manera de controlar todas las peticiones recibidas sobre snapshots o fotos de nuestras máquinas virtuales. Primero porque el cliente no está preparado para ofrecernos información útil sobre la cantidad de snapshots que tenemos, que tamaño tienen o cuando fueron creados. Segundo porque aunque podrían proporcionarnos esa información, ésta se proporciona de manera individual, por lo que imaginaros en un entornos con miles de máquinas virtuales lo difícil que sería ir una a una sacando esa información.

Y es que tener controlados los snapshots es realmente importante, primero por el tamaño que ocupan y segundo porque si el cliente pide hacer un revert de un snapshot creado hace tiempo, este puede dejar inconsistente el estado de la máquina virtual.

Por ello hoy compartimos con vosotros como crearos vuestro propio reporte, en el que lanzado de vez en cuando obtendréis la información necesaria para controlarlos sin ningún tipo de problemas.

Antes de compartir con vosotros el script utilizado comentar, como siempre, que el script se puede hacer mucho más complejo y corto, pero nuestra intención es, a la vez de enseñaros como programar en powerCLI, que tengáis claros los conceptos. Basicamente vamos a recorrernos cada host ESXi en busca de máquinas virtuales para, una a una, ver si tiene snapshots y, si los tiene, sacar la información que nos interesa. Comenzamos:

Configuramos los ficheros que nos van a servir para escribir la info y la salida en formato txt del log respectivamente:
$outputfile = “e:\public\vSnapshot.csv”
$logfile = “e:\public\vSnapshot.log”

Escribimos las credenciales del usuario (con permisos de al menos lectura) que se va a encargar de ejecutar el script:
$user = “deCabo\Javier”
$pw = “@|#€#¬erfsd”

Borramos los ficheros que pudieran existir de ejecuciones anteriores:
remove-item E:\public\vSnapshot.csv

Inicializamos el array que lleva el nombre de nuestros virtual centers:
$viservers=@();
$viservers = (
“deCabo2.com”,
“deCao3.com”
)

Escribimos la primera linea del log de salida:
Out-File -FilePath $logfile -InputObject ((get-date -Format “yyyy-MM-dd hh:mm:ss”) + ” ” + “Starting operation”) -Append

Creamos la cabecera de nuestro archivo en csv, este será el formato que usemos para luego exportarlo a Excel:
“vCenter;Cluster;Host;Snapshot_Name;Snapshot_Size;Snapshot_Vm;Snapshot_Created” | Out-File -FilePath $outputfile

Por cada Virtual Center dentro del array realizamos las siguientes operaciones:
foreach ($viserver in $viservers){
$bubu=Connect-Viserver -Server $viserver -User $user -Password $pw
Out-File -FilePath $logfile -InputObject ((get-date -Format “yyyy-MM-dd hh:mm:ss”) + ” ” + “Reading ” + $viserver) -Append

Sacamos el nombre de cada cluster dentro de ese virtual center:
$cl = Get-Cluster -server $viserver | Sort-Object -property Name | Select Name
foreach ($element in $cl)
{

Sacamos el nombre de cada host ESXi dentro de ese cluster:
$Ho = Get-VMHost -Location $element.Name | Sort-Object -property Name | Select Name
foreach ($element2 in $Ho)
{
if ($element2.Name -ne $Null){

Sacamos el nombre de cada máquina virtual dentro de cada host ESXi:
$Vm = Get-VM -Location $element2.Name| Sort-Object -property Name | Select-Object Name
foreach ($element3 in $Vm)
{
if ($element3.Name -ne $Null){

Por cada máquina sacamos si tiene snapshots:
$snapshots = Get-Snapshot -VM $element3.Name -WarningAction SilentlyContinue
if ($snapshots -ne $null)
{
ForEach ($snapshot in $snapshots)
{
if( $snapshot -ne $null)
{
$SizeGB = [Math]::Round($snapshot.SizeMB / 1024)
$out=$viserver + “;” + $element.Name + “;” + $element2.Name + “;” + $snapshot.Name + “;” + $SizeGB + “;” + $element3.Name + “;” + $snapshot.Created

$out | Out-File -FilePath $outputfile -Append
}
}
}
}

Else{
$out=$viserver + “;” + $element.Name + “;” + $element2.Name + “;” + “HOST With no VMs”
$out | Out-File -FilePath $outputfile -Append
}
}#Foreach $element3
} #If $element2

Else{
$out=$viserver + “;” + $element.Name + “;” + “Cluster with no ESX Host”
$out | Out-File -FilePath $outputfile -Append
}
}#Foreach HO

} #Foreach CL

Desconectamos:
Disconnect-Viserver -Server $viserver -Confirm:$false

Out-File -FilePath $logfile -InputObject ((get-date -Format “yyyy-MM-dd hh:mm:ss”) + ” ” + “Finished ” + $viserver) -Append
}

Out-File -FilePath $logfile -InputObject ((get-date -Format “yyyy-MM-dd hh:mm:ss”) + ” ” + “Finished operation”) -Append

Espero que os sirva. Hasta la semana que viene!!

Artículos relacionados

Acerca del autor

Deja tu comentario

Mostrar
Ocultar