Reporte de Capacidad de Datastores con PowerCLI

Bueno, en este post voy a hablar acerca de como obtener un reporte de capacidad de Datastores de nuestra infraestructura. A quién no le ha pasado, que por culpa de un mal dimensionamiento de un Datastore, se le ha parado una aplicación y ha tenido que ampliar urgentemente. Con un buen dimensionamiento, podremos evitarnos sustos innecesarios, como por ejemplo con la creación de grandes ficheros de snapshots en datastores sobredimensionados.

Pues bien, vamos a ver, como obtener un reporte de todos los Datastores de nuestro Virtual Center y el resultado será una tabla con el nombre del datastore, la capacidad, el espacio libre y el provisionado. También aplicaremos una columna para saber si está bien dimensionado y obtendremos también la capacidad correcta para nuestros datastores, según el espacio provisionado y le añadiremos el 20% para tener espacio para snapshots.

Pues bien, aqui os dejo el script:

#############################################################################
##### Reporte de capacidad de Datastores de vCenter para Just2Kloud #########
#############################################################################
## V. 1.0 Mario Gómez ###
## -----------------------------------------------------------------------###
## Syntaxis: sizing_datastores.ps1 -VCENTER vCenterName                   ###
## -----------------------------------------------------------------------###
#############################################################################

param(
[Parameter(Mandatory=$True)]
[string]$VCENTER
)

 

# Solicitamos las credenciales para poder acceder a vCenter

Write-Host "Introducir en la ventana emergente que saldrá las credenciales para conectar a vCenter [$VCENTER]" -ForegroundColor Yellow

sleep 3

$credentials = Get-Credential

# Conectamos al vCenter pasado como parámetro

Connect-VIServer -Server $VCENTER -Credential $credentials | Out-Null

# Obtenemos un listado de los Datastores de nuestro vCenter

$ds_list = Get-Datastore

# Inicializamos la Tabla
$Object_list = @()

foreach ($ds in $ds_list)
{

# Obtenemos la capacidad de cada Datastore y lo limitamos a 2 decimales (en GB)
$ds_capacitygb = $ds.CapacityGB
$ds_capacitygb = [math]::round($ds_capacitygb,2)

# Obtenemos el espacio que queda libre en nuestro datastores, limitando a 2 decimales
$ds_free = $ds.FreeSpaceGB
$ds_free = [math]::round($ds_free,2)

# Obtenemos el espacio provisionado, limitando a 2 decimales.
$ds_provisionedgb = ($ds.ExtensionData.Summary.Capacity - $ds.ExtensionData.Summary.FreeSpace + $ds.ExtensionData.Uncommitted)/1GB
$ds_provisionedgb = [math]::round($ds_provisionedgb,2)

# Si el espacio provisionado está por debajo de la capacidad, obtendremos un OK y
# aún así calcularemos el espacio
if ($ds_provisionedgb -le $ds_capacitygb)
{
$ds_calculate_capacity = $ds_provisionedgb + ($ds_provisionedgb*0.2)
$ds_calculate_capacity = [math]::Round($ds_calculate_capacity,2)

# Aunque el provisionado esté por debajo de la capacidad, comprobaremos que
# el datastore esté correctamente dimensionado con el 20% para Snapshots.
if ($ds_calculate_capacity -ge $ds_capacitygb)
{
$ds_size_right = "[WARN: [++$ds_calculate_capacity++]]"
}
else
{
$ds_size_right = "[OK: [$ds_calculate_capacity]]"
}
}
# Si el espacio provisionado es mayor que la capacidad directamente mostraremos un
# error y indicaremos el dimensionamiento correcto.
else
{
$ds_calculate_capacity = $ds_provisionedgb + ($ds_provisionedgb*0.2)
$ds_calculate_capacity = [math]::Round($ds_calculate_capacity,2)
$ds_size_right = "[ERR: [** $ds_calculate_capacity **]]"
}
# Rellenamos la linea de la tabla para cada iteración por Datastore
$hash= @{
Name = $ds.Name
CapacityGB = $ds_capacitygb
FreeSpaceGB = $ds_free
ProvisionedGB = $ds_provisionedgb
CapacityRight = $ds_size_right
}
$obj= New-Object PSObject -Property $hash
# Rellenamos la tabla con cada línea
$Object_list += $obj
}

Y ya si queremos ser perfeccionistas, podemos exportar la tabla a un fichero Excel. Lo haremos de la siguiente manera:

# Exportamos la tabla a un fichero Excel, y en la tabla, el campo CapacityRight los marcará
# en Verde (Dimensionamiento OK), Amarillo (Dimensionamiento Warning), Rojo (Dimensionamiento # KO)
$Object_list | Select Name, CapacityGB, FreeSpaceGB, ProvisionedGB, CapacityRight | Export-Excel -Path Z:\Just2Kloud\Sizing_Datastores.xlsx -AutoSize -BoldTopRow -ConditionalText $(
New-ConditionalText [OK:* -BackgroundColor LightGreen -ConditionalTextColor DarkGreen
New-ConditionalText [NO:* -BackgroundColor LightRed -ConditionalTextColor DarkRed
New-ConditionalText [WARN:* -BackgroundColor LightYellow -ConditionalTextColor DarkYellow
) -TableStyle Light19 -WorksheetName $VCENTER -Append

En próximos post, publicaré como obtener un reporte del cómputo de nuestra infraestructura virtual.

Espero que os haya gustado!

Comparte si te gusta 🙂

x

One comment

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.