VMware

PowerShell – VMware PowerCLI obtener información sobre los Datastore

Hola a todos,

En este post le mostraré como obtener la lista de datastore en una infraestructura de vSphere utilizando PowerCLI. Ahora bien, primero que todo tenemos que establecer conexión a nuestro vCenter/ESXi para obtener esta información. Esto podemos hacerlo utilizando el comando «Connect-VIServer».

PS C:\Users\jocolon> Connect-VIServer -Server 192.168.5.2

Specify Credential
Please specify server credential
User: administrator@vsphere.local
Password for user administrator@vsphere.local: ********

Name                           Port  User
----                           ----  ----
192.168.5.2                    443   VSPHERE.LOCAL\Administrator


PS C:\Users\jocolon> 

Luego de establecida la conexión podemos utilizar el comando «Get-Datastore».

PS C:\Users\jocolon> Get-Datastore 


Name                               FreeSpaceGB      CapacityGB
----                               -----------      ----------
SSD-VM-HIGH-CAPACITY-PERF-KN           399.387         894.000
NVME-VFLASH-01                          50.054         238.250
SSD-VM-HIGH-CAPACITY-PERF-MK           505.415         931.250
NVME-VM-HIGH-PERF-01                   275.067         476.750
HDD-VM-MED-PERF-01                   2,165.800       3,726.000
HDD-VM-MED-PERF-02                   2,230.938       3,726.000
esx-00f                                110.801         111.750
SRM_LAB_STORAGE_01                      46.285          49.750
SRM_POL_DEDUP_01                        18.694          50.000
SRM_LAB_STORAGE_02                      47.909          50.000
SRM_PLACEHOLDER_01                      13.345          14.750
SRM_HQ_EDGE_01                          47.659          49.750
HDD-VM-ISO-LOW-PERF                    461.363         931.250


PS C:\Users\jocolon>

Este comando muestra los Datastore existentes y la información básica del espacio utilizado. Con este comando podemos también filtrar la búsqueda permitiendo obtener información adicional del Datastore si añadimos el nombre del Datastore al comando «Get-Datastore» con la opción de «-Name». Por ejemplo si utilizamos el comando «Get-Datastore -Name <Datastore Name> | Format-List » se muestra el siguiente resultado.

PS C:\Users\jocolon> Get-Datastore -Name NVME-VFLASH-01 | Format-List  



FileSystemVersion              : 6.82
DatacenterId                   : Datacenter-datacenter-21
Datacenter                     : PHARMAX-VSI-DC
ParentFolderId                 : StoragePod-group-p1396
ParentFolder                   :
DatastoreBrowserPath           : vmstores:\192.168.5.2@443\PHARMAX-VSI-DC\NVME-VFLASH-01
FreeSpaceMB                    : 51255
CapacityMB                     : 243968
Accessible                     : True
Type                           : VMFS
StorageIOControlEnabled        : True
CongestionThresholdMillisecond : 10
State                          : Available
ExtensionData                  : VMware.Vim.Datastore
CapacityGB                     : 238.25
FreeSpaceGB                    : 50.0537109375
Name                           : NVME-VFLASH-01
Id                             : Datastore-datastore-268983
Uid                            : /VIServer=vsphere.local\administrator@192.168.5.2:443/Datastore=Datastore-datastore-268983/



PS C:\Users\jocolon>

Como la mayoría de los comandos de Powershell, los comando de PowerCLi permiten la utilización de «Pipeline». Si utilizamos el comando «Get-VMHost» para desplegar los servidores de ESXi junto con el comando «Get-Datastore» podemos filtrar aún más el contenido de los Datastore conectados al servidor.

PS C:\Users\jocolon> Get-VMHost -Name esxsvr-00f.pharmax.local | Get-Datastore


Name                               FreeSpaceGB      CapacityGB
----                               -----------      ----------
esx-00f                                110.801         111.750
HDD-VM-ISO-LOW-PERF                    461.363         931.250
SSD-VM-HIGH-CAPACITY-PERF-MK           505.414         931.250
SSD-VM-HIGH-CAPACITY-PERF-KN           399.321         894.000
HDD-VM-MED-PERF-01                   2,165.800       3,726.000
HDD-VM-MED-PERF-02                   2,230.938       3,726.000
NVME-VM-HIGH-PERF-01                   275.065         476.750
NVME-VFLASH-01                          50.053         238.250


PS C:\Users\jocolon>

Para finalizar les comento que existe un sin fin de posibilidades en Powershell a la hora de entrelazar los cmdlets permitiendo afinar la búsqueda de datos y hasta transformar la información que deseamos desplegar. Espero les haya sido de utilidad esta información. Hasta luego!

HomeLab – Documentación de vSphere utilizando vDocumentation

En esta ocasión estaré mostrando una herramienta que utilizo regularmente para identificar de manera rápida la información de inventario en una infraestructura de vsphere. Esta herramienta se llama «vDocumentation» y precisamente utiliza PowerCLI para obtener la información de inventario. El creador de esta herramienta «Ariel Sánchez Mora» @arielsanchezmor define vDocumentation como:

vDocumentation provides a community-created set of PowerCLI scripts that produce infrastructure documentation of vSphere environments in CSV or Excel file format.

Ariel Sánchez Mora Github page

Ahora bien, para comenzar es necesario cumplir con los siguientes requisitos:

  • Plataforma Windows OS
  • PowerShell v5.1+ ó v7
  • El módulo de ImportExcel >= 7+
  • El módulo de VMware PowerCLI >= 12.3+

Para instalar esta herramienta solo necesitamos utilizar el comando «Install-Module» desde una consola de Powershell.

Install-Module -Name VMware.PowerCLI
Install-Module -Name ImportExcel
Install-Module -Name vDocumentation

Una vez instalado los módulos podemos verificar la instalación utilizando el comando «Get-Module».

PS C:\Users\Administrator> Get-Module -ListAvailable -Name @('VMware.PowerCLI','ImportExcel','vDocumentation')


ModuleType Version    PreRelease Name                                PSEdition ExportedCommands
---------- -------    ---------- ----                                --------- ----------------
Script     7.4.1                 ImportExcel                         Desk      {Add-Conditional...}
Script     2.4.7                 vDocumentation                      Desk      {Get-ESXStorage...}
Manifest   12.4.1.18…            VMware.PowerCLI                     Desk      

PS C:\Users\Administrator>

Luego de validar la instalación puedes utilizar el comando «Get-Command» para identificar los cmdlets que incluye esta herramienta a PowerShell.

PS C:\Users\Administrator> Get-Command -Module vDocumentation


CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Function        Get-ESXInventory                                   2.4.7      vDocumentation
Function        Get-ESXIODevice                                    2.4.7      vDocumentation
Function        Get-ESXNetworking                                  2.4.7      vDocumentation
Function        Get-ESXPatching                                    2.4.7      vDocumentation
Function        Get-ESXSpeculativeExecution                        2.4.7      vDocumentation
Function        Get-ESXStorage                                     2.4.7      vDocumentation
Function        Get-VMSpeculativeExecution                         2.4.7      vDocumentation
Function        Get-vSANInfo                                       2.4.7      vDocumentation

PS C:\Users\Administrator>

Antes de utilizar los módulos es necesario establecer la conexión inicial con el servidor de vCenter o el ESXi. Para lograr este objetivo utilizamos el comando «Connect-VIServer».

PS C:\Users\Administrator> Connect-VIServer -Server 192.168.5.2 -Username administrator@vsphere.local -Password XXXXXX


Name                           Port  User
----                           ----  ----
192.168.5.2                    443   VSPHERE.LOCAL\Administrator

PS C:\Users\Administrator>

Luego de establecida la conexión podemos utilizar los módulos. En este ejemplo utilizaré el comando «Get-ESXInventory» para obtener la informacion de inventario de los servidores ESXi conectados al vCenter con la dirección de IP «192.168.5.2»

PS C:\Users\Administrator> Get-ESXInventory
        Connected to 192.168.5.2
        Gathering host list...
        Gathering Hardware inventory from esxsvr-00f.pharmax.local ...
        Gathering configuration details from esxsvr-00f.pharmax.local ...
WARNING:  Check Connection State or Host name
WARNING:  Skipped hosts:


 ESXi Hardware Inventory:


Hostname           : esxsvr-00f.pharmax.local
Management IP      : {192.168.5.253, 10.0.0.74}
RAC IP             :
RAC MAC            :
RAC Firmware       :
Product            : VMware ESXi
Version            : 7.0.3 U3
Build              : 18825058
Make               : System manufacturer
Model              : System Product Name
S/N                : System Serial Number
BIOS               : 3802
BIOS Release Date  : 03/15/2018
CPU Model          : Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz
CPU Count          : 1
CPU Core Total     : 4
Speed (MHz)        : 3408
Memory (GB)        : 64
Memory Slots Count : -1
Memory Slots Used  : 0
Power Supplies     : 0
NIC Count          : 3




 ESXi Host Configuration:


Hostname                  : esxsvr-00f.pharmax.local
Make                      : System manufacturer
Model                     : System Product Name
CPU Model                 : Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz
Hyper-Threading           : True
Max EVC Mode              : intel-broadwell
Product                   : VMware ESXi
Version                   : 7.0.3 U3
Build                     : 18825058
Install Type              : Installable
Boot From                 : /vmfs/volumes/755b8362-294638aa-a59f-74ccb58569b3
Device Model              : ATA SAMSUNG MZHPV128
Boot Device               : Local ATA Disk (t10.ATA_____SAMSUNG_MZHPV128HDGM2D00000______________S1X3NYAH200184______)
Runtime Name              : vmhba3:C0:T0:L0
Device Path               : /vmfs/devices/disks/t10.ATA_____SAMSUNG_MZHPV128HDGM2D00000______________S1X3NYAH200184______
Image Profile             : (Updated) ESXi-7.0U3a-18825058-standard
Acceptance Level          : CommunitySupported
Boot Time                 : 12/16/2021 6:40:22 AM
Uptime                    : 0 Day(s), 16 Hour(s), 3 Minute(s)
Install Date              : 5/22/2020 9:36:56 AM
Last Patched              : 2021-10-29
License Version           : vSphere 7 Enterprise Plus with Add-on for Kubernetes
License Key               : 4Y28A-FV213-488Q8-202E6-1P024
Connection State          : Connected
Standalone                : False
Cluster                   : RegionHQ-MGMT
Virtual Datacenter        : PHARMAX-VSI-DC
vCenter                   : 192.168.5.2
NTP                       : NTP Daemon
NTP Running               : True
NTP Startup Policy        : on
NTP Client Enabled        : True
NTP Server                : 192.168.5.1,0.north-america.pool.ntp.org
SSH                       : SSH
SSH Running               : True
SSH Startup Policy        : on
SSH TimeOut               : 0
SSH Server Enabled        : True
ESXi Shell                : ESXi Shell
ESXi Shell Running        : False
ESXi Shell Startup Policy : off
ESXi Shell TimeOut        : 0
Syslog Server             : :
Syslog Client Enabled     : False



PS C:\Users\Administrator>

El próximo ejemplo que les mostraré es sobre el comando «Get-ESXStorage». Este comando permite obtener información sobre los dispositivos de almacenamiento conectados al servidor de ESXi.

PS C:\Users\Administrator> Get-ESXStorage
        Connected to 192.168.5.2
        Gathering host list...
        Gathering storage adapter details from esxsvr-00f.pharmax.local ...
        Gathering Datastore details from esxsvr-00f.pharmax.local ...
WARNING:  Check Connection State or Host name
WARNING:  Skipped hosts:

 ESXi Datastores:


Hostname               : esxsvr-00f.pharmax.local
Datastore Name         : esx-00f
Device Name            : Local ATA Disk
Canonical Name         : t10.ATA_____SAMSUNG_MZHPV128HDGM2D00000______________S1X3NYAH200184______
LUN                    : 0
Type                   : VMFS
Datastore Cluster      :
Capacity (GB)          : 111.75
Provisioned Space (GB) : 0.95
Free Space (GB)        : 110.80
Transport              : Block
Mount Point            : /vmfs/volumes/598a435f-a2e283e6-6159-9c5c8ed12a16/
Multipath Policy       :
File System Version    : 5.81

Hostname               : esxsvr-00f.pharmax.local
Datastore Name         : HDD-VM-ISO-LOW-PERF
Device Name            : Local ATA Disk
Canonical Name         : t10.ATA_____WDC_WD10EZEX2D00WN4A0_________________________WD2DWCC6Y2KP8070
LUN                    : 0
Type                   : VMFS
Datastore Cluster      :
Capacity (GB)          : 931.25
Provisioned Space (GB) : 469.89
Free Space (GB)        : 461.36
Transport              : Block
Mount Point            : /vmfs/volumes/598f33a5-24870100-5609-9c5c8ed12a16/
Multipath Policy       :
File System Version    : 6.81

PS C:\Users\Administrator>

El último comando que les mostraré es el «Get-ESXNetworking» utilizado para obtener la información de los puertos de red físicos y virtuales existentes en el servidor.

PS C:\Users\Administrator> Get-ESXNetworking
        Connected to 192.168.5.2
        Gathering host list...
        Gathering physical adapter details from esxsvr-00f.pharmax.local ...
        Gathering VMkernel adapter details from esxsvr-00f.pharmax.local ...
        Gathering virtual vSwitches details from esxsvr-00f.pharmax.local ...
WARNING:  Check Connection State or Host name
WARNING:  Skipped hosts:


 ESXi Physical Adapters:


Hostname           : esxsvr-00f.pharmax.local
Name               : vmnic1
Slot Description   : PCIEX16_3
Device             : Emulex Corporation HP NC552SFP Dual Port 10GbE Server Adapter
Duplex             : Full
Link               : Up
MAC                : 10:60:4b:93:20:68
MTU                : 9000
Speed              : 10000
vSwitch            : PHARMAX-DVS
vSwitch MTU        : 9000
Discovery Protocol : CDP
Device ID          : MikroTik
Device IP          : 0.0.0.0
Port               : bonding1/sfp-sfpplus1





 ESXi VMkernel Adapters:


Hostname         : esxsvr-00f.pharmax.local
Name             : vmk1
MAC              : 00:50:56:6e:c1:24
MTU              : 9000
IP               : 192.168.5.253
Subnet Mask      : 255.255.255.0
TCP/IP Stack     : defaultTcpipStack
Default Gateway  : 192.168.5.254
DNS              : 192.168.5.1,192.168.1.1
PortGroup Name   : DVS-ESXi-MANAGEMENT
VLAN ID          :
Enabled Services : Management
vSwitch          : PHARMAX-DVS
vSwitch MTU      : 9000
Active adapters  :
Standby adapters :
Unused adapters  :

