Obtener con PowerCLI un reporte sobre capacidad de Datastores

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 CloudVM #########
#############################################################################
## 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:\CloudVM\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 y muchas gracias por compartir 😉

x

1 comment

Leave a Reply

Your email address will not be published. Required fields are marked *