A blogban leírtak a szerzők saját véleménye, és nem a munkáltatójuké.

Automatikus datastore létrehozás ESXi-n PowerCLI segítségével

A Virtualizációs technológiák és alkalmazásaik választható tárgyunkban most volt nemrég az ESXi-s gyakorlat, amire meg kellett oldani, hogy minden hallgatónak legyen egy saját ESXi homokozója. Bár a napokban megjelent új VMware Workstation 7-ben már támogatott az ESX 4.0 futtatása, nekünk még csak 6-os volt a laborban, így Dani megoldotta egyik este, hogy PXE boot segítségével hálózatról lehessen ESXi-t bootolni [amit majd szépen le is dokumentál itt, igaz?;-]. Minden hallgató 2 gépet kapott, az egyiken elindította az ESXi 4-et, a másikon pedig kapott két virtuális gépet: egy linuxos iSCSI target-et, ami a tárhelyet fogja szolgáltatni, és egy windowsos virtuális gépet benne a vSphere Client menedzsment eszközzel. Írtunk még egy rövid segédletet, hogy ebben a környezetben mit kell beállítani, hogy üzemképes legyen az ESXi. A tapasztalat viszont az volt, hogy mivel a hallgatók nagy része most látott először iSCSI-t és szerver oldali virtualizációs rendszert, ezért ez kb. egy óráig tartott, és gyakorlat végén jutottunk el oda, hogy akkor most lehetne virtuális gépet létrehozni:-). A következő alkalomra automatizálni kellett az előkészítő lépéseket. Ehhez a következők kellenek:

  • VMKernel interfész létrehozása,
  • Szoftveres iSCSI engedélyezése,
  • iSCSI target csatlakoztatása,
  • Kiajánlott lemezek felderítése,
  • A csatlakoztatott lemezen VMFS-es datastore létrehozása.

A VMware több féle automatizálási megoldást nyújt, van távoli parancssor, Perl-es, PowerShell-es, Web Service-s API is. A VMware PowerShell cmdlet-eit úgyis ki akartam próbálni, ez tehát pont jó alkalomnak tűnt:-) A következőt kell tenni:

  • PowerShell feltelepítése a windowsos virtuális gépre (Windows 7 előtti Windowsokon),
  • PowerCLI letöltése és telepítése,
  • PowerCLI elindít, a Get-VICommand segítségével ismerkedni a parancssokkal.

Akkor lássuk, miből élünk:) A VMKernel létrehozását elég gyorsan megoldottam, erre a New-VMHostNetworkAdapter cmdlet való. Az iSCSI már kicsit bonyolultabbnak nézett ki, de szerencsére a New-Datastore man oldalán van pont egy ilyen példa. Ezek alapján könnyű volt összerakni a szkriptet:

# Name:   Prepare-ESXi.ps1
# Author: Micskei Zoltán
#            Scripts based on the example in man New-Datastrore
# Date:   2009. 10. 27.
# Desc:   Configures iSCSI initiator and adds a datastore to a PXE-booted ESXi host in IE224 lab
# Param:  1 - IP of the ESX host
#         2 - IP of the iSCSI target to connect
 
param(
 [string] $esxIP = $(throw "Supply the IP address of the ESX host"),
 [string] $iscsiServer = $(throw "Supply the IP address of the iSCSI target")
)
 
# Constants
$ISCSI_HBA = "vmhba34"
$ISCSI_PORT = 3260
 
Write-Output "Setting up $esxIP.."
 
# connect to the ESX host
connect-viserver $esxIP
 
# get the default virtual switch (assumes there is only one)
$vSwitch = Get-VirtualSwitch
 
# modify this according to your environment
$vmKernel_IP = $esxIP.Replace(".100.", ".120.")
 
# create a nem VMKernel
New-VMHostNetworkAdapter -VMHost $esxIP -PortGroup "VMKernel Port" -VirtualSwitch $vSwitch -IP $vmKernel_IP -SubnetMask 255.255.0.0
 
# get the necessary views
$h = Get-VMHost
$hostView = Get-View -VIObject $h
$storageSystem = Get-View $hostView.configManager.storageSystem
 
#Enable the software iSCSI controller.
$storageSystem.UpdateSoftwareInternetScsiEnabled($true)
 
#Add an iSCSI server for a dynamic discovery.
$target = New-Object VMware.Vim.HostInternetScsiHBASendTarget
$target.address = $iscsiServer
$target.port = $ISCSI_PORT
$storageSystem.AddInternetScsiSendTargets($ISCSI_HBA, $target)
 
#Scan for iSCSI devices.
$storageSystem.RescanHba($ISCSI_HBA)
 
# Get lunPath and create a new storage.
# Select the lun where the vendor is IET (iSCSI Enterprise Target, the Linux-based iSCSI target used currently)
$lunList = Get-ScsiLun -VMHost $h
#HACK: the proper name is 'IET     ' (yes, with the spaces:( )
$lun = ($lunList | ? { $_.Vendor -like "IET*" })
 
# create new datastore
New-Datastore -Vmfs -VMHost $h -Path $lun.CanonicalName -Name iScsi
 
Write-Host "Datastrore created"

A szkript természetesen a mi környezetünkre (hálózat, iSCSI beállításai) illeszkedik, de szerintem könnyen lehet máshova is adaptálni. Pár dolog, amire érdemes figyelni:

  • Jelenlegi formájában a csatlakozáshoz szükséges felhasználónevet és jelszót interaktívan kéri be,
  • A New-Datastore leírásában a példában van pár elírás (pl. CannonicalName -> CanonicalName, ( előtti felesleges szóközök), lásd itt,
  • A LUN kiválasztásánál sehogy se sikerült az IET sztringre szűrni, persze, mert a pontos név IET és utána még 5 szóköz, ezért használok -like operátort a kiválasztásban:)
  • FIGYELEM: az ingyenes ESXi esetén csak olvasási műveleteket lehet végrehajtani távolról, tehát ott az alábbi szkript nem működik.

Alapvetően meglepően gyorsan ment a szkript elkészítése, és a segítéségével tényleg percek alatt össze lehet hozni egy működő teszt ESXi rendszert. Érdemes még nézegetni a PowerCLI csapat blogját, jó kis példák vannak ott is.

Micskei Zoltán

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>