Voici le script que j’utilise en ce moment pour les mises en maintenance des hôtes AHV des clusters Nutanix avec un menu à choix multiples :


Disconnect-NTNXCluster *

#Choisir le cluster 
$ClusterNut = Read-Host "Entrer the Ip or DNS name of your Nutanix Cluster to manage"

Connect-NTNXCluster $ClusterNut -AcceptInvalidSSLCerts -ForcedConnection
$Clusterlist = $null


for () {

# récupère la liste des noms d'hôtes du cluster
$Clusterlist = Get-NTNXHost

    #défini integer à 0
    $i=0

    $ClusterName = (Get-NTNXCluster).name

    Write-Host "Vous avez selectionné le cluster $($(Get-NTNXCluster).name)
    "

    # Créer un menu : Pour chaque hôte du cluster ajouter 1 à i et afficher le nom d'hôte associé
    write-host "0 : Sortir du script"
    foreach ($ht in $Clusterlist) {
        $i++
        Write-Host "$i : $($ht.Name) : état  $($ht.hypervisorState) : Hyperviseur $($ht.hypervisorAddress) : IPMI $($ht.ipmiAddress) " 
        }

    do {
    $Menu = Read-Host "Choisir le numéro d'hôte"
    #juste affichage : tant que le chiffre indiqué n'est pas un nombre d'un hôte possible on boucle ici
    if (0..$Clusterlist.Count -notcontains $Menu) {Write-Host "Merci d'indiquer le numéro correspond au noeud à mettre en maintenance" -ForegroundColor Red}
    }

    #tant que le chiffre indiqué n'est pas un nombre d'un hôte possible on boucle ici
    while (0..$Clusterlist.Count -notcontains $Menu)

    #Conserve le nom de l'hôte dans la variable ChoiceMenu le -1 sert car le count debute à 0.
    if ($menu -eq 0) {
                        #Déco
                        Disconnect-NTNXCluster *
                        exit
                      } 
    $ChoiceMenu = ($Clusterlist).name[$menu-1]
    write-host "Vous avez choisi le $ChoiceMenu"

    Write-Host -ForegroundColor Green "Choisir l'option 1 pour Mettre en Maintenance et l'option 2 pour remettre en ligne" 
    $Menu1 = Read-Host 

    if ($Menu1 -eq 1) {
        $uuid = (Get-NTNXHost | where {$_.name -like $ChoiceMenu}).uuid
        
        write-host "La tache de mise en maintenance de l'hôte $ChoiceMenu est en cours"
        Start-NTNXMaintenanceMode -Hostid $uuid -EvacuationOption LIVE_MIGRATE
        sleep 3 
        
    }

    if ($Menu1 -eq 2) {
    write-host "La tache remise en prod de l'hôte $ChoiceMenu est en cours"
    Stop-NTNXMaintenanceMode -Hostid $uuid
    sleep 3
    }
    
}

Vous avez configuré votre sauvegarde locale, mais votre collège Citrix préféré supprime et provisionne sans cesse de nouvelles VDI persistantes :

Je passe la partie authentification, mais voici quelques lignes pour ajouter automatiquement toutes nouvelles machines à la sauvegarde existante (avec le nom LocalBackup) et supprimer de la sauvegarde les machines qui ne seraient plus disponibles.

 

Détermine la liste des VMs qui ne sont pas des CVM et qui ne sont pas
# dans un ProtectionDomain, c'est l'endroit idéal pour exclure des machines
# qui ne seraient pas à ajouter comme les CVM ou d'autres VMs si votre
# convention de nommage permet de les identifier facilement.
$UnProtectedVMs =  (get-ntnxvm | where {$_.vmName -notlike "*CVM*"} | where {$_.ProtectionDomainName -like $null}).vmname

#Ajout les machines non protégées à la sauvegarde
foreach ($VM in $UnProtectedVMs){
    echo "VM à protéger : $VM"
    Add-NTNXProtectionDomainVM -name LocalBackup -names $VM -Consistencygroupname $VM
}

#Determine la liste des VMs protégées dans le dernier snapshot
$ProtectedVMs = (Get-NTNXProtectionDomainSnapshot | Sort-Object Snapshotid | select -last 1).ConsistencyGroups

#determine la liste des VMs hébergées sur le cluster Nutanix
$VMList = (get-ntnxvm | where {$_.vmName -notlike "*CVM*"}).vmname

#Compare la liste complète des VMs à la liste des VMS protégées et conserve les protégées qui n'existent plus
$VMstoRemove = (Compare-Object -DifferenceObject $VMList -ReferenceObject $Protectedvms | where {$_.Sideindicator -like "<="}).InputObject

#Supprime les $VMtoRemove du ProtectionDomain
foreach ($VMtoRemove in $VMstoRemove){
    Remove-NTNXProtectionDomainVM -name LocalBackup -input $VMtoRemove
    echo "VM à supprimer :" $VMtoRemove
}

Depuis l’ESXi qui héberge la VM :

net-stats -l

noter le PortNum Correspondant à la VM qui nous intéresse dans notre exemple 67108873.

Pour avoir les statistiques nombre de packet et nombre de drop en émission et réception :

vsish -e get /net/portsets/vSwitch2/ports/67108873

Résumé des réceptions :

vsish -e get /net/portsets/vSwitch2/ports/67108873/vmxnet3/rxSummary

Résumé émissions :

vsish -e get /net/portsets/vSwitch2/ports/67108873/vmxnet3/txSummary

Toutes ces commandes peuvent aider à surveiller les drops de remplissage de « ring buffer » :

Large packet loss at the guest operating system level on the VMXNET3 vNIC in ESXi (2039495) 

Comme j’en faisais la démonstration à un collègue la semaine dernière, en dehors des gros bundle d’update HP ou Dell, voici ce que je fais pour mettre à jour un driver réseau.

Liste des cartes :

esxcfg-nics –l

côté HBA, noter le type de driver mptspi, lpfc par exemple

esxcfg-scsidevs -a

Driver version/firmware réseau :


ethtool -i vmnic0
driver: ixgbe
version: 3.21.4iov
firmware-version: 0x800007f4, 17.0.12
bus-info: 0000:01:00.1

ou

esxcli network nic get -n vmnic0

pour les HBA :

vmkload_mod -s HBADriver | grep Version

_______________________________________

ensuite il faut déterminer le driver recommandé

vmkchdev -l | grep vmnic0
0000:01:00.0 8086:10fb 1028:1f72 vmkernel vmnic0

ici :

  • VID = 8086
  • DID = 10fb
  • SVID = 1028
  • SDID = 1f72

Il est indispensable de vérifier sur le site de VMware : VMware Compatibility Guide

 

Choisir sa version :

 

télécharger le driver :

Intégration du pilote dans VMware Update Manager :

Depuis Update Manager administration > patch Repository > Import Patches :

 

décompresser le zip précédemment télécharger, pour VUM c’est le zip offiline bundle qui nous intéresse :

 

Créer la baseline et l’attacher aux serveurs pour mise à jour