Hostname         : esxsvr-00f.pharmax.local
Name             : vmk0
MAC              : 00:50:56:6f:e2:03
MTU              : 1500
IP               : 10.0.0.74
Subnet Mask      : 255.255.255.0
TCP/IP Stack     : defaultTcpipStack
Default Gateway  : 192.168.5.254
DNS              : 192.168.5.1,192.168.1.1
PortGroup Name   : Management Network
VLAN ID          : 0
Enabled Services : Management
vSwitch          : vSwitch0
vSwitch MTU      : 1500
Active adapters  : vmnic0
Standby adapters :
Unused adapters  :


 ESXi Virtual Switches:


Hostname                                        : esxsvr-00f.pharmax.local
Type                                            : Standard
Version                                         :
Name                                            : Pharmax-VL
Uplink/ConnectedAdapters                        :
PortGroup                                       : Pharmax-VL DVS-Esxi-VM-Network
VLAN ID                                         : 7
Active adapters                                 :
Standby adapters                                :
Unused adapters                                 :
Security Promiscuous/MacChanges/ForgedTransmits : Reject/Reject/Reject

Hostname                                        : esxsvr-00f.pharmax.local
Type                                            : Standard
Version                                         :
Name                                            : Virtual Lab - Cert
Uplink/ConnectedAdapters                        :
PortGroup                                       : Virtual Lab - Cert DVS-ESXi-MANAGEMENT-EPH
VLAN ID                                         : 5
Active adapters                                 :
Standby adapters                                :
Unused adapters                                 :
Security Promiscuous/MacChanges/ForgedTransmits : Accept/Accept/Accept

Hostname                                        : esxsvr-00f.pharmax.local
Type                                            : Standard
Version                                         :
Name                                            : Virtual Lab - Cert
Uplink/ConnectedAdapters                        :
PortGroup                                       : Virtual Lab - Cert DVS-Esxi-VM-Network
VLAN ID                                         : 7
Active adapters                                 :
Standby adapters                                :
Unused adapters                                 :
Security Promiscuous/MacChanges/ForgedTransmits : Accept/Accept/Accept


PS C:\Users\Administrator>

Espero les haya sido de utilidad esta herramienta de reporte. Hasta Luego!

HomeLab – Documentación de VMware SRM utilizando AsBuiltReport

Hola a tod@s!

Estas últimas semanas he estado trabajando en mejorar mis habilidades de programación tomando en cuenta que ahora la tendencia es «Software Defined Everything». En esta ocasión he estado dedicando tiempo a PowerShell creando varios reportes a través del proyecto de AsBuildReport creado por «Tim Carman» @tpcarman (Aquí el enlace).

El reporte que he ayudado a terminar en esta ocasión está relacionado a documentar las instalaciones de VMware Site Recovery Manager. El reporte fue creado inicialmente por «Matt Allford» @mattallford y tome la iniciativa de culminar el trabajo que ya se había iniciado.

Según el portal de documentación de VMware:

Site Recovery Manager (SRM) es la solución líder en gestión de recuperación ante desastres, que ha sido diseñada para minimizar el tiempo de inactividad en caso de desastre. Proporciona gestión basada en políticas y coordinación automatizada, y permite realizar pruebas de los planes de recuperación centralizados sin provocar interrupciones. Se ha concebido para máquinas virtuales y es escalable para gestionar todas las aplicaciones en un entorno de vSphere.

VMware Documentation

El reporte se encuentra en estado inicial y en constante desarrollo, pero decidí liberarlo públicamente para poder recibir recomendaciones o más bien para fomentar que otros desarrolladores aporte a mejorar su contenido. El website de desarrollo del reporte se encuentra en Github les dejo el enlace para que puedan ver el alcance y el objetivo del proyecto.

Ahora bien, para comenzar necesitamos cumplir con los siguientes requisitos:

  • Multi-plataforma Windows, Linux o MAC
  • PowerShell v5.1+ ó v7
  • El módulo de AsBuiltReport.Core >= 1.1.0
  • El módulo de «VMware PowerCLI» >= 12.3+

Este reporte utiliza la versión de PowerShell 5.+ ó PSCore 7, para validar la versión podemos utilizar la variable «$PSVersionTable» desde la consola de PowerShell:

PS /home/rebelinux> $PSVersionTable


Name                           Value
----                           -----
PSVersion                      7.2.0
PSEdition                      Core
GitCommitId                    7.2.0
OS                             Linux 5.15.4-arch1-1 #1 SMP PREEMPT Sun, 21 Nov 2021 21:34:33 +0000
Platform                       Unix
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

PS /home/rebelinux> 

Para validar si tenemos los módulos requeridos podemos utilizar el comando «Get-Module» según se muestra en el siguiente ejemplo:

PS /home/rebelinux> Get-Module -ListAvailable -Name @('VMware.PowerCLI','AsBuiltReport.Core')


    Directory: /home/rebelinux/.local/share/powershell/Modules

ModuleType Version    PreRelease Name                                PSEdition ExportedCommands
---------- -------    ---------- ----                                --------- ----------------
Script     1.1.0                 AsBuiltReport.Core                  Desk      {New-AsBuiltReport...}
Manifest   12.4.1.18…            VMware.PowerCLI                     Desk      

PS /home/rebelinux>

Si el comando no produce algún resultado quiere decir que el módulos no están instalados. Para instalar la dependencia utilizamos el comando «Install-Module»:

PS /home/rebelinux>  Install-Module -Name @('VMware.PowerCLI','AsBuiltReport.Core') 
                                                                                                                                                                                                                                                                              Installing package 'VMware.PowerCLI'   
                                                                                                                                                                                                                                                     Copying unzipped package to '..\2052046370\VMware.PowerCLI'  
                                                                                                                                                                                           [oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo]   
 
PS /home/rebelinux> 

Una vez instalamos los prerrequisito podemos continuar con la instalación del módulo principal «AsBuiltReport.VMware.SRM«. Ya que este reporte todavía no ha sido liberado públicamente en «PowerShell Gallery» necesitamos realizar manualmente la instalación. El primer paso es descargar el código desde el portal de Github aquí.

Una vez descargamos el código necesitamos descomprimir el archivo, podemos utilizar el comando «Expand-Archive» en la consola de PowerShell.

PS /home/rebelinux/Downloads> Expand-Archive -Path ./AsBuiltReport.VMware.SRM.zip -DestinationPath .

PS /home/rebelinux/Downloads> ls AsBuiltReport.VMware.SRM

AsBuiltReport.VMware.SRM.json  AsBuiltReport.VMware.SRM.psm1       CHANGELOG.md  README.md  Src
AsBuiltReport.VMware.SRM.psd1  AsBuiltReport.VMware.SRM.Style.ps1  LICENSE       Samples
PS /home/rebelinux/Downloads> 

Luego es necesario copiar la carpeta descomprimida «AsBuiltReport.VMware.SRM» a una ruta establecida en $env:PSModulePath. El último paso que debemos seguir si estamos en «Windows OS» es abrir una ventana de PowerShell y desbloquear los archivos descargados utilizando el comando «Unblock-File».

$path = (Get-Module -Name AsBuiltReport.VMware.SRM -ListAvailable).ModuleBase; Unblock-File -Path $path\*.psd1; Unblock-File -Path $path\Src\Public\*.ps1; Unblock-File -Path $path\Src\Private\*.ps1

Header text

Un requisito opcional es generar los archivos de configuración que te permite establecer los parámetros de la organización que son utilizados para generar el reporte. Este proceso genera unos archivos tipo JSON que son utilizados como plantillas “templates” de forma que no tengas que llenar la información repetitiva cuando generes los reportes. Para ver el procedimiento de configuración, basta con hacer clic en el icono “+”.

Archivos de configuración (AsBuiltReport JSON)

El «cmdlet» de powershell New-AsBuiltConfig te permite generar la plantilla que utilizaremos como base del reporte. Esta plantilla establece los parámetros no técnicos del reporte.

PS /home/rebelinux>  New-AsBuiltConfig

---------------------------------------------
 <        As Built Report Information      >
---------------------------------------------
Enter the name of the Author for this As Built Report [jocolon]: Jonathan Colon
---------------------------------------------
 <           Company Information           >
---------------------------------------------
Would you like to enter Company information for the As Built Report? (y/n): y
Enter the Full Company Name: Zen PR Solutions
Enter the Company Short Name: ZENPR
Enter the Company Contact: Jonathan Colon
Enter the Company Email Address: jcolonf@zenprsolutions.com
Enter the Company Phone: XXX-XXX-XXXX
Enter the Company Address: Puerto Rico
---------------------------------------------
 <            Email Configuration          >
---------------------------------------------
Would you like to enter SMTP configuration? (y/n): n
----------------------------------------------
 <       As Built Report Configuration      >
----------------------------------------------
Would you like to save the As Built Report configuration file? (y/n): y
Enter a name for the As Built Report configuration file [AsBuiltReport]: HomeLab SRM Report
Enter the path to save the As Built Report configuration file [/home/rebelinux/AsBuiltReport]:

Name                           Value
----                           -----
Email                          {Port, Credentials, Server, To...}
Company                        {FullName, Contact, Phone, Email...}
UserFolder                     {Path}
Report                         {Author}


PS /home/rebelinux>

Una vez culminado el proceso se creará un archivo tipo JSON con el siguiente contenido:

{
    "Email":  {
                  "Port":  null,
                  "Credentials":  null,
                  "Server":  null,
                  "To":  null,
                  "From":  null,
                  "UseSSL":  null,
                  "Body":  null
              },
    "Company":  {
                    "FullName":  "Zen PR Solutions",
                    "Contact":  "Jonathan Colon",
                    "Phone":  "787-203-2790",
                    "Email":  "jcolonf@zenprsolutions.com",
                    "ShortName":  "ZENPR",
                    "Address":  "Puerto Rico"
                },
    "UserFolder":  {
                       "Path":  "/home/rebelinux/AsBuiltReport"
                   },
    "Report":  {
                   "Author":  "Jonathan Colon"
               }
}

El comando New-AsBuiltReportConfig permite establecer los parámetros técnico del reporte como el nivel y tipo de información «verbose level».

PS /home/rebelinux/ New-AsBuiltReportConfig VMware.SRM -FolderPath /home/rebelinux/AsBuiltReport/

Una vez culminado el proceso se creará un archivo tipo JSON con el siguiente contenido:

{
    "Report": {
        "Name": "VMware SRM As Built Report",
        "Version": "1.0",
        "Status": "Released",
        "ShowCoverPageImage": true,
        "ShowTableOfContents": true,
        "ShowHeaderFooter": true,
        "ShowTableCaptions": true
    },
    "Options": {
        "ShowDefinitionInfo": false
    },
    "InfoLevel": {
        "_comment_": "0 = Disabled, 1 = Enabled, 2 = Adv Summary, 3 = Detailed",
        "Summary": 1,
        "Protected": 1,
        "Recovery": 1,
        "ProtectionGroup": 1,
        "RecoveryPlan": 1,
        "InventoryMapping": 1
    },
    "HealthCheck": {
        "InventoryMapping": {
            "Status": true
        },
        "Protected": {
            "Status": true
        },
        "Recovery": {
            "Status": true
        }

    }
}

Este archivo de configuración se puede utilizar para especificar el nivel de detalle del reporte como también que sesiones del reporte van a ser habilitadas.

Luego podemos generar el reporte utilizando el comando «New-AsBuiltReport -Report VMware.SRM -Target vCenter_FQDN_or_IP». Es importante recalcar que es requerido utilizar la dirección del servidor de «vCenter» como «Target».

PS /home/rebelinux/> New-AsBuiltReport -Report VMware.SRM -AsBuiltConfigFilePath /home/rebelinux/script/AsBuiltReport.json -OutputFolderPath /home/rebelinux/script -Target 192.168.5.2 -Format HTML -Verbose -EnableHealthCheck -Credential $cred -ReportConfigFilePath /home/rebelinux/script/AsBuiltReport.VMware.SRM.json

