Массовое отключение хранилищ от хостов VMware

On 18/06/2014, in Vmware, by Алексей Волобуев

При замене СХД понадобилось отключить датасторы (хранилища) от хостов в VMware. Хостов 8, хранилищ 30. Делать это руками не хотелось. Пришлось изучать PowerCLI.
Если кому необходимо теории, то можно почитать тут

Решил я все скриптом

 

  1. #########################################################################################################
  2. #
  3. #  Скрипт отключает датасторы у выбранных хостов. Делает Unmount, потом Detach
  4. # Переменная $hosts — список хостов
  5. # Переменная $storage — список отключаемых датасторов/хранилищ.
  6. #
  7. #########################################################################################################
  8. # Подключаем оснастку, если ее нет
  9. if ( (Get-PSSnapin -Name VMware.VimAutomation.Core -ErrorAction SilentlyContinue) -eq $null )
  10. {
  11.     add-pssnapin VMware.*
  12. }
  13. else
  14. {
  15.     Write-Host «Snap in already added.»
  16. }
  17. #################################################
  18. # Убираем ругань на самоподписанный сертификат
  19. Set-powercliconfiguration -InvalidCertificateAction Ignore -Confirm:$false | out-null
  20. #################################################
  21. #vCenter Server
  22. $vCenter = «bs-vc»
  23. #I Если не подключены к vCentr, то подключаемся
  24. if ($global:DefaultVIServers.Count -lt 1)
  25. {
  26.     Connect-VIServer $vCenter
  27. }
  28. # получаем список ESX-серверов
  29. #$hosts = (Get-Content D:\PowerCLI\1unmountdatastoresservers.txt)
  30. # Список всех хостов
  31. # $hosts = Get-VMhost
  32. # Выборочный список хостов
  33. $hosts = «bs-esx07», «bs-esx08»
  34. # Список Datastores, которые требуется отключить
  35. #$storage = (Get-Content D:\PowerCLI\storage.txt)
  36. $storage = «SAS_ThinClient_A_1», «SAS_ThinClient_A_2», «SAS_ThinClient_B_1», «SAS_ThinClient_B_2»
  37. # Проверяем на каждом хосте
  38. foreach($esx in $hosts)
  39. {
  40.     Write-host «Servers: » $esx
  41.     # Подключаемся к хосту для выполнения команды esxcli
  42.     $esxcli = Get-ESXCLI -VMHost $esx
  43.     #Hosts Datastores
  44.     $hostds=Get-Datastore -VMhost $esx
  45.     #Проверяем наличие нужных датасторов на хосте
  46.     foreach ($st in $storage)
  47.     {
  48.         foreach($hds in $hostds)
  49.         {
  50.          #Write-Host «Проверяемый датастор: » $hds
  51.          if ($st -eq $hds)
  52.          {
  53.             Write-Host
  54.             Write-Host «Server: » $esx «have mapped datastores » $hds
  55.             Write-Host
  56.             # Проверяем включен ли SIOC, если да, то отключаем.
  57.             $SIOC = Get-Datastore -Name $hds
  58.             if ($SIOC.StorageIOControlEnabled -eq $True)
  59.             {
  60.                 Set-Datastore $hds -StorageIOControlEnabled $false
  61.                 # Ждем, когда завершится отключение SIOC
  62.                 Start-Sleep -s 10
  63.             }
  64.             $lun = $esxcli.storage.vmfs.extent.list() | Where-Object {$_.VolumeName -eq $hds}
  65.             $device_id=$lun.DeviceName
  66.             #Unmount Datastore
  67.             Write-Host «Unmount datastore » $hds » from » $esx
  68.             $esxcli.storage.filesystem.unmount($true,$hds)
  69.             #Detach Datastore
  70.             Write-Host «Detach datastore » $hds » from » $esx
  71.             $esxcli.storage.core.device.set($device_id,»IsOffline»,$null,»off»)
  72.          }
  73.         }
  74.     }# Конец проверки наличие нужных датасторов на хосте
  75. } # Конец проверки на каждом хосте

 

Скрипт прокоментирован, поэтому я думаю проблем быть не должно. После применения скрипта необходимо сделать
Большую помощь при разборе команд esxcli мне оказал Колесников Матвей. За что большое ему спасибо.

Сам скрипт можно скачать по ссылке

P.S. Продолжение смотрите здесь

Tagged with:  

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *