Preparar hosts para VCF con PowerCLI

Ya sea para crear un nuevo ambiente de VMware Cloud Foundation desde cero con un Management Domain como para crear Workload Domains adicionales los hosts deben estar preparados con varias características. Sin embargo, cuando estamos lidiando con varios hosts usualmente es mas rápido scriptear la preparación, el siguiente código de PowerCLI hace precisamente eso.

Basado en la documentación oficial el script de PowerCLI realiza:

  • Agrega la licencia de ESXi – Opcional
  • Configura el hostname correctamente
  • Actualiza ESXi a la imagen seleccionada – Opcional
  • Habilita SSH
  • Configura servidores NTP
  • Agrega el Tag de VLAN correcto para las redes de Management y VM Network
  • Habilita la mitigación de vulnerabilidades por hyperthreading
  • Configura el dominio de Active Directory – Opcional
  • Reinicia el Host en Modo de Mantenimiento
  • NOTA: Se asume que la información de DNS es suministrada por el servidor DHCP o de manera manual al configurar la red

Espero les sea de utilidad

<# Escrito por Jose Ramirez, jose (at) joseml.com
Este script se utiliza para preparar los ESXis para
VMware Cloud Foundation para Management y Workload Domains
Utiliza de argumento un archivo con la lista de ESXs
Realiza lo siguiente:
* Agrega la licencia de ESXi - Opcional
* Configura el hostname correctamente
* Actualiza ESXi a la imagen seleccionada
* Habilita SSH
* Configura servidores NTP
* Agrega el Tag de VLAN correcto para las redes de Management y VM Network
* Habilita la mitigación de vulnerabilidades por hyperthreading
* Configura el dominio de Active Directory - Opcional
* Reinicia el Host en Modo de Mantenimiento
#>
$CsvFile = $args[0]
Write-Host 'Reading input from' $CsvFile
$Creds = Get-Credential
$NtpServers = Read-Host 'NTP Server (comma separated values)'
$vlanId = Read-Host 'Management VLAN ID'
$licenseKey = Read-Host 'ESXi License Key (XXXXX-XXXXX-XXXXX-XXXXX-XXXXX)'  # Licencia opcional, se aplica en linea 32
$Domain = Read-Host 'Active Directory Domain to join the ESXis'     # Unirse a un dominio es opcional pero altamente recomendado
$ADGroup = Read-Host 'ActiveDirectory Group to get Admin rights'    # si no desea utilizar este segmento comente las lineas 22-25
$JoinDomainUser = Read-Host 'Join Domain Username (no slashes)'     # y la línea 54
$JoinDomainPass = Read-Host 'Password'

$esxs = Get-Content $CsvFile
foreach($esx in $esxs){
    Connect-VIServer -Server $esx -Credential $Creds
    $FQDN = $esx
    $vmhost = Get-VMHost $esx
    $vmhost | Set-VMHost -LicenseKey $licenseKey
    $esxcli = Get-EsxCli -VMHost $vmhost -V2
    $argsHostName = $esxcli.system.hostname.set.CreateArgs()
    $argsHostName.fqdn = $FQDN

    $esxcli.system.hostname.get.Invoke()
    $esxcli.system.hostname.set.Invoke($argsHostName)
    $esxcli.system.hostname.get.Invoke()

##### Esta sección se puede utilizar para actualizar ESXi
#    $argsUpdate = $esxcli.software.profile.update.createargs()
#    $argsUpdate.depot = "https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml"
#    $argsUpdate.profile = "ESXi-7.0U2c-18426014-no-tools" # Configurar la imagen correcta
#    $esxcli.software.profile.update.invoke($argsUpdate)
}

Get-VMHostService | Where-Object {$_.key -eq "TSM-SSH" } | Start-VMHostService | Set-VMHostService -policy "on"
Add-VMHostNtpServer -NtpServer $NtpServers.Split(",")[0]
Add-VMHostNtpServer -NtpServer $NtpServers.Split(",")[1]
Get-VMHostService | Where-Object {$_.key -eq "ntpd" } | Start-VMHostService | Set-VMHostService -policy "on"
Get-VirtualPortGroup -Name "VM Network" | Set-VirtualPortGroup -vlanid $vlanId
Get-VMHost | Get-AdvancedSetting -Name VMkernel.Boot.hyperthreadingMitigation | Set-AdvancedSetting -Value True -Confirm:$false
Get-VMHost | Get-AdvancedSetting -Name Config.HostAgent.plugins.hostsvc.esxAdminsGroup | Set-AdvancedSetting -Value $ADGroup -Confirm:$false
Get-VMHostAuthentication | Set-VMHostAuthentication -JoinDomain -Domain $Domain -User $JoinDomainUser -Password $JoinDomainPass -Confirm:$false
Get-VMHost | Set-VMHost -State Maintenance
Get-VMHost | Restart-VMHost -RunAsync -Confirm:$false

Deja un comentario

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