VERBOSE: Loading As Built Report configuration from '/home/rebelinux/script/AsBuiltReport.json'.
VERBOSE: Loading module from path '/home/rebelinux/.local/share/powershell/Modules/AsBuiltReport.VMware.SRM/AsBuiltReport.VMware.SRM.psm1'.
VERBOSE: Loading AsBuiltReport.VMware.SRM report configuration file from path '/home/rebelinux/script/AsBuiltReport.VMware.SRM.json'.
VERBOSE: Setting report filename to 'VMware SRM As Built Report'.
VERBOSE: [ 12:49:41:970 ] [ Document ] - Document 'VMware SRM As Built Report' processing started.
VERBOSE: [ 12:49:42:016 ] [ Document ] - Executing report style script from path '/home/rebelinux/.local/share/powershell/Modules/AsBuiltReport.VMware.SRM\AsBuiltReport.VMware.SRM.Style.ps1'.
VERBOSE: [ 12:49:42:103 ] [ Document ] - Processing paragraph 'VMware SRM As Built Report'.
VERBOSE: [ 12:49:42:105 ] [ Document ] - Processing blank line.
VERBOSE: [ 12:49:42:110 ] [ Document ] - Processing paragraph 'Zen PR Solutions'.
VERBOSE: [ 12:49:42:111 ] [ Document ] - Processing blank line.
VERBOSE: [ 12:49:42:112 ] [ Document ] - Processing table 'Cover Page'.
VERBOSE: [ 12:49:42:114 ] [ Document ] - Processing page break.
VERBOSE: [ 12:49:42:115 ] [ Document ] - Processing table of contents 'Table of Contents'.
VERBOSE: [ 12:49:42:116 ] [ Document ] - Processing page break.
VERBOSE: [ 12:49:43:531 ] [ Document ] - Connected to protected site vCenter: 192.168.5.2
VERBOSE: [ 12:50:30:517 ] [ Document ] - Connected to vcenter-03v.zenpr.local
VERBOSE: [ 12:50:31:820 ] [ Document ] - Connected to protected site SRM: srmhq-01v.zenpr.local
VERBOSE: [ 12:50:31:821 ] [ Document ] - Processing section 'VMware Site Recovery Manager - SRMHQ-01V.' started.
VERBOSE: [ 12:50:31:823 ] [ Document ] - Processing paragraph 'VMware Site Recovery Manager is a bu[..]'.
VERBOSE: [ 12:50:31:833 ] [ Document ] - Processing blank line.
VERBOSE: [ 12:50:31:835 ] [ Document ] - Summary InfoLevel set at 1.
VERBOSE: [ 12:50:36:372 ] [ Document ] - Processing table 'Placeholder Datastore Mappings - SRM-HQ'.
VERBOSE: [ 12:50:36:375 ] [ Document ] - Processing section 'Placeholder Datastore Mappings' completed.
VERBOSE: [ 12:50:36:376 ] [ Document ] - Processing section 'Inventory Mapping Summary' completed.
VERBOSE: [ 12:50:36:377 ] [ Document ] - Protected Site InfoLevel set at 1.
VERBOSE: [ 12:50:36:377 ] [ Document ] - Collecting SRM Protected Site information.
VERBOSE: [ 12:50:36:387 ] [ Document ] - Processing section 'Protected Site' started.
VERBOSE: [ 12:50:36:395 ] [ Document ] - Processing paragraph 'In a typical Site Recovery Manager i[..]'.
VERBOSE: [ 12:50:36:396 ] [ Document ] - Processing blank line.
VERBOSE: [ 12:50:36:397 ] [ Document ] - Processing paragraph 'The following section provides a sum[..]'.
VERBOSE: [ 12:50:36:398 ] [ Document ] - Processing blank line.
VERBOSE: [ 12:50:36:398 ] [ Document ] - Discovered Protected Site SRM-HQ.
VERBOSE: [ 12:50:36:480 ] [ Document ] - Processing table 'Protected Site Information - SRM-HQ'.
VERBOSE: [ 12:50:36:483 ] [ Document ] - Processing section 'Protected Site' completed.
VERBOSE: [ 12:50:36:483 ] [ Document ] - Recovery Site InfoLevel set at 1.
VERBOSE: [ 12:50:36:484 ] [ Document ] - Collecting SRM Recovery Site information.
VERBOSE: [ 12:50:36:535 ] [ Document ] - Processing section 'Recovery Site' started.
VERBOSE: [ 12:50:36:536 ] [ Document ] - Processing paragraph 'In a typical Site Recovery Manager i[..]'.
VERBOSE: [ 12:50:36:537 ] [ Document ] - Processing blank line.
VERBOSE: [ 12:50:36:538 ] [ Document ] - Processing paragraph 'The following section provides a sum[..]'.
VERBOSE: [ 12:50:36:539 ] [ Document ] - Processing blank line.
VERBOSE: [ 12:50:36:539 ] [ Document ] - Discovered Recovery Site SRM-EDGE.
VERBOSE: [ 12:50:36:551 ] [ Document ] - Processing table 'Recovery Site Information - SRM-EDGE'.
VERBOSE: [ 12:50:36:554 ] [ Document ] - Processing section 'Recovery Site' completed.
VERBOSE: [ 12:50:36:555 ] [ Document ] - Protection Group Site InfoLevel set at 2.
VERBOSE: [ 12:50:36:555 ] [ Document ] - Collecting SRM Protection Group information.
VERBOSE: [ 12:50:36:561 ] [ Document ] - Processing section 'Protection Groups Summary' started.
VERBOSE: [ 12:50:36:563 ] [ Document ] - Processing paragraph 'In Site Recovery Manager, protection[..]'.
VERBOSE: [ 12:50:36:566 ] [ Document ] - Processing blank line.
VERBOSE: [ 12:50:36:567 ] [ Document ] - Processing paragraph 'The following section provides a sum[..]'.
VERBOSE: [ 12:50:36:570 ] [ Document ] - Processing blank line.
VERBOSE: [ 12:50:36:673 ] [ Document ] - Discovered Protection Group ZENPR-DB-PG.
VERBOSE: [ 12:50:36:735 ] [ Document ] - Discovered Protection Group ZENPR-MON-PG.
VERBOSE: [ 12:50:36:789 ] [ Document ] - Discovered Protection Group ZENPR-WEB-PG.
VERBOSE: [ 12:50:36:841 ] [ Document ] - Discovered Protection Group ZENPR-APP-PG.
VERBOSE: [ 12:50:36:855 ] [ Document ] - Processing table 'Protection Group Information - ZENPR-APP-PG'.
VERBOSE: [ 12:50:36:858 ] [ Document ] - Processing section 'Protection Groups' started.
VERBOSE: [ 12:50:36:873 ] [ Document ] - Processing paragraph 'The following section provides detai[..]'.
VERBOSE: [ 12:50:36:874 ] [ Document ] - Processing blank line.
VERBOSE: [ 12:50:36:892 ] [ Document ] - Processing section 'VMRS Type Protection Groups' started.
VERBOSE: [ 12:50:38:635 ] [ Document ] - Processing table 'VRMS Protection Group - ZENPR-APP-PG'.
WARNING: [ 12:50:38:639 ] [ Document ] - List table captions are only supported on tables with a single row. Removing caption from table 'VRMS Protection Group - ZENPR-APP-PG'.
VERBOSE: [ 12:50:38:639 ] [ Document ] - Processing section 'VMRS Type Protection Groups' completed.
VERBOSE: [ 12:50:38:640 ] [ Document ] - Processing section 'SAN Type Protection Groups' started.
VERBOSE: [ 12:50:39:145 ] [ Document ] - Processing table 'SAN Protection Group - ZENPR-APP-PG'.
VERBOSE: [ 12:50:39:147 ] [ Document ] - Processing section 'SAN Type Protection Groups' completed.
VERBOSE: [ 12:50:39:154 ] [ Document ] - Processing section 'Virtual Machine Protection Properties Summary' started.
VERBOSE: [ 12:50:39:167 ] [ Document ] - Processing paragraph 'The following section provides detai[..]'.
VERBOSE: [ 12:50:39:168 ] [ Document ] - Processing blank line.
VERBOSE: [ 12:50:39:234 ] [ Document ] - Processing section 'ZENPR-DB-PG Protection Properties (PlaceHolder)' started.
VERBOSE: [ 12:50:39:804 ] [ Document ] - Processing table 'VM Recovery PlaceHolder - ZENPR-DB-PG'.
VERBOSE: [ 12:50:39:811 ] [ Document ] - Processing section 'ZENPR-DB-PG Protection Properties (PlaceHolder)' completed.
VERBOSE: [ 12:50:39:855 ] [ Document ] - Processing section 'ZENPR-MON-PG Protection Properties (PlaceHolder)' started.
VERBOSE: [ 12:50:40:156 ] [ Document ] - Processing table 'VM Recovery PlaceHolder - ZENPR-MON-PG'.
VERBOSE: [ 12:50:40:158 ] [ Document ] - Processing section 'ZENPR-MON-PG Protection Properties (PlaceHolder)' completed.
VERBOSE: [ 12:50:40:204 ] [ Document ] - Processing section 'ZENPR-WEB-PG Protection Properties (PlaceHolder)' started.
VERBOSE: [ 12:50:40:554 ] [ Document ] - Processing table 'VM Recovery PlaceHolder - ZENPR-WEB-PG'.
VERBOSE: [ 12:50:40:556 ] [ Document ] - Processing section 'ZENPR-WEB-PG Protection Properties (PlaceHolder)' completed.
VERBOSE: [ 12:50:41:181 ] [ Document ] - Processing table 'Recovery Plan Config - ZENPR-MON-RG'.
VERBOSE: [ 12:50:41:198 ] [ Document ] - Processing section 'Virtual Machine Recovery Settings Summary' started.
VERBOSE: [ 12:50:41:245 ] [ Document ] - Processing paragraph 'The following section provides detai[..]'.
VERBOSE: [ 12:50:41:246 ] [ Document ] - Processing blank line.
VERBOSE: [ 12:50:41:257 ] [ Document ] - Processing section 'ZENPR-DB-RG VM Recovery Settings' started.
VERBOSE: [ 12:50:41:349 ] [ Document ] - Discovered VM Setting Linux-DB-01V.
VERBOSE: [ 12:50:41:571 ] [ Document ] - Discovered VM Setting Linux-DB-02V.
VERBOSE: [ 12:50:41:616 ] [ Document ] - Processing table 'Virtual Machine Recovery Settings - ZENPR-DB-RG'.
VERBOSE: [ 12:50:41:619 ] [ Document ] - Processing section 'ZENPR-DB-RG VM Recovery Settings' completed.
VERBOSE: [ 12:50:41:649 ] [ Document ] - Processing section 'ZENPR-APP-RG VM Recovery Settings' started.
VERBOSE: [ 12:50:41:696 ] [ Document ] - Discovered VM Setting Linux-APP-01V.
VERBOSE: [ 12:50:41:706 ] [ Document ] - Processing table 'Virtual Machine Recovery Settings - ZENPR-APP-RG'.
VERBOSE: [ 12:50:41:709 ] [ Document ] - Processing section 'ZENPR-APP-RG VM Recovery Settings' completed.
VERBOSE: [ 12:50:41:721 ] [ Document ] - Processing section 'ZENPR-WEB-RG VM Recovery Settings' started.
VERBOSE: [ 12:50:41:766 ] [ Document ] - Discovered VM Setting Linux-WEB-01V.
VERBOSE: [ 12:50:41:777 ] [ Document ] - Processing table 'Virtual Machine Recovery Settings - ZENPR-WEB-RG'.
VERBOSE: [ 12:50:41:779 ] [ Document ] - Processing section 'ZENPR-WEB-RG VM Recovery Settings' completed.
VERBOSE: [ 12:50:41:791 ] [ Document ] - Processing section 'ZENPR-MON-RG VM Recovery Settings' started.
VERBOSE: [ 12:50:41:840 ] [ Document ] - Discovered VM Setting Linux-Mon-01v.
VERBOSE: [ 12:50:41:853 ] [ Document ] - Processing table 'Virtual Machine Recovery Settings - ZENPR-MON-RG'.
VERBOSE: [ 12:50:41:856 ] [ Document ] - Processing section 'ZENPR-MON-RG VM Recovery Settings' completed.
VERBOSE: [ 12:50:41:858 ] [ Document ] - Processing section 'Virtual Machine Recovery Settings Summary' completed.
VERBOSE: [ 12:50:41:860 ] [ Document ] - Processing section 'Recovery Plans Summary' completed.
VERBOSE: [ 12:50:41:862 ] [ Document ] - Processing section 'VMware Site Recovery Manager - SRMHQ-01V.' completed.
VERBOSE: [ 12:50:41:893 ] [ Document ] - Document 'VMware SRM As Built Report' processing completed.
VERBOSE: [ 12:50:41:897 ] [ Document ] - Total processing time '59.93' seconds.
VMware SRM As Built Report 'VMware SRM As Built Report' has been saved to '/home/rebelinux/script'.
PS /home/rebelinux/>

Aquí les dejo el ejemplo del reporte generado.

Adicionalmente les incluyo varias opciones de cómo invocar el reporte.

# Generate a VMware SRM As Built Report for vCenter Server 'vcenter.zenpr.local' using specified credentials. Export report to HTML & DOCX formats. Use default report style. Append timestamp to report filename. Save reports to 'C:\Users\Jon\Documents'

PS C:\> New-AsBuiltReport -Report VMware.SRM -Target 'vcenter.zenpr.local' -Username 'administrator@vsphere.local' -Password 'P@ssw0rd' -Format Html,Word -OutputFolderPath 'C:\Users\Jon\Documents' -Timestamp

# Generate a VMware SRM As Built Report for vCenter Server 'vcenter.zenpr.local' using specified credentials and report configuration file. Export report to Text, HTML & DOCX formats. Use default report style. Save reports to 'C:\Users\Jon\Documents'. Display verbose messages to the console.

PS C:\> New-AsBuiltReport -Report VMware.SRM -Target 'vcenter.zenpr.local' -Username 'administrator@vsphere.local' -Password 'P@ssw0rd' -Format Text,Html,Word -OutputFolderPath 'C:\Users\Jon\Documents' -ReportConfigFilePath 'C:\Users\Jon\AsBuiltReport\AsBuiltReport.VMware.SRM.json' -Verbose

# Generate a VMware SRM As Built Report for vCenter Server 'vcenter.zenpr.local' using stored credentials. Export report to HTML & Text formats. Use default report style. Highlight environment issues within the report. Save reports to 'C:\Users\Jon\Documents'.

PS C:\> $Creds = Get-Credential
PS C:\> New-AsBuiltReport -Report VMware.SRM -Target 'vcenter.zenpr.local' -Credential $Creds -Format Html,Text -OutputFolderPath 'C:\Users\Jon\Documents' -EnableHealthCheck

# Generate a VMware SRM As Built Report for vCenter Server 'vcenter.zenpr.local' using specified credentials. Export report to HTML & DOCX formats. Use default report style. Reports are saved to the user profile folder by default. Attach and send reports via e-mail.

PS C:\> New-AsBuiltReport -Report VMware.SRM -Target 'vcenter.zenpr.local' -Username 'administrator@vsphere.local' -Password 'P@ssw0rd' -Format Html,Word -OutputFolderPath 'C:\Users\Jon\Documents' -SendEmail

Hasta Luego Amigos!

PowerShell – Conexión inicial a vCenter utilizando VMware PowerCLI

Hola tod@s

En el artículo anterior les mostré cómo realizar la instalación de VMware PowerCLI y una introduccion basica del propósito de esta herramienta de administración. En este post veremos cómo realizar la conexión inicial a nuestro vCenter utilizando la herramienta de PowerCLI. Es importante mencionar que PowerCLI se puede utilizar para conectarse tanto a vCenter como al servidor de vSphere «ESXi» de forma independiente pero en este post estaré mostrando ejemplos solo haciendo referencia al servidor de vCenter.

Para comenzar, necesitamos establecer la conexión inicial hacia nuestro servidor de vCenter. PowerCLI ofrece el comando «Connect-VIServer» para este propósito pero también existe otros comando para manejar y hasta validar las conexiones existente. El siguiente ejemplo muestra cómo desplegar los comando de conexión/desconexión de vCenter

PS /home/rebelinux> Get-Command *VIserver*


CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           Get-VIServer                                       12.4.0.18… VMware.VimAutomation.Core
Cmdlet          Connect-VIServer                                   12.4.0.18… VMware.VimAutomation.Core
Cmdlet          Disconnect-VIServer                                12.4.0.18… VMware.VimAutomation.Core

PS /home/rebelinux>

