dimanche 29 novembre 2015

[PowerCLI] Détacher proprement des datastores d'un ensemble d'hôtes

Voici ici un cas de figure que l'on rencontre souvent au quotidien: détâcher des datastores d'un ou plusieurs hôtes ESXi (vSphere 5 ou 6).

Cette action soit plus facile qu'en vSphere 4.x, où seul l'action de "Unmount" est disponible dans la GUI (cf KB de VMware)

Afin de supprimer définitivement (et proprement pour éviter les APD) un datastore présenté à un ensemble d'hôtes ESXi (à un cluster par exemple), il y a 2 possibilités.

1- Dans le client vSphere 

- Aller sur Home / Inventory / Datastores and Datastore Clusters

 

 

 

- Dans la partie gauche, sélectionner le datastore que l'on souhaite retirer, le sélectionner, et faire un clic droit "Unmount" dessus.








- Aller sur Home / Inventory / Host and Clusters, puis à passer sur chaque HBA de chaque hôte à laquelle la LUN est présentée et à la détacher ainsi.















Il est maintenant possible de déprésenter les LUNs par l'équipe stockage sans risque d'APD.

 

2- Avec un script PowerCLI

Ce script permet de détacher en une action plusieurs Datastores d'un ensemble d'hôtes ESXi.
L'idée est ici de lister dans un fichier txt les datastores que l'on souhaite déprésenter.

- Comme dans l'exemple ci dessus, il faut "Unmout" à la main les datastores en question.
- Executer le script PS suivant

# Charge le snapin VMware avec les cmdlets associées pour Powershell et ignore les erreurs si le snapin est déjà chargé
Add-PSSnapin VMware.VimAutomation.Core  -ErrorAction "SilentlyContinue"
#Connexion au vCenter
connect-viserver MonvCenter

#Création de la fonction pour détacher le datastore
Function Detach-Datastore {
[CmdletBinding()]
Param (
[Parameter(ValueFromPipeline=$true)]
 $Datastore
      )
 Process {
           if (-not $Datastore) {
 Write-Host "No Datastore defined as input"
 Exit
 }
Foreach ($ds in $Datastore) {
$hostviewDSDiskName = $ds.ExtensionData.Info.vmfs.extent[0].Diskname
if ($ds.ExtensionData.Host) {
$attachedHosts = $ds.ExtensionData.Host
Foreach ($VMHost in $attachedHosts) {
$hostview = Get-View $VMHost.Key
$StorageSys = Get-View $HostView.ConfigManager.StorageSystem
$devices = $StorageSys.StorageDeviceInfo.ScsiLun
Foreach ($device in $devices) {
if ($device.canonicalName -eq $hostviewDSDiskName) {
$LunUUID = $Device.Uuid
Write-Host "Détachement de la LUN $($Device.CanonicalName) de l' hôte $($hostview.Name)..."
$StorageSys.DetachScsiLun($LunUUID);
}
}
}
}
}
}
}
#Variable qui contient l'ensemble des datastores
$dss = Get-Content "Chemin_du_fichier.txt"
#Action de détachement des datastores listés de l'ensemble des hôtes à qui ils sont présentés
foreach ($ds in $dss)
{
Get-Datastore -Name $ds | Detach-Datastore
}
Vous pouvez surveiller sur le client vSphere dans "Recent tasks" passer les unes après les autres les taches de détachement des datastores.
Il est maintenant possible de déprésenter les LUNs par l'équipe stockage sans risque d'APD.

0 commentaires :

Enregistrer un commentaire