Zautomatyzowana walka z utrapieniami – deploy hordy plików ovf.

Prawdopodobnie niejednokrotnie zdarzało się wam, że pod drzwiami pojawiło się stadko przybyszów z innego uniwersum i bynajmniej nie chodzi tutaj o kadrowe czy księgowe. Nasz zwierz jest mniej wysublimowany. Cechy szczególne to zmęczenie odciskające się cieniem pod głęboko osadzonymi oczami, przetłuszczona sierść, rozbiegany wzrok i niezwykły język podobny nieco do afrykańskiego kélé. Nigdy nie wiesz czy na ciebie patrzy i nigdy nie rozumiesz o czym do ciebie mówi. Brzmi znajomo? Oczywiście, spotykamy ich na co dzień… Programiści.  Oni zawsze mają dziwne potrzeby – od azbestowych wafelków z kozim mlekiem do jedzenia po przygotowanie ASAP 37 maszyn wirtualnych do testów. Jako że tym pierwszym problemem zazwyczaj zajmują się rodzice z którymi mieszkają, tak niestety z tym drugim przychodzą do nas.

Jako, że my – ludzie, zeszliśmy z drzew klika milionów lat wcześniej niż programiści, dało nam to druzgoczącą przewagę. Dzięki mileniom ewolucji potrafimy wymyślać narzędzia które nam ułatwiają pracę, a nie tylko przychodzić pod drzwi błagając o łaskę. Tak więc aby spełnić życzenia naszych… braci mniejszych postanowiłem użyć mojej nowej zabawki, którą jest PowerCLI 😉

Tak więc musimy przygotować skrypt który będzie deploy’ował stado maszyn wirtualnych. Można to zrobić oczywiście przy użyciu szablonów, ale środowisko z którym aktualnie pracuje takiego komfortu niestety niema. Postanowiłem użyć do tego celu plików ovf, które umieszczę w odpowiednim Resource Pool’u.

Początek skryptu taki jak zwykle, łączymy się i pytamy usera o niezbędne informacje:

$user=”root”;
$pass=”cmentarna polka”

Connect-VIServer -Server 192.168.93.129 -User $user -Password $pass

Write-Host -NoNewline -ForegroundColor Yellow „Wildcard for name of VM: ”
$vm_name = Read-Host
Write-Host -NoNewline -ForegroundColor Yellow „How many VM: ”
$vm_amount = Read-Host
Write-Host -NoNewline -ForegroundColor Yellow „ResourcePool name: ”
$rp_name = Read-Host
Write-Host -NoNewline -ForegroundColor Yellow „ResourcePool location (host/cluster ip/name): ”
$rp_location = Read-Host

Write-Host „”

Powyżej wszytko powinno być oczywiste. Teraz będziemy przy pomocy komendy New-ResourcePool towrzyć pulę zasobow o nezwie zdefiniowanej w zmiennej $rp_name i lokalizacji $rp_location. Chciałbym tutaj zwrócić uwagę na parameter okreslający lokalizacje Resource Pool’a. Po pierwsze jest on obowiązkowy, po drugie może to być zarówno nazwa/ip serwera lub nazwa klastra. Trzeba go koniecznie podać inaczej pula zasobów nie zostanie stworzona. Przy okazji sprawdzimy czy już taki RP przypadkiem nie istnieje dorzucając od razu parameter -ErrorAction SilentlyContinue żeby skrycik wyglądał ładnie i nie rzygał błędami.

if ( Get-ResourcePool -Name $rp_name -ErrorAction SilentlyContinue ) {
Write-Host ResourcePool $rp_name exist, skipping.
} else {
Write-Host  -NoNewline Creating ResourcePool $rp_name ;
if ( New-ResourcePool -Name $rp_name -Location $rp_location ) {
Write-Host ‚ OK’ -ForegroundColor Green;
} else {
Write-Host ‚ Error’ -ForegroundColor Red;;
}
}

Następnie gwoźdź programu czyli deplojowańsko. Wykonuje się je przy pomocy funkcji Import-VApp. Musimy podać miejsce gdzie trzymamy plik ovf, docelowy serwer, datastore i nazwę. Dodatkowo sprawdzimy czy już takich maszyn nie ma tam.

For ($i=0;$i –lt $vm_amount;$i++) {
if( Get-VM -Name $vm_name$i -ErrorAction SilentlyContinue ) {
Write-Host VM $vm_name$i exist, skipping.
} else {
Write-Host -NoNewline Creating vm $vm_name$i ;
if ( Import-VApp -Source „C:\tmp\test-vm\test-vm.ovf” -VMHost 192.168.93.129 -Datastore datastore1 -Name $vm_name$i -Location $rp_name -ErrorAction SilentlyContinue ) {
Write-Host ‚ OK’ -ForegroundColor Green;
} else {
Write-Host ‚ Error’ -ForegroundColor Red;
}
}
}

Skrypt ma proste zadanie, które wykonuje i chyba o to tutaj chodzi… Oczywiście można go ulepszyć na milion sposobów. Dodać listę maszyn w pliku CSV, dorzucić bardziej zaawansowane sprawdzanie każdego kroku. W ogóle można go usunąć i napisać od początku, inaczej. W ogóle można napisać od początku całe vSphere. Tylko po co 🙂

About the author

Bloger i niezależny konsultant z wieloletnim doświadczeniem w branży IT. Specjalizujący się w wirtualizacji i cloud computingu. Posiada tytuły MCP, MCTS, VCP oraz VMware vExpert.

Leave a Reply