Utilizando el comando «Connect-VIServer» establecemos la conexión inicial hacia el vCenter en mi HomeLab con el direcion de IP 192.168.5.2.

PS /home/rebelinux> Connect-VIServer -Server 192.168.5.2 -Credential (Get-Credential)

PowerShell credential request
Enter your credentials.
User: administrator@vsphere.local
Password for user administrator@vsphere.local: ********

Name                           Port  User
----                           ----  ----
192.168.5.2                    443   VSPHERE.LOCAL\Administrator

PS /home/rebelinux> 

En este ejemplo se puede ver que realizamos la conexión al vCenter utilizando la opción de (Get-Credential) para que sea solicitado las credenciales en consola. De igual forma pudimos crear una variable con las credenciales ya pre-establecidas. En este ejemplo les muestro como hacerlo.

PS /home/rebelinux> $Credenciales = Get-Credential

PowerShell credential request
Enter your credentials.
User: administrator@vsphere.local
Password for user administrator@vsphere.local: ********
PS /home/rebelinux> Connect-VIServer -Server 192.168.5.2 -Credential $Credenciales   


Name                           Port  User
----                           ----  ----
192.168.5.2                    443   VSPHERE.LOCAL\Administrator

PS /home/rebelinux> 

En el ejemplo anterior guardamos las credenciales en una variable con el nombre de $Credenciales para luego utilizar esta variable como «Input» en el comando «Connect-VIServer» utilizando la opción de (-Credential $Credenciales). Una vez realicemos la conexión inicial podemos utilizar la variable $defaultVIServer para validar la conexión existente. Es importante mencionar que la session que se encuentra en la variable $defaultVIServer sera utilizada de manera predeterminada cuando se utilizan los cmdlet si no se le especifica la opción de «-Server».

PS /home/rebelinux> $defaultVIServer


Name                           Port  User
----                           ----  ----
192.168.5.2                    443   VSPHERE.LOCAL\Administrator

PS /home/rebelinux> 

Al utilizando la variable $defaultVIServers podemos ver todas la conexiones previamente realizadas. Como se puede ver en el siguiente ejemplo se muestran las múltiples conexiones donde la session con la direción de IP «192.168.5.253» pertenece a un servidor de ESXi.

PS /home/rebelinux> $defaultVIServers                                                  


Name                           Port  User
----                           ----  ----
192.168.5.253                  443   root
192.168.5.2                    443   VSPHERE.LOCAL\Administrator

PS /home/rebelinux> 

Luego de realizar la conexión hacia nuestro Vcenter podemos utilizar los múltiples cmdlet que vienen incluidos en PowerCLI. En el siguiente ejemplo enlistamos todas las máquinas virtuales que se encuentran manejadas en el vCenter utilizando el cmdlet «Get-VM».

PS /home/rebelinux> Get-VM 


Name                 PowerState Num CPUs MemoryGB
----                 ---------- -------- --------
Horizon-OPM-01V      PoweredOff 4        16.000
FreeNAS              PoweredOff 2        8.000
Horizon-CS-01V       PoweredOff 2        5.000
vcenter-01v          PoweredOn  2        12.000
Horizon-APV-01V      PoweredOff 2        4.000
cluster1-03          PoweredOff 2        8.000
Horizon-CAP-01V      PoweredOff 2        4.000
horizon-tp-01v       PoweredOff 2        4.000
cluster1-04          PoweredOff 2        8.000
Horizon-LNX-01T      PoweredOff 1        2.000
Horizon-IDM-01V      PoweredOff 2        6.000
Horizon-SQL-01V      PoweredOff 2        4.000
Horizon-IDM-01V      PoweredOff 2        6.000
Horizon-RDS-01T      PoweredOff 2        4.000
Horizon-RDS-01T      PoweredOff 2        4.000
Horizon-OPM-01V      PoweredOff 4        16.000
Horizon-UAG-02V      PoweredOff 2        4.000
Horizon-UAG-01V      PoweredOff 2        4.000
horizon-tp-01v       PoweredOff 2        4.000
Management-PC        PoweredOff 2        8.000
csr-pharmax-hq       PoweredOff 1        4.000
GNS3 Server          PoweredOff 4        20.000
Server-DC-01V        PoweredOn  2        4.000
csr-pharmax-dr       PoweredOff 1        4.000

PS /home/rebelinux

Si existen conexiones a múltiples sesiones de vCenter se mostrarán todas las VM de todos los vCenter conectados. Para filtrar el resultado a solo un vCenter en específico podemos utilizar la opción de «-Server» cuando se ejecuta el cmdlet.

PS /home/rebelinux> Get-VMHost -Server 192.168.5.2


Name                 ConnectionState PowerState NumCpu CpuUsageMhz CpuTotalMhz   MemoryUsageGB   MemoryTotalGB Version
----                 --------------- ---------- ------ ----------- -----------   -------------   ------------- -------
esxsvr-00f.pharmax.… Connected       PoweredOn       4         348       13628          17.792          63.865   7.0.3
comp-01a.pharmax.lo… NotResponding   Unknown         2           0        6816           0.000           7.995        
comp-02a.pharmax.lo… NotResponding   Unknown         2           0        6816           0.000           7.995        

PS /home/rebelinux> 

Una vez terminamos de interactuar con la sesión del vCenter podemos utilizar el cmdlet «Disconnect-VIServer» para desconectar la sesión.

PS /home/rebelinux> Disconnect-VIServer -Server 192.168.5.2

Confirm
Are you sure you want to perform this action?
Performing the operation "Disconnect VIServer" on target "User: VSPHERE.LOCAL\Administrator, Server: 192.168.5.2, Port: 443".
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Yes"): Y
PS /home/rebelinux> 

Utilizando la variable $defaultVIServers podemos validar si la sesión fue desconectada correctamente.

PS /home/rebelinux> $defaultVIServers                      


Name                           Port  User
----                           ----  ----
192.168.5.253                  443   root

PS /home/rebelinux> 

Hasta Luego Amigos!

HomeLab – Diagrama de la Infraestructura Virtual con vDiagram

Hola a tod@s

Tomando como referencia la lista de «Top 10 VMware Admin Tools«, en esta oportunidad vengo a mostrarles como utilizar la herramienta de vDiagram que dispone de la posición #6 de la lista de herramienta mas utilizadas por los administradores de infraestructuras de VMware. En esencia este «script» de Powershell captura y dibuja una infraestructura de VMware vSphere utilizando Microsoft Visio. Originalmente esta herramienta fue creada por Alan Renouf @alanrenouf y actualmente el proyecto es mantenido por Tony Gonzalez @vDiagram_Tony.

Para utilizar esta herramienta es necesario cumplir con los siguientes requisitos:

  1. Powershell >= 5.1
  2. Modulos de PowerCLI («Install-Module -Name VMware.PowerCLI»)
  3. Microsoft Visio 2013+

Una vez tengamos todos los requisitos procedemos a descargar el código de Powershell para poder obtener nuestro diagrama. Para descargar el archivo accedemos al siguiente enlace:

https://github.com/Tony-SouthFLVMUG/vDiagram2.0

Una vez descargamos el paquete procedemos a descomprimir el contenido.

PS C:\> Expand-Archive -LiteralPath .\vDiagram2.0-master.zip -DestinationPath .
PS C:\> ls vD*


    Directory: C:\Users\jocolon\Downloads


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----         8/26/2021  11:15 AM                vDiagram2.0-master
-a----         7/21/2021   9:37 AM       12470234 vDiagram2.0-master.zip


PS C:\>

Nos movemos a la carpeta descomprimida y validamos el contenido con el comando «ls» o «dir».

PS C:\> cd .\vDiagram2.0-master\
PS C:\vDiagram2.0-master> ls


    Directory: C:\vDiagram2.0-master


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----         2/15/2021   5:29 PM                archived
-a----         2/15/2021   5:29 PM             66 .gitattributes
-a----         2/15/2021   5:29 PM           5771 README.md
-a----         2/15/2021   5:29 PM         109288 vDiagram.ico
-a----         2/15/2021   5:29 PM         673926 vDiagram_2.0.11.ps1
-a----         2/15/2021   5:29 PM         985128 vDiagram_2.0.11.vssx
-a----         2/15/2021   5:29 PM         116398 vDiagram_Scheduled_Task_2.0.11.ps1
-a----         2/15/2021   5:29 PM         254037 vDiagram_Standard.png


PS C:\vDiagram2.0-master>

Utilizamos el comando «Unblock-File» que nos permite poder ejecutar los archivos que han sido descargados desde el Internet.

PS C:\vDiagram2.0-master> Unblock-File .\vDiagram_2.0.11.ps1
PS C:\vDiagram2.0-master>

El próximo paso seria utilizar el comando «$PSVersionTable» para validar la versión de Powershell instalada localmente. Repasando la sección de requisitos podemos ver que para utilizar la herramienta de vDiagram necesitamos tener una versión de Powershell 5.1.x o mayor. En este ejemplo podemos ver que mi computadora tiene la versión «5.1.19041.1151«.

PS C:\vDiagram2.0-master> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.19041.1151
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.19041.1151
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1


PS C:\vDiagram2.0-master>

Adicionalmente validamos que el módulo de PowerCLI esté instalado utilizando el comando «Get-Module».

PS C:\vDiagram2.0-master> Get-Module -ListAvailable -Name 'VMware.PowerCLI' | Sort-Object -Property Version -Descending | Select-Object -First 1


    Directory: C:\Program Files\WindowsPowerShell\Modules


ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Manifest   12.3.0.... VMware.PowerCLI


PS C:\vDiagram2.0-master> 

Luego de validar todos los requisitos podemos ejecutar el «script» utilizando el archivo principal «.\vDiagram_2.0.11.ps1″.

PS C:\vDiagram2.0-master> 

PS C:\vDiagram2.0-master> .\vDiagram_2.0.11.ps1
[08/24/2021 10:45:16] VMware PowerCLI Module(s) 12.3.0.17860403 11.5.0.14912921  found on this machine.

Una vez el programa termine de ejecutar podemos ver en la pestaña de «Prerequisites» un resumen de todas las dependencias y su estado. En este ejemplo podemos ver que todas las dependencias se muestran en color verde que nos indica que están instaladas.

Siguiendo los pasos según se muestra en la pestaña de «Directions» es necesario ingresar la dirección de IP/FQDN del vCenter y las credenciales con privilegios que permita conectarse y extraer la información.

Une vez completada la información del vCenter procedemos a validar la conexión presionando el botón de «Connect to vCenter». Como se puede apreciar en la siguiente imagen el botón cambia a color verde indicando que hubo una conexión exitosa al vCenter con las credenciales provistas.

El próximo paso seria seleccionar la pestaña de «Capture CSVs for Visio» y especificar la carpeta donde se grabaran los reportes con la información temporera para generar el diagrama. En este ejemplo utilice la carpeta <Desktop/Output>.

Es importante mencionar que por cada valor seleccionado se generará un archivo con la información del respectivo elemento.

Luego procedemos a presionar «Collect CSV Data» para iniciar el proceso de recopilación de los datos.

Una vez finalizado el proceso de recopilación de los datos podemos seleccionar la pestaña de «Draw Visio» y configurar la opción de «Select CSV Input Folder».

Luego seleccionas la carpeta donde están los datos previamente recopilados. En mi ejemplo sería la carpeta <Desktop/Output> que utilice en la sección de «Capture CSVs for Visio».

Ahora es necesario validar que la información necesaria para generar el diagrama esta disponible al oprimir el botón «CSV Validation Complete».

En este próximo paso es necesario especificar la carpeta donde se guardará el diagrama una vez generado. Para esto presionamos «Select Visio Output Folder» y seleccionamos la carpeta que se utilizara para este propósito. En este ejemplo se seleccionó <Desktop/Output>.

En la área de «Visio Output Folder» podemos selecionar la multiples opciones disponibles para generar el diagrama. Luego de seleccionar la carpeta de «Output» podemos comenzar a generar el diagrama presionando el botón «Draw Visio».

En este paso del ejemplo presionamos «OK» en la notificación donde nos indica que el diagrama fue creado.

Para ver el diagrama generado sobre nuestra infraestructura virtual presionamos el botón «Open Visio Diagram».

Finalmente les dejo varias imágenes de ejemplo sobre los diagramas de mi infraestructura virtual «HomeLab».

Resumen

En este laboratorio utilizamos la herramienta llamada vDiagram que nos permite hacer un representación lógica de como esta relacionado los componentes de nuestra infraestructura virtual. Algo bueno de esta herramienta es que está disponible de forma gratuita. Espero que este laboratorio les haya gustado. Si tienes dudas o alguna pregunta sobre este laboratorio, déjalo en los comentarios. Saludos.

Implementación de VMware Skyline Health Diagnostics

Hola a tod@s

En esta oportunidad vengo a mostrarles la integración de «VMware Skyline Health Diagnostics» (VSHD) con VMware vCenter. También veremos cómo generar los diagnostico para saber como esta la salud de nuestra infraestructura Virtual. VSHD es una plataforma de auto-diagnóstico que permitedetectar y solucionar problemas en la línea de productos de vSphere y vSAN.

Esta herramienta proporciona recomendaciones en forma de artículos tipo «Knowledge Base» o enlaces con procedimiento para solucionar los problemas. Los administradores de vSphere pueden utilizar esta herramienta para solucionar los problemas antes de ponerse en contacto con el servicio de soporte global de VMware.

© 2021 VMware

Beneficios:

  • Basado en síntomas, según VMware VSHD proporciona de manera automática enlaces a artículos con pasos para resolver el problema.
  • El auto-servicio mejora el tiempo para obtener recomendaciones que asistan en la resolución del problema.
  • Una rápida reparación que contribuya a recuperar la infraestructura de un fallo y garantice que la empresa funcione con una menor interrupción.

Para comenzar debemos de acceder el siguiente enlace donde podemos descargar los el archivo tipo OVA que permite gestionar la creación de la maquina virtual donde corren los servicios de VSHD.

https://my.vmware.com/group/vmware/get-download?downloadGroup=SKYLINE_HD_VSPHERE

Una vez autenticamos en el portal de VMware nos redirigirá al área donde podemos descargar en archivo con la extensión OVA.

A continuación les incluyo el proceso de crear la VM utilizando el template que bajamos en el formato OVA. Para ver el contenido, basta con hacer clic en el icono “+”.

Instalación de VSHD a través de VMware vCenter

Comenzamos utilizando el wizard de «Deploy OVF Template» donde añadimos el archivo de instalación oprimiendo «UPLOAD FILES»

Configuramos un nombre y seleccionamos en que carpeta se creara el objeto de la VM.

Seleccionamos el «Compute Cluster» y oprimimos «NEXT».

Validamos la información y oprimimos «NEXT».

Aceptamos el Acuerdo de Licenciamiento y oprimimos «NEXT».

Seleccionamos la ubicación de almacenamiento donde se creara la VM y oprimimos «NEXT».

Seleccionamos la red que utilizará la VM y oprimimos «NEXT».

En esta etapa se definen las propiedades únicas de la VM como el Hostname, la contraseña de las cuentas de administración y la información de la direcciones de IP.

Luego de validar la información procedemos a oprimir «FINISH» para completar el proceso

El proceso de instalación puede ser supervisado desde la pestaña de «Recent Tasks».

Un requisito opcional es la asociación de un nombre de DNS al IP utilizado en el proceso de instalación. En la siguiente pantalla podemos ver como se registra un nombre de DNS «FQDN» utilizando Powershell desde una consola de Windows

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

PS C:\Users\Administrator> Add-DnsServerResourceRecordA -Name vmware-shd -IPv4Address 192.168.5.70 -ZoneName zenprsolutions.local -CreatePtr -AllowUpdateAny

PS C:\Users\Administrator> Get-DnsServerResourceRecord -Name vmware-shd -ZoneName zenprsolutions.local

HostName                  RecordType Type       Timestamp            TimeToLive      RecordData
--------                  ---------- ----       ---------            ----------      ----------
vmware-shd                A          1          0                    01:00:00        192.168.5.70


PS C:\Users\Administrator>

Una vez culminado el proceso de instalación del archivo OVA podemos proceder a encender la VM que utilizaremos para el servicio de VSHD

Al encender la VM podemos ver la información del nombre de DNS y la dirección IP que configuramos previamente.

Con la dirección de IP podemos acceder el portal de administración de la aplicación utilizando las credenciales de:

  • Usuario: shd-admin
  • Contraseña: <previamente establecida>

El próximo paso es añadir la información del vCenter/ESXi y las credenciales.

Podemos validar que la información ingresada es correcta oprimiendo el botón de «CHECK CONNECTION».

Luego de validar la comunicación y las credenciales proseguimos a correr el diagnostico oprimiendo «RUN DIAGNOSTIC».

En esta pantalla seleccionamos los servidores de ESXi y vCenter que deseamos escanear y que tipo de pluging se ejecutará durante la recopilación de la información de diagnóstico

De manera opcional podemos configurar un «Tag» que puede ser utilizado para una fácil búsqueda de los diagnósticos. Luego podemos presionar «FINISH».

En esta próxima imagen podemos ver el progreso de la recopilación de la información de diagnóstico.

Adicionalmente desde la consola de manejo del vCenter podemos ver una tarea relacionada al proceso de recopilación.

Una vez terminado el proceso podemos ver el estado de la tarea presionando la opción de «SHOW SUMMARY».

En esta pantalla podemos observar que las tareas fueron ejecutadas sin problemas.

Presionando el botón de «SHOW REPORT» podemos ver los reportes generados.

Para ver el reporte podemos presionar el icono de ojo según se muestra en la siguiente imagen.

Aquí les muestro varios ejemplo del reporte generado donde podemos identificar varios problemas un la infraestructura utilizada como ejemplo.

Resumen

En este laboratorio instalamos y configuramos el «VMware Skyline Health Diagnostics» (VSHD) que permite a los administradores de vSphere utilizar esta herramienta para solucionar los problemas antes de ponerse en contacto con el soporte de VMware. Algo bueno de esta herramienta es que está disponible de forma gratuita. Espero que este laboratorio les haya gustado. Si tienes dudas o alguna pregunta sobre este laboratorio, déjalo en los comentarios. Saludos.

HomeLab: Cómo utilizar vCheck para la evaluación del estado de la infraestructura de vSphere

En esta oportunidad vengo a mostrarles cómo descargar y utilizar la herramienta vCheck que se utiliza para validar el estado de salud de la infraestructura de VMware vSphere. Esta herramienta es desarrollada por Alan Renouf como un mecanismo para identificar posibles fallas o errores de configuración en la implementación de vSphere. Para conocer más sobre esta herramienta utilizaré como referencia la documentación de vCheck:

This script picks on the key known issues and potential issues scripted as plugins for various technologies written as Powershell scripts and reports it all in one place so all you do in the morning is check your email.

vCheck Github Page

En esta área les presento que es validado al utilizar vCheck. Para ver el contenido, basta con hacer clic en el icono “+”.

¿Qué se comprueba en la versión de vSphere?

  • General Details
  • Number of Hosts
  • Number of VMs
  • Number of Templates
  • Number of Clusters
  • Number of Datastores
  • Number of Active VMs
  • Number of Inactive VMs
  • Number of DRS Migrations for the last days
  • Snapshots over x Days old
  • Datastores with less than x% free space
  • VMs created over the last x days
  • VMs removed over the last x days
  • VMs with No Tools
  • VMs with CD-Roms connected
  • VMs with Floppy Drives Connected
  • VMs with CPU ready over x%
  • VMs with over x amount of vCPUs
  • List of DRS Migrations
  • Hosts in Maintenance Mode
  • Hosts in disconnected state
  • NTP Server check for a given NTP Name
  • NTP Service check
  • vmkernel warning messages ov the last x days
  • VC Error Events over the last x days
  • VC Windows Event Log Errors for the last x days with VMware in the details
  • VC VMware Service details
  • VMs stored on datastores attached to only one host
  • VM active alerts
  • Cluster Active Alerts
  • If HA Cluster is set to use host datastore for swapfile, check the host has a swapfile location set
  • Host active Alerts
  • Dead SCSI Luns
  • VMs with over x amount of vCPUs
  • vSphere check: Slot Sizes
  • vSphere check: Outdated VM Hardware (Less than V7)
  • VMs in Inconsistent folders (the name of the folder is not the same as the name)
  • VMs with high CPU usage
  • Guest disk size check
  • Host over committing memory check
  • VM Swap and Ballooning
  • ESXi hosts without Lockdown enabled
  • ESXi hosts with unsupported mode enabled
  • General Capacity information based on CPU/MEM usage of the VMs
  • vSwitch free ports
  • Disk over commit check
  • Host configuration issues
  • VCB Garbage (left snapshots)
  • HA VM restarts and resets
  • Inaccessible VMs

Es importante mencionar que vCheck tiene soporte para otros productos como se presenta en la siguiente imagen:

Source: Virtu-Al.Net

Para comenzar en necesario descargar la herramienta desde el portal de Github donde es continuamente desarrollado. Para descargar vCheck directamente presione el siguiente enlace «Descargar». Una vez descarguemos el «script» es necesario descomprimir el mismo.

La primera vez que se ejecuta vCheck se iniciará el proceso de configuración, esta configuración permite crear una plantilla con la información que se utilizará para todas las futuras ejecuciones del programa. Para volver a modificar estos parámetros puede utilizar la opción <-config> de la siguiente manera:

[blabla@blabla ~]$ pwsh #Powershell core on Linux :)
PowerShell 7.1.3
Copyright (c) Microsoft Corporation.

https://aka.ms/powershell
Type 'help' to get help.

PS /home/blabla/vCheck> ./vCheck.ps1 -config

En esta área les presento el proceso de configuración de vCheck. Para ver el proceso de configuración, basta con hacer clic en el icono “+”.

Ejemplo del proceso de configuración

PS /home/blabla/vCheck> ./vCheck.ps1 -config
WARNING: 
GlobalVariables
# Report header [vCheck]: 
# Would you like the report displayed in the local browser once completed ? [$true]: 
# Display the report even if it is empty? [$true]: 
# Use the following item to define if an email report should be sent once completed [$false]: 
# Please Specify the SMTP server address (and optional port) [servername(:port)] [mysmtpserver.mydomain.local]: 
# Would you like to use SSL to send email? [$false]: 
# Please specify the email address who will send the vCheck report [me@mydomain.local]: 
# Please specify the email address(es) who will receive the vCheck report (separate multiple addresses with comma) [me@mydomain.local]: 
# Please specify the email address(es) who will be CCd to receive the vCheck report (separate multiple addresses with comma) []: 
# Please specify an email subject [$Server vCheck Report]: 
# Send the report by e-mail even if it is empty? [$true]: 
# If you would prefer the HTML file as an attachment then enable the following: [$false]: 
# Set the style template to use. [Clarity]: 
# Do you want to include plugin details in the report? [$true]: 
# List Enabled plugins first in Plugin Report? [$true]: 
# Set the following setting to $true to see how long each Plugin takes to run as part of the report [$true]: 
# Report on plugins that take longer than the following amount of seconds [30]: 
WARNING: 
Connection settings for vCenter
# Please Specify the address (and optional port) of the vCenter server to connect to [servername(:port)] [vcsa.local.lab]: vcenter-01v.pharmax.local
WARNING: 
General Information
# Set the number of days of DRS Migrations to report and count on [1]: 
# Set the number of days of Storage DRS Migrations to report and count on [1]: 
WARNING: 
Checking VI Events
# Set the number of days of VC Events to check for errors [1]: 
WARNING: 
Windows vCenter Error Event Logs
# Set the number of days of VC Events to check for errors [1]: 
# Set the number of days of VC Event Logs to check for warnings and errors [1]: 
WARNING: 
Windows vCenter Error Event Logs
# Set the number of days of VC Events to check for errors [1]: 
# Set the number of days of VC Event Logs to check for warnings and errors [1]: 
WARNING: 
vCenter Sessions Age
# Enter maximum vCenter session length in hours [48]: 
# Enter minimum vCenter session length in minutes (IdleMinutes) [10]: 
# Do not report on usernames that are defined here (regex) [DOMAIN\\user1|DOMAIN\\user2]: 
WARNING: 
vCenter License Report
# Display Eval licenses? [$true]: 
WARNING: 
HA configuration issues
# HA Configuration Issues, do not report on any Clusters that are defined here [Example_Cluster_*|Test_Cluster_*]: 
# HA should be set to ... [$true]: 
# HA host monitoring should be set to ... [$true]: 
# HA Admission Control should be set to ... [$true]: 
WARNING: 
HA VMs restarted
# HA VM restart day(s) number [5]: 
WARNING: 
DRS & SDRS Migrations
# Set the number of days of DRS Migrations to report and count on [1]: 
# Set the number of days of Storage DRS Migrations to report and count on [1]: 
WARNING: 
Cluster Slot Sizes
# Minimum number of slots available in a cluster [10]: 
WARNING: 
Datastore Consistency
# Do not report on any Datastores that are defined here (Datastore Consistency Plugin) [local*|datastore*]: 
WARNING: 
Clusters with DRS disabled
# Clusters with DRS Disabled, do not report on any Clusters that are defined here [VM1_*|VM2_*]: 
WARNING: 
QuickStats Capacity Planning
# Max CPU usage for non HA cluster [0.6]: 
# Max MEM usage for non HA cluster [0.6]: 
WARNING: 
s/vMotion Information
# Set the number of days to go back and check for s/vMotions [5]: 
# Include vMotions in report [$true;]: 
# Include Storage vMotions in report [$true;]: 
WARNING: 
DRS Rules
# Display VM affinity rules? [$true]: 
# Display VM anti-affinity rules? [$true]: 
# Display HOSTaffinity rules? [$true]: 
# Set DRS Rule name exception (regex) [ExcludeMe]: 
WARNING: 
Hosts Overcommit state
# Return results in GB or MB? [GB]: 
WARNING: 
Active Directory Authentication
# Show "OK" results? [$false]: 
# Expected Domain name [mydomain.local]: 
# Expected Admin Group [ESX Admins]: 
WARNING: 
NTP Name and Service
# The NTP server which should be set on your hosts (comma-separated) [pool.ntp.org,pool2.ntp.org]: 
WARNING: 
VMKernel Warnings
# Disabling displaying Google/KB links in order to have wider message column [$true]: 
WARNING: 
Syslog Name
# The Syslog server(s) which should be set on your hosts (comma-separated) [udp://syslogserver]: 
WARNING: 
Disk Max Total Latency
# Disk Max Total Latency Settings in Milliseconds [50]: 
# Disk Max Total Latency range to inspect (1-24) Hours [24]: 
WARNING: 
Lost Access to Volume
# Set the number of days of Lost Action Volume to report and count on [1]: 
WARNING: 
Check LUNS have the recommended number of paths
# Set the Recommended number of paths per LUN [2]: 
WARNING: 
ESXi Inode Exhaustion
# Set the ESXi filesystem free Inode threshold in percent [40]: 
WARNING: 
Host Profile Compliance
# Show detailed information in report [$true]: 
# Show compliant servers [$false]: 
WARNING: 
Hosts with Upcoming Certificate Expiration
# How many days to warn before cert expiration (Default 60) [60]: 
WARNING: 
Host Multipath Policy
# The Multipath Policy (PSP Plugin) your hosts should be configured to use [VMW_PSP_RR]: 
WARNING: 
Host Power Management Policy
# Which power management policy should your hosts use? For Balanced enter "dynamic" (this is the ESXi default policy), for High Performance enter "static", for Low power enter "low". [dynamic]: 
WARNING: 
Datastore Information
# Set the warning threshold for Datastore % Free Space [15]: 
# Do not report on any Datastores that are defined here (Datastore Free Space Plugin) [local]: 
WARNING: 
Number of VMs per Datastore
# Max number of VMs per Datastore [5]: 
# Exclude these datastores from report [ExcludeMe]: 
WARNING: 
Datastore OverAllocation
# Datastore OverAllocation % [50]: 
# Exclude these datastores from report []: 
WARNING: 
Datastores with Storage IO Control Disabled
# Do not report on any Datastores that are defined here (Storage IO Control disabled Plugin) [local]: 
WARNING: 
sDRS VM Behavior not Default
# Exclude these VMs from report []: 
WARNING: 
VSAN Datastore Capacity
# Set the warning threshold for VSAN Datastore % Free Space [15]: 
WARNING: 
VSAN Configuration Maximum Disk Group Per Host Report
# Percentage threshold to warn? [80]: 
WARNING: 
VSAN Configuration Maximum Magnetic Disks Per Disk Group Report
# Percentage threshold to warn? [50]: 
WARNING: 
VSAN Configuration Maximum Total Magnetic Disks In All Disk Groups Per Host Report
# Percentage threshold to warn? [50]: 
WARNING: 
VSAN Configuration Maximum Components Per Host Report
# Percentage threshold to warn? [50]: 
WARNING: 
VSAN Configuration Maximum Hosts Per VSAN Cluster Report
# Percentage threshold to warn? [45]: 
WARNING: 
VSAN Configuration Maximum VMs Per Host Report
# Percentage threshold to warn? [50]: 
WARNING: 
VSAN Configuration Maximum VMs Per VSAN Cluster Report
# Percentage threshold to warn? [50]: 
WARNING: 
Checking Standard vSwitch Ports Free
# vSwitch Port Left [5]: 
WARNING: 
Checking Distributed vSwitch Port Groups for Ports Free
# Distributed vSwitch PortGroup Ports Left [10]: 
WARNING: 
vSwitch Security
# Warn for AllowPromiscuous enabled? [$true]: 
# Warn for ForgedTransmits enabled? [$true]: 
# Warn for MacChanges enabled? [$true]: 
WARNING: 
Snapshot Information
# Set the warning threshold for snapshots in days old [14]: 
# Set snapshot name exception (regex) [ExcludeMe]: 
# Set snapshot description exception (regex) [ExcludeMe]: 
# Set snapshot creator exception (regex) [ExcludeMe]: 
WARNING: 
Map disk region event
    # Set the number of days to show Map disk region event for [5]: 
WARNING: 
Created or cloned VMs
# Set the number of days to show VMs created for [5]: 
WARNING: 
Removed VMs
# Set the number of days to show VMs removed for [5]: 
WARNING: 
VMs with over CPU Count
# Define the maximum amount of vCPUs your VMs are allowed [2]: 
WARNING: 
VMs restarted due to Guest OS Error
# HA VM reset day(s) number due to Guest OS error [5]: 
WARNING: 
Guests with less than X MB free
# VM Disk space left, set the amount you would like to report on MBFree [1024]: 
# VM Disk space left, set the amount you would like to report on MBDiskMinSize [1024]: 
WARNING: 
Checking VM Hardware Version
# Hardware Version to check for at least [8]: 
# Adding filter for dsvas, vShield appliances or any other vms that will remain on a lower HW version [vShield*|dsva*]: 
WARNING: 
VMs in inconsistent folders
# Specify which Datastore(s) to filter from report [local]: 
WARNING: 
No VM Tools
# Do not report on any VMs who are defined here (regex) []: 
WARNING: 
VM Tools Issues
# VM Tools Issues, do not report on any VMs who are defined here []: 
WARNING: 
Removable Media Connected
# VMs with removable media not to report on []: 
WARNING: 
Single Storage VMs
# Local Stored VMs, do not report on any VMs who are defined here [Template_*|VDI*]: 
# Local Datastores, do not report on any VMs within these datastores [Local|datastore1]: 
WARNING: 
VM CPU %RDY
# CPU ready on VMs should not exceed [10.0]: 
WARNING: 
VM CPU Usage
# VM Not to go over the following amount of CPU [75]: 
# VM CPU not allowed to go over the previous amount for how many days? [1]: 
WARNING: 
Backup Garbage
# Names used in backup product snapshots. Defaults include VCB, Veeam, NetBackup, and Commvault [VCB|Consolidate|veeam|NBU_SNAPSHOT|GX_BACKUP]: 
WARNING: 
Find VMs with thick or thin provisioned vmdk
# Report on disk formats that are not "thin" or "thick", which format is not allowed? [thick]: 
# Specify Datastores to filter from report [local]: 
WARNING: 
Virtual machines with incorrect OS configuration
# VMs with incorrect OS Configuration, do not report on any VMs who are defined here [VM1_*|VM2_*]: 
WARNING: 
Virtual machines with less hard disks than partitions
# Do not report on any VMs who are defined here (regex) [VM1_*|VM2_*]: 
WARNING: 
Powered Off VMs
# VMs not to report on [Windows7*]: 
#VmPathName not to report on [-backup-]: 
# Report VMs powered off over this many days [7]: 
WARNING: 
Unwanted virtual hardware found
# Find unwanted virtual hardware [VirtualUSBController|VirtualParallelPort|VirtualSerialPort]: 
WARNING: 
Mis-named virtual machines
# Misnamed VMs, do not report on any VMs who are defined here [VM1_*|VM2_*]: 
WARNING: 
VM Network State
# Only show NICs that are set to Connect at Startup [$true]: 
WARNING: 
Reset VMs
# Set the number of days to show reset VMs [1]: 
WARNING: 
Snapshot activity
# Set the number of days to show Snapshots for [5]: 
# User exception for Snapshot removed [s-veeam]: 
WARNING: 
VMs with CPU or Memory Reservations Configured
# Do not report on any VMs who are defined here []: 
WARNING: 
VM Logging
# The number of logs to keep for each VM [10]: 
# The size logs can reach before rotating to a new log (bytes) [1000000]: 
WARNING: 
VM Tools Not Up to Date
# Do not report on any VMs who are defined here (regex) []: 
# Maximum number of VMs shown [30]: 
WARNING: 
NonPersistent Disks
# Exclude all virtual machines from report [^DV-|^MLB-]: 
WARNING: 
VMs Memory/CPU Hot Add configuration
# Should CPU hot plug be enabled [$true]: 
# Should Memory hot add be enabled [$true]: 
WARNING: 
VM - Display all VMs with CBT unexpected status
# Should CBT be enabled (true/false) [$false]: 
WARNING: 
Site Recovery Manager - RPO Violation Report
# SRM RPO Violations: Set the number of minutes an RPO has exceeded to report on [240]: 
# SRM RPO Violations: Only look for RPO events on VMs with these names: (regex) []: 
# SRM RPO Violations: Report on unresolved RPO violations only? [$true]: 
Specify Credential
Please specify server credential
User: 
User: 
User: 
User: administrator@vsphere.local
Password for user administrator@vsphere.local: ********

Después de establecer la configuración inicial podemos comenzar a ejecutar el «script» principal de la herramienta utilizando el comando <vCheck.ps1 -Outputpath>. La opción «Outputpath» nos permite establecer dónde se guardará el reporte. Al ejecutar el comando nos pedirá las credenciales de acceso a vCenter. En mi caso utilicé la cuenta de administrador pero se recomienda utilizar una cuenta con privilegios de sólo lectura. «read-only».

PS /home/blabla/vCheck> ./vCheck.ps1 -Outputpath vcheck-reports/                                   

Specify Credential
Please specify server credential
User: administrator@vsphere.local #credenciales de vCenter
Password for user administrator@vsphere.local: ********

En esta área les presento el ejemplo del vCheck recopilando la información. Para ver el resultado de proceso, basta con hacer clic en el icono “+”.

vCheck Report Processing

Begin Plugin Processing                                                                                                                                                                                                                                                                             [21:54:30] ..start calculating Connection settings for vCenter by Alan Renouf v1.20 [1 of 116]                                                                                                                                                                                                      [21:54:52] ..finished calculating Connection settings for vCenter by Alan Renouf v1.20 [1 of 116]                                                                                                                                                                                                   [21:54:52] ..start calculating General Information by Alan Renouf, Frederic Martin v1.3 [2 of 116]                                                                                                                                                                                                  [21:55:04] ..finished calculating General Information by Alan Renouf, Frederic Martin v1.3 [2 of 116]                                                                                                                                                                                               [21:55:04] ..start calculating Checking VI Events by Alan Renouf v1.2 [3 of 116]                                                                                                                                                                                                                    [21:55:05] ..finished calculating Checking VI Events by Alan Renouf v1.2 [3 of 116]                                                                                                                                                                                                                 [21:55:05] ..start calculating VC Services by Alan Renouf v1.1 [4 of 116]                                                                                                                                                                                                                           [21:55:05] ..finished calculating VC Services by Alan Renouf v1.1 [4 of 116]                                                                                                                                                                                                                        [21:55:05] ..start calculating Windows vCenter Error Event Logs by Alan Renouf v1.2 [5 of 116]                                                                                                                                                                                                      [21:55:05] ..finished calculating Windows vCenter Error Event Logs by Alan Renouf v1.2 [5 of 116]                                                                                                                                                                                                   [21:55:05] ..start calculating Windows vCenter Error Event Logs by Alan Renouf v1.2 [6 of 116]                                                                                                                                                                                                      [21:55:05] ..finished calculating Windows vCenter Error Event Logs by Alan Renouf v1.2 [6 of 116]                                                                                                                                                                                                   [21:55:05] ..start calculating Windows vCenter Warning Event Logs by Alan Renouf v1.2 [7 of 116]                                                                                                                                                                                                    [21:55:05] ..finished calculating Windows vCenter Warning Event Logs by Alan Renouf v1.2 [7 of 116]                                                                                                                                                                                                 [21:55:05] ..start calculating vCenter Sessions Age by Rudolf Kleijwegt v1.2 [8 of 116]                                                                                                                                                                                                             [21:55:05] ..finished calculating vCenter Sessions Age by Rudolf Kleijwegt v1.2 [8 of 116]                                                                                                                                                                                                          [21:55:05] ..start calculating vCenter License Report by Justin Mercier, Bill Wall v1.2 [9 of 116]                                                                                                                                                                                                  [21:55:05] ..finished calculating vCenter License Report by Justin Mercier, Bill Wall v1.2 [9 of 116]                                                                                                                                                                                               [21:55:05] ..start calculating HA configuration issues by John Sneddon v1.1 [10 of 116]                                                                                                                                                                                                             [21:55:06] ..finished calculating HA configuration issues by John Sneddon v1.1 [10 of 116]                                                                                                                                                                                                          [21:55:06] ..start calculating HA VMs restarted by Alan Renouf v1.3 [11 of 116]                                                                                                                                                                                                                     [21:55:06] ..finished calculating HA VMs restarted by Alan Renouf v1.3 [11 of 116]                                                                                                                                                                                                                  [21:55:06] ..start calculating DRS & SDRS Migrations by Alan Renouf, Jonathan Medd v1.3 [12 of 116]                                                                                                                                                                                                 [21:55:06] ..finished calculating DRS & SDRS Migrations by Alan Renouf, Jonathan Medd v1.3 [12 of 116]                                                                                                                                                                                              [21:55:06] ..start calculating Cluster Slot Sizes by Alan Renouf v1.2 [13 of 116]                                                                                                                                                                                                                   [21:55:06] ..finished calculating Cluster Slot Sizes by Alan Renouf v1.2 [13 of 116]                                                                                                                                                                                                                [21:55:06] ..start calculating Cluster Configuration Issues by Alan Renouf v1.1 [14 of 116]                                                                                                                                                                                                         [21:55:06] ..finished calculating Cluster Configuration Issues by Alan Renouf v1.1 [14 of 116]                                                                                                                                                                                                      [21:55:06] ..start calculating Datastore Consistency by Robert Sexstone v1.6 [15 of 116]                                                                                                                                                                                                            [21:55:07] ..finished calculating Datastore Consistency by Robert Sexstone v1.6 [15 of 116]                                                                                                                                                                                                         [21:55:07] ..start calculating Clusters with DRS disabled by Robert van den Nieuwendijk v1.3 [16 of 116]                                                                                                                                                                                            [21:55:07] ..finished calculating Clusters with DRS disabled by Robert van den Nieuwendijk v1.3 [16 of 116]                                                                                                                                                                                         [21:55:07] ..start calculating Cluster Node version by Raphael Schitz, Frederic Martin v1.1 [17 of 116]                                                                                                                                                                                             [21:55:07] ..finished calculating Cluster Node version by Raphael Schitz, Frederic Martin v1.1 [17 of 116]                                                                                                                                                                                          [21:55:07] ..start calculating QuickStats Capacity Planning by Raphael Schitz, Frederic Martin v1.7 [18 of 116]                                                                                                                                                                                     [21:55:07] ..finished calculating QuickStats Capacity Planning by Raphael Schitz, Frederic Martin v1.7 [18 of 116]                                                                                                                                                                                  [21:55:07] ..start calculating s/vMotion Information by Alan Renouf v1.2 [19 of 116]                                                                                                                                                                                                                [21:55:08] ..finished calculating s/vMotion Information by Alan Renouf v1.2 [19 of 116]                                                                                                                                                                                                             [21:55:08] ..start calculating More RAM than free space on Datastore by Olivier TABUT, Bob Cote v1.2 [20 of 116]                                                                                                                                                                                    [21:55:08] ..finished calculating More RAM than free space on Datastore by Olivier TABUT, Bob Cote v1.2 [20 of 116]                                                                                                                                                                                 [21:55:08] ..start calculating DRS Rules by John Sneddon v1.2 [21 of 116]                                                                                                                                                                                                                           WARNING: Retrieving VM group to VMHost group DRS rules with Get-DrsRule is obsolete. Use Get-DrsVMHostRule cmdlet instead                                                                                                                                                                           [21:55:08] ..finished calculating DRS Rules by John Sneddon v1.2 [21 of 116]                                                                                                                                                                                                                        [21:55:08] ..start calculating Clusters Without Host Profile attached by John Sneddon v1.0 [22 of 116]                                                                                                                                                                                              [21:55:08] ..finished calculating Clusters Without Host Profile attached by John Sneddon v1.0 [22 of 116]                                                                                                                                                                                           [21:55:08] ..start calculating Hosts Overcommit state by Alan Renouf v1.4 [23 of 116]                                                                                                                                                                                                               [21:55:09] ..finished calculating Hosts Overcommit state by Alan Renouf v1.4 [23 of 116]                                                                                                                                                                                                            [21:55:09] ..start calculating Hosts Dead LUN Path by Alan Renouf, Frederic Martin v1.2 [24 of 116]                                                                                                                                                                                                 [21:55:09] ..finished calculating Hosts Dead LUN Path by Alan Renouf, Frederic Martin v1.2 [24 of 116]                                                                                                                                                                                              [21:55:09] ..start calculating Host Swapfile datastores by Alan Renouf v1.2 [25 of 116]                                                                                                                                                                                                             [21:55:09] ..finished calculating Host Swapfile datastores by Alan Renouf v1.2 [25 of 116]                                                                                                                                                                                                          [21:55:09] ..start calculating ESXi with Technical Support mode or ESXi Shell enabled by Alan Renouf v1.3 [26 of 116]                                                                                                                                                                               [21:55:09] ..finished calculating ESXi with Technical Support mode or ESXi Shell enabled by Alan Renouf v1.3 [26 of 116]                                                                                                                                                                            [21:55:09] ..start calculating ESXi hosts which do not have Lockdown mode enabled by Alan Renouf v1.1 [27 of 116]                                                                                                                                                                                   [21:55:09] ..finished calculating ESXi hosts which do not have Lockdown mode enabled by Alan Renouf v1.1 [27 of 116]                                                                                                                                                                                [21:55:09] ..start calculating Active Directory Authentication by Bill Wall, Dan Barr v1.2 [28 of 116]                                                                                                                                                                                              [21:55:10] ..finished calculating Active Directory Authentication by Bill Wall, Dan Barr v1.2 [28 of 116]                                                                                                                                                                                           [21:55:10] ..start calculating NTP Name and Service by Alan Renouf, Dan Barr v1.3 [29 of 116]                                                                                                                                                                                                       [21:55:10] ..finished calculating NTP Name and Service by Alan Renouf, Dan Barr v1.3 [29 of 116]                                                                                                                                                                                                    [21:55:10] ..start calculating Host Configuration Issues by Alan Renouf, Dan Barr v1.2 [30 of 116]                                                                                                                                                                                                  [21:55:10] ..finished calculating Host Configuration Issues by Alan Renouf, Dan Barr v1.2 [30 of 116]                                                                                                                                                                                               [21:55:10] ..start calculating Host Alarms by Alan Renouf, John Sneddon v1.3 [31 of 116]
[22:33:17] ..Displaying HTML results

Una vez el comando termina se generá un archivo <.html> con el resultado del reporte. Una de las capacidades que tiene vCheck es que puede ser programado «schedule» para que el reporte sea enviado por correo electrónico de forma recurrente. De manera, que puedes tener un reporte semanal de cómo esta la salud de tu virtual.

Estos son varios ejemplos de informes generados con vCheck.

Espero que esta herramienta les haya gustado. Si tienes dudas o alguna pregunta sobre este laboratorio, déjalo en los comentarios. Saludos.

HomeLab – Documentación Automatizada de Infraestructuras basadas en VMware

En este blog estaré hablando sobre como automatizar la creación de reportes de documentación de nuestra infraestructura virtual. Existen varias soluciones comerciales para generar este tipo de reporte pero estaré hablando de «As Built Report» una herramienta gratuita que utiliza powershell como base para generar los reportes.

La herramienta «As Built Report» utiliza los módulos de VMware.PowerCLI que explicamos anteriormente en nuestro blog. Si de sea saber un poco más sobre PowerCLI sigue este enlace aquí. Un dato importante sobre «As Built Report» es que no solo se utiliza para generar reporte sobre VMware también cuenta con soporte para los siguientes productos:

  • VMware vSphere, NSX & SRM
  • Cisco UCS Manager
  • Nutanix Prism Element
  • Pure Storage FlashArray
  • Rubrik
  • Zerto
  • Dell/EMC VxRail
  • Cohesity DataPlatform
  • etc…

Primero que todo para utilizar esta herramienta necesitamos validar los requisitorios que en general son:

  • Windows PowerShell 5.1 o mayor
  • VMware.PowerCLI

Para instalar el modulo de powershell de «As Built Report» utilizamos el comando <Install-Module> seguido del nombre del modulo AsBuiltReport.

PS /home/blabla> Install-Module -Name AsBuiltReport

Untrusted repository
You are installing the modules from an untrusted repository. If you trust this repository, change its InstallationPolicy value by running the Set-PSRepository cmdlet. Are you sure you want to install the modules from 'PSGallery'?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): A
PS /home/blabla>   

Un requisito opcional es generar los archivo de configuración que te permite establecer los parámetros de la organización que son utilizados para generar el reporte. Este proceso genera unos archivos tipo JSON que son utilizados como plantillas «templates» de forma que no tengas que llenar la información repetitiva cuando generes los reportes. Para ver el procedimiento de configuración, basta con hacer clic en el icono “+”.

AsBuiltReport JSON Configuration File

El «cmdlet» de powershell New-AsBuiltConfig te permite generar la plantilla que utilizaremos como base del reporte. Esta plantilla establece los parámetros no técnicos del reporte.

PS C:\WINDOWS\system32> New-AsBuiltConfig

---------------------------------------------
 <        As Built Report Information      >
---------------------------------------------
Enter the name of the Author for this As Built Report [jocolon]: Jonathan Colon
---------------------------------------------
 <           Company Information           >
---------------------------------------------
Would you like to enter Company information for the As Built Report? (y/n): y
Enter the Full Company Name: Zen PR Solutions
Enter the Company Short Name: ZENPR
Enter the Company Contact: Jonathan Colon
Enter the Company Email Address: jcolonf@zenprsolutions.com
Enter the Company Phone: XXX-XXX-XXXX
Enter the Company Address: Puerto Rico
---------------------------------------------
 <            Email Configuration          >
---------------------------------------------
Would you like to enter SMTP configuration? (y/n): n
----------------------------------------------
 <       As Built Report Configuration      >
----------------------------------------------
Would you like to save the As Built Report configuration file? (y/n): y
Enter a name for the As Built Report configuration file [AsBuiltReport]: HomeLab VMware Report
Enter the path to save the As Built Report configuration file [C:\Users\jocolon\AsBuiltReport]:

Name                           Value
----                           -----
Email                          {Port, Credentials, Server, To...}
Company                        {FullName, Contact, Phone, Email...}
UserFolder                     {Path}
Report                         {Author}


PS C:\WINDOWS\system32>

Una vez culminado el proceso se creará un archivo tipo JSON con el siguiente contenido:

{
    "Email":  {
                  "Port":  null,
                  "Credentials":  null,
                  "Server":  null,
                  "To":  null,
                  "From":  null,
                  "UseSSL":  null,
                  "Body":  null
              },
    "Company":  {
                    "FullName":  "Zen PR Solutions",
                    "Contact":  "Jonathan Colon",
                    "Phone":  "787-203-2790",
                    "Email":  "jcolonf@zenprsolutions.com",
                    "ShortName":  "ZENPR",
                    "Address":  "Puerto Rico"
                },
    "UserFolder":  {
                       "Path":  "C:\\Users\\jocolon\\AsBuiltReport"
                   },
    "Report":  {
                   "Author":  "Jonathan Colon"
               }
}

El comando New-AsBuiltReportConfig permite establecer los parámetros técnico del reporte como el nivel y tipo de información «verbose level».

PS C:\WINDOWS\system32> New-AsBuiltReportConfig VMware.vSphere -FolderPath C:\Users\jocolon\AsBuiltReport\ -Filename ReportConfig

Una vez culminado el proceso se creará un archivo tipo JSON con el siguiente contenido:

{
    "Report": {
        "Name": "VMware vSphere As Built Report",
        "Version": "1.0",
        "Status": "Released"
    },
    "Options": {
        "ShowLicenseKeys": false,
        "ShowVMSnapshots": true
    },
    "InfoLevel": {
        "_comment_": "0 = Disabled, 1 = Summary, 2 = Informative, 3 = Detailed, 4 = Adv Detailed, 5 = Comprehensive",
        "vCenter": 3,
        "Cluster": 3,
        "ResourcePool": 3,
        "VMHost": 3,
        "Network": 3,
        "vSAN": 3,
        "Datastore": 3,
        "DSCluster": 3,
        "VM": 2,
        "VUM": 3
    },
    "HealthCheck": {
        "vCenter": {
            "Mail": true,
            "Licensing": true
        },
        "Cluster": {
            "HAEnabled": true,
            "HAAdmissionControl": true,
            "HostFailureResponse": true,
            "HostMonitoring": true,
            "DatastoreOnPDL": true,
            "DatastoreOnAPD": true,
            "APDTimeOut": true,
            "vmMonitoring": true,
            "DRSEnabled": true,
            "DRSAutomationLevelFullyAuto": true,
            "PredictiveDRS": false,
            "DRSVMHostRules": true,
            "DRSRules": true,
            "vSANEnabled": false,
            "EVCEnabled": true,
            "VUMCompliance": true
        },
        "VMHost": {
            "ConnectionState": true,
            "HyperThreading": true,
            "ScratchLocation": true,
            "IPv6": true,
            "UpTimeDays": true,
            "Licensing": true,
            "SSH": true,
            "ESXiShell": true,
            "NTP": true,
            "StorageAdapter": true,
            "NetworkAdapter": true,
            "LockdownMode": true,
            "VUMCompliance": true
        },
        "vSAN": {},
        "Datastore": {
            "CapacityUtilization": true
        },
        "DSCluster": {
            "CapacityUtilization": true,
            "SDRSAutomationLevelFullyAuto": true
        },
        "VM": {
            "PowerState": true,
            "ConnectionState": true,
            "CpuHotAdd": true,
            "CpuHotRemove": true,
            "MemoryHotAdd": true,
            "ChangeBlockTracking": true,
            "SpbmPolicyCompliance": true,
            "VMToolsStatus": true,
            "VMSnapshots": true
        }
    }
}

Por ultimo, generamos el reporte utilizando el comando <New-AsBuiltReport> con los parámetros de información del vCenter y haciendo referencia a los archivo JSON que generamos como plantillas.

PS C:\WINDOWS\system32> New-AsBuiltReport -Report VMware.vSphere -Target vcenter-01v.zenprsolutions.local -Username administrator@vsphere.local -Password XXXXX -Format Word,Text,HTML -OutputFolderPath 'C:\Users\jocolon\OneDrive\Desktop\' -EnableHealthCheck -AsBuiltConfigFilePath 'HomeLab VMware Report.json' -ReportConfigFilePath 'ReportConfig.json'

VMware vSphere As Built Report 'VMware vSphere As Built Report' has been saved to 'C:\Users\jocolon\OneDrive\Desktop\'.
PS C:\WINDOWS\system32>

Una vez termine el proceso de recopilar la información desde el vCenter el comando graba el reporte según se le especificó con el parámetro de <OutputFolderPath>. En la siguiente imagen se muestra el reporte generado en el formato de <Word,Text,HTML> según se le especificó.

A continuación les muestro varias imágenes que muestran el resultado del reporte generado para el vCenter <vcenter-01v>:

Resumen

En este laboratorio vimos que fácil es generar documentación sobre nuestra infraestructura virtual utilizando herramientas disponibles gratuitamente. «As Built Report» es una herramienta robusta que nos facilita el proceso manual de crear o mantener actualizada nuestra documentación.

Cómo instalar y utilizar VMware PowerCLI en ArchLinux

En este blog les estaré mostrando como instalar la herramienta de PowerCLI específicamente en el sistema operativo de ArchLinux. Archlinux es una distribución avanzada de Linux que se caracteriza por ser simple y ligera. Adicionalmente le ofrece al usuario total control en el manejo y la modificación de todo lo relacionado al sistema.

Ahora bien, para instalar y utilizar PowerCLI tenemos que instalar primero Powershell. PowerShell es una herramienta de automatización y configuración multi-plataforma. PowerShell tiene un gran número de comandos orientados a la administración del sistema. Pero al mismo tiempo, PowerShell es un lenguaje de programación completo que permite escribir programas funcionales. Existen muchas herramientas de administración basadas en Powershell de diferentes manufactureros como por ejemplo:

  • VMware PowerCLI
  • Cisco UCS PowerTool
  • NetApp PowerShell Toolkit
  • DELL\EMC Unity-Powershell 
  • Amazon AWS Tools for PowerShell

Como pueden ver Powershell es una herramienta altamente desarrollada por los manufactureros de infraestructura y es ofrecida como un método para la automatización o la rápida implementación de infraestructura basada en «software». En mi caso particular Powershell es mi segundo lenguaje de programación preferido siendo Python el primero en mí lista.

Lo primero que tenemos que hacer es instalar Powershell y para esto utilizaré el programa «yay» que es una herramienta en Archlinux para instalar programas desde el repositorio no oficial «Arch User Repository». Con el comando <yay -S powershell-bin> podemos instalar el programa de Powershell al sistema. Para ver el procedimiento de instalación, basta con hacer clic en el icono «+».

yay -S powershell-bin

[rebelinux@blabla ~]$ yay -S powershell-bin
:: Checking for conflicts...
:: Checking for inner conflicts...
[Aur:1]  powershell-bin-7.1.3-1

:: Downloaded PKGBUILD (1/1): powershell-bin
  1 powershell-bin                           (Installed) (Build Files Exist)
==> Diffs to show?
==> [N]one [A]ll [Ab]ort [I]nstalled [No]tInstalled or (1 2 3, 1-3, ^4)
==> 
:: (1/1) Parsing SRCINFO: powershell-bin
==> Making package: powershell-bin 7.1.3-1 (Sat 05 Jun 2021 08:08:03 PM AST)
==> Retrieving sources...
  -> Downloading powershell_7.1.3-1.ubuntu.18.04_amd64.deb...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   647  100   647    0     0   1473      0 --:--:-- --:--:-- --:--:--  1473
100 65.1M  100 65.1M    0     0  1182k      0  0:00:56  0:00:56 --:--:-- 1201k
==> Validating source files with sha256sums...
    powershell_7.1.3-1.ubuntu.18.04_amd64.deb ... Passed
==> Making package: powershell-bin 7.1.3-1 (Sat 05 Jun 2021 08:09:00 PM AST)
==> Checking runtime dependencies...
==> Checking buildtime dependencies...
==> Retrieving sources...
  -> Found powershell_7.1.3-1.ubuntu.18.04_amd64.deb
==> Validating source files with sha256sums...
    powershell_7.1.3-1.ubuntu.18.04_amd64.deb ... Passed
==> Removing existing $srcdir/ directory...
==> Extracting sources...
  -> Extracting powershell_7.1.3-1.ubuntu.18.04_amd64.deb with bsdtar
==> Sources are ready.
==> Making package: powershell-bin 7.1.3-1 (Sat 05 Jun 2021 08:09:01 PM AST)
==> Checking runtime dependencies...
==> Checking buildtime dependencies...
==> WARNING: Using existing $srcdir/ tree
==> Entering fakeroot environment...
==> Starting package()...
==> Tidying install...
  -> Removing libtool files...
  -> Purging unwanted files...
  -> Compressing man and info pages...
==> Checking for packaging issues...
==> Creating package "powershell-bin"...
  -> Generating .PKGINFO file...
  -> Generating .BUILDINFO file...
  -> Adding install file...
  -> Generating .MTREE file...
  -> Compressing package...
==> Leaving fakeroot environment.
==> Finished making: powershell-bin 7.1.3-1 (Sat 05 Jun 2021 08:09:05 PM AST)
==> Cleaning up...
[sudo] password for rebelinux: 
loading packages...
warning: powershell-bin-7.1.3-1 is up to date -- reinstalling
resolving dependencies...
looking for conflicting packages...

Packages (1) powershell-bin-7.1.3-1

Total Installed Size:  170.21 MiB
Net Upgrade Size:        0.00 MiB

:: Proceed with installation? [Y/n] 
(1/1) checking keys in keyring                                                                                                                  [########################################################################################] 100%
(1/1) checking package integrity                                                                                                                [########################################################################################] 100%
(1/1) loading package files                                                                                                                     [########################################################################################] 100%
(1/1) checking for file conflicts                                                                                                               [########################################################################################] 100%
(1/1) checking available disk space                                                                                                             [########################################################################################] 100%
:: Processing package changes...
(1/1) reinstalling powershell-bin                                                                                                               [########################################################################################] 100%
:: Running post-transaction hooks...
(1/1) Arming ConditionNeedsUpdate...
[rebelinux@blabla ~]$

Existe otro método de instalación más avanzado que permite también instalar Powershell desde linea de comando. Les dejo aquí los comando necesarios. Para ver el procedimiento de instalación, basta con hacer clic en el icono «+».

Instalación manual de Powershell

git clone https://aur.archlinux.org/powershell-bin.git
cd powershell-bin
makepkg -si

Para acceder la aplicación de Powershell se utiliza el comando <pwsh> que permite acceder el interpretador. Desde el interpretador podemos correr los comando de Powershell que son comúnmente llamados «Cmdlets».

[rebelinux@blabla ~]$ pwsh
PowerShell 7.1.3
Copyright (c) Microsoft Corporation.

https://aka.ms/powershell
Type 'help' to get help.

PS /home/rebelinux> 

El próximo paso para correr PowerCLI es instalar su modulo utilizando el comando <Install-Module -name VMware.PowerCLI> desde el interpretador de Powershell.

Header text

Header text

PS /home/blabla> Install-Module -name VMware.PowerCLI  

Untrusted repository
You are installing the modules from an untrusted repository. If you trust this repository, change its InstallationPolicy value by running the Set-PSRepository cmdlet. Are you sure you want to install the modules from 'PSGallery'?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): A
PS /home/blabla>  

Para conectarnos al vCenter utilzamos el «cmdlet» <Connect-VIServer> especificando la dirección IP o el nombre DNS del servidor.

PS /home/blabla> Connect-VIServer vcenter-01v.zenprsolutions.local -Verbose -Username administrator@vsphere.local -Password XXXXXX

Name                            Port User
----                            ---- ----
vcenter-01v.zenprsolutions.local 443  VSPHERE.LOCAL\Administrator

PS /home/blabla> 

Utilizaré un comando básico para hacer pruebas de conexión contra el vCenter. En esta prueba utilizare el comando <Get-Cluster> para verificar los cluster actualmente creados.

PS /home/blabla> Get-Cluster

Name                           HAEnabled  HAFailover DrsEnabled DrsAutomationLevel
                                          Level
----                           ---------  ---------- ---------- ------------------
RegionA01-EDGE                 False      1          True       FullyAutomated
RegionHQ-MGMT                  False      1          True       FullyAutomated
RegionA01-COMP                 True       1          True       FullyAutomated

PS /home/blabla> 

Otro ejemplo básico es utilizar el comando <Get-Datastore> para validar que «Datastore» existen actualmente en el «DataCenter» virtual. En el resultado del comando se puede ver el espacio libre y utilizado en los «datastore» configurados en el «DataCenter».

PS /home/blabla> Get-Datastore

Name                               FreeSpaceGB      CapacityGB
----                               -----------      ----------
SSD-VM-HIGH-CAPACITY-PERF-KN           173.708         894.000
NVME-VM-HIGH-PERF-01                     0.017         476.750
SSD-VM-HIGH-CAPACITY-PERF-MK           251.536         931.250
HDD-VM-MED-PERF-02                   2,232.268       3,726.000
HDD-VM-MED-PERF-01                   2,509.246       3,726.000
esx-00f                                110.801         111.750
NVME-VFLASH-01                           0.840         238.250
HDD-VM-ISO-LOW-PERF                    606.936         931.250
NFS_SNAP_OFFLOAD                        29.258          50.000
SRM_PlaceHolder                         97.170          99.750
SERVER_DATASTORE                        92.444          99.750

PS /home/blabla> 

Hasta Luego Amigos!

Snapshots Nativos en NFS con vSphere 7 Update 2

La versión vSphere 7.0 U2 ofrece la posibilidad de utilizar snapshots nativos cuando se utiliza el protocolo NFS como mecanismo de acceso. Como se describe en el blog de VMware:

Mejoras en NFS

NFS required a clone to be created first for a newly created VM and the subsequent ones could be offloaded to the array. With the release of vSphere 7.0 U2, we have enabled NFS array snapshots of full, non-cloned VMs to not use redo logs but instead use the snapshot technology of the NFS array in order to provide better snapshot performance. The improvement here will remove the requirement/limitation of creating a clone and enables the first snapshot also to be offloaded to the array.

What’s New in vSphere 7 Update 2 Core Storage

En este blog explico la configuración necesaria para probar esta nueva funcionalidad. Para empezar debemos validar los requisitos para poder implementar esta solución. Según el portal de documentación de VMware los requisitorios son los siguientes:

  • Compruebe que la matriz NAS admite la operación de clonación rápida de archivos con el programa VAAI NAS.
  • En su host ESXi, instale el plug-in NAS específico del proveedor que soporta la clonación rápida de archivos con VAAI.
  • Siga las recomendaciones de su proveedor de almacenamiento NAS para configurar los ajustes necesarios tanto en la matriz NAS como en ESXi.

La configuración de NFS se realizará en NetApp Ontap mediante el complemento «NetApp NFS Plug-in for VMware VAAI», que recientemente ha añadido soporte nativo para la descarga de snapshot en NFS.

Note: El plug-in puede descargarse desde el portal de soporte de NetApp en el siguiente enlace «NetApp Support».

Una vez que estemos en el portal de soporte de NetApp debemos descargar la versión 2.0 del plugin como se muestra en la siguiente imagen. Para instalar el plugin debemos descomprimir el archivo descargado y renombrar el archivo dentro de la carpeta llamada vib20 con la extensión .vib al nuevo nombre NetAppNasPlugin.vib.

En el siguiente paso utilicé el Ontap Tools de NetApp para instalar el plugin, pero también se puede instalar utilizando VMware Lifecycle Manager.

Para instalar el plugin vaya a [ONTAP tools => Settings => NFS VAAI tools] y en la sección «Existing version:» pulse «BROWSE» para seleccionar donde está almacenado el archivo «NetAppNasPlugin.vib». Una vez localizado el archivo pulse «UPLOAD» para cargar e instalar el plugin.

En este paso podemos ver cómo instalar el plugin en los servidores ESXi pulsando el botón «INSTALL».

La siguiente imagen muestra que la instalación del plugin fue exitosa. Una ventaja de la nueva versión del plugin es que no es necesario reiniciar el servidor ESXi.

Una vez instalado el plugin procederemos a validar que Ontap tiene soporte para las características de VMware vStorage APIs for Array Integration (VAAI) en el ambiente de NFS. Esto se puede verificar con el comando <vserver nfs show -fields vstorage>. Como puede ver la función vStorage está actualmente deshabilitada en el SVM llamado NFS. Para habilitar la función vStorage utilice el comando <vserver nfs modify -vstorage enabled>.

OnPrem-HQ::> vserver nfs show -fields vstorage 
vserver vstorage 
------- -------- 
NFS     disabled  

OnPrem-HQ::> vserver nfs modify -vstorage enabled -vserver NFS 

OnPrem-HQ::> vserver nfs show -fields vstorage                 
vserver vstorage 
------- -------- 
NFS     enabled  

OnPrem-HQ::> 

El siguiente requisito para poder utilizar la descarga nativa de snapshot es la creación de un ajuste avanzado en la configuración de la VM llamado <snapshot.alwaysAllowNative>. Para añadir este valor hay que ir a las propiedades de la VM y luego a [VM Options => Advanced => EDIT CONFIGURATION].

La siguiente imagen muestra el valor de la variable <snapshot.alwaysAllowNative> que según la documentación de VMware debe tener un valor igual a «TRUE». Puede utilizar el siguiente enlace como referencia «VMware Documentation»

Ahora empiezo a hacer pruebas para validar que los snapshots nativo funcionan en Ontap. Primero crearé un snapshot con la función <snapshot.alwaysAllowNative> establecida en «FALSE». Luego haré cambios en la VM para poder medir la velocidad de eliminación y aplicación de los cambios del snapshot al disco base. En el ejemplo que se muestra a continuación se utilizó el comando <New-Snapshot> en PowerCLI para crear una snapshot de la VM llamada RocaWeb

PS /home/rebelinux> get-vm -Name RocaWeb | New-Snapshot -Name PRE_Native_Array_Snapshot | Format-Table -Wrap -AutoSize  
                                                                                                                                                                                                                                               Name                      Description PowerState                                                                                                                                                                                               ----                      ----------- ----------                                                                                                                                                                                               PRE_Native_Array_Snapshot             PoweredOff                                                                                                                                                                                                                                                                                                                                                                                                                                              
PS /home/rebelinux> 

En este paso se ha copiado un archivo de 10GB para hacer crecer el snapshot y así poder medir la rapidez con la que se aplican los cambios al disco base cuando se elimina el snapshot. En este ejemplo el archivo «RocaWeb_2-000001-delta.vmdk» representa el delta donde se guardan los cambios del snapshot. Esto representa un snapshot tradicional de VMware.

[root@comp-01a:/vmfs/volumes/55ab62ec-2abeb31b/RocaWeb] ls -alh
total 35180596
drwxr-xr-x    2 root     root        4.0K May 31 23:40 .
drwxr-xr-x    7 root     root        4.0K May 31 19:02 ..
-rw-------    1 root     root      276.0K May 31 23:40 RocaWeb-Snapshot15.vmsn
-rw-------    1 root     root        4.0G May 31 23:40 RocaWeb-a03f2017.vswp
-rw-------    1 root     root      264.5K May 31 23:40 RocaWeb.nvram
-rw-------    1 root     root         394 May 31 23:40 RocaWeb.vmsd
-rwxr-xr-x    1 root     root        3.4K May 31 23:40 RocaWeb.vmx
-rw-------    1 root     root       10.0G May 31 23:51 RocaWeb_2-000001-delta.vmdk #Delta (VMFS Based Snapshot)
-rw-------    1 root     root         301 May 31 23:40 RocaWeb_2-000001.vmdk
-rw-------    1 root     root      500.0G May 31 23:37 RocaWeb_2-flat.vmdk
-rw-------    1 root     root         631 May 31 23:37 RocaWeb_2.vmdk
[root@comp-01a:/vmfs/volumes/55ab62ec-2abeb31b/RocaWeb]

La siguiente imagen muestra el tiempo que se tardó en aplicar los cambios del snapshot al disco base cuando se eliminó el snapshot. En resumen, la operación tardó 9 minutos en total utilizando snapshots tradicionales de VMware.

Note: El simulador de Ontap fue utilizado para el laboratorio.

En este último ejemplo también se utilizó el comando <New-Snapshot> para crear el snapshot pero con la opción <snapshot.alwaysAllowNative> establecida en «TRUE». De esta manera podemos probar el uso de «Native Snapshot Offload» en NFS. Aquí también se copió un archivo de 10GB a la VM para hacer crecer el snapshot, de modo que podamos medir la rapidez con la que se aplican los cambios al disco base cuando se elimina el snapshot.

PS /home/rebelinux> get-vm -Name RocaWeb | New-Snapshot -Name POST_Native_Array_Snapshot | Format-Table -Wrap -AutoSize
                                                                                                                                                                                                                                               Name                       Description PowerState                                                                                                                                                                                              ----                       ----------- ----------                                                                                                                                                                                              POST_Native_Array_Snapshot             PoweredOff                                                                                                                                                                                                                                                                                                                                                                                                                                             
PS /home/rebelinux> 

Aquí podemos ver que no hay ningún archivo «-delta.vmdk» pero hay un archivo llamado «RocaWeb_2-000001-flat.vmdk» con el mismo tamaño de 500GB que el archivo «RocaWeb_2-flat.vmdk». Esto nos permite confirmar que la función «NFS Native Snapshot Offload» está habilitada en Ontap.

[root@comp-01a:/vmfs/volumes/55ab62ec-2abeb31b/RocaWeb] ls -alh
total 49419672
drwxr-xr-x    2 root     root        4.0K Jun  1 00:07 .
drwxr-xr-x    7 root     root        4.0K May 31 19:02 ..
-rw-------    1 root     root      276.0K Jun  1 00:07 RocaWeb-Snapshot16.vmsn
-rw-------    1 root     root        4.0G Jun  1 00:07 RocaWeb-a03f2017.vswp
-rw-------    1 root     root      264.5K Jun  1 00:07 RocaWeb.nvram
-rw-------    1 root     root         393 Jun  1 00:07 RocaWeb.vmsd
-rwxr-xr-x    1 root     root        3.4K Jun  1 00:07 RocaWeb.vmx
-rw-------    1 root     root      500.0G Jun  1 00:09 RocaWeb_2-000001-flat.vmdk #No Delta (Array Based Snapshot OffLoad)
-rw-------    1 root     root         650 Jun  1 00:07 RocaWeb_2-000001.vmdk
-rw-------    1 root     root      500.0G Jun  1 00:03 RocaWeb_2-flat.vmdk
-rw-------    1 root     root         631 Jun  1 00:07 RocaWeb_2.vmdk
[root@comp-01a:/vmfs/volumes/55ab62ec-2abeb31b/RocaWeb] 

La siguiente imagen muestra el tiempo que se tardó en aplicar los cambios del snapshot al disco base cuando se eliminó el snapshot utilizando «NFS Native Snapshot Offload». En resumen, se puede ver que la aplicación de los cambios del snapshot al disco base no tardó nada en terminar.

Resumen

Las operaciones con «NFS native snapshot offload» son tan rápidas porque ONTAP hace referencia a la metadata cuando crea una copia Snapshot, en lugar de copiar bloques de datos, que es la razón por la que las copias Snapshot son tan eficientes. Al hacerlo, se elimina el tiempo de búsqueda en el que incurren otros sistemas para localizar los bloques a copiar, así como el coste de realizar la propia copia.¨