0
Items : 0
Subtotal : 0,00 
View CartCheck Out
0
Items : 0
Subtotal : 0,00 
View CartCheck Out

Zautomatyzowana walka z utrapieniami – zamontowane ISO.

Dziś w naszym kramiku trochę o wychowywaniu, trochę o karach cielesnych, ale przede wszystkim o utrapieniach. Bo jak powszechnie wiadomo jest kilka takich rzeczy, których można nauczyć np. psa, małpę, konia a administratora już niekoniecznie. Nie mówię tutaj o oddawaniu moczu w przypadkowych pomieszczeniach, czy upartym żuciu szafek podczas naszej nieobecności – choć podejrzewam, że klika takich okazów, w świecie IT dało by się jeszcze gdzieś odnaleźć…

Dzisiaj chodzi mi przede wszystkim o występującą u niektórych, chroniczną potrzebę pozostawiania po sobie, niewyobrażalnego, przerażającego, obłędnego syfu. Jak potrafię wychować administratorów, że jak zapalam światło u nich w piwnicy to zaczynają się ślinić, bo wiedzą, że nadszedł czas jedzenia. Tak z utrzymaniem porządku bywa trudniej. Próbowałem wszystkiego – prośba, publiczne poniżenie czy chłosta. Wciąż zapominają. Postanowiłem ominąć w takim razie czynnik ludzki i pozbyć się problemu przez automatyzację walki z niektórymi utrapieniami.


Na pewno zdążyło się Wam, że mimo próśb i gróźb wasi koledzy uparcie pozostawiają podłączone do maszyn wirtualnych obrazy ISO. Niby to nic wielkiego, ale na mnie działa to jak porzucone Majto-skarpeto-spodniowe UFO na kobietę… Dla wyjaśnienia – „Majto-skarpeto-spodniowe UFO” jest bytem odzieżowym stworzonym poprzez zdjęcie jednym ruchem majtek, skarpetek i spodni i pozostawieniu w jednym miejscu na podłodze. Wracające jednak do meritum. Rozdrażniony kolejnym odkrytym, zapominanym przez wszystkich ISO które latami pewnie było pod montowane do VM postanowiłem napisać prosty skrypt w PowerCLI który w końcu zakończy ta farsę.

Generalnie opiera się on na naszych poprzednich próbach z PowerCLI z artykułu „VMware vSphere 5.0 PowerCLI„.  Tak więc na początku analogicznie do wspomnianego artykuły robimy połączenie do vCenter/ESX.

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

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

Następnie tworzymy sobie zmienną w którą bedziemy pakować wszytkie dane nizbedne do stowrzenia raportu. Nazwiemy ją, niech pomyślę, coś metaforycznego, coś co poruszy serca tłumów – $report 😀

$report= @()

Następnie będziemy pobierać dane każdej maszyny wirtualnej i sprawdzać, czy ma ona pod montowany pod wirtualny cdorm obraz ISO.

foreach ($vm in Get-VM) {
$cdrom= @()
if (Get-CDDrive -VM $vm) {
$cdrom = (
Get-CDDrive -VM $vm | where {($_.ConnectionState.Connected -eq $True -or $_.ConnectionState.StartConnected -eq $True) -and  $_.ISOPath -like „*.ISO*” } | %{$_.ISOPath})
}
if($cdrom -ne $null){
$report += ($vm.Name + ”   ” + $cdrom + „”)
}
}

W powyższym skrypcie używamy pętli foreach dzięki której wykonujemy niezbędne porównania dla każdej maszyny wirtualnej w środowisku. Wyniki porównań będziemy trzymać w zmiennej $cdrom. Zarówno instrukcja warunkowa if jak i pętla foreach ma standardową konstrukcję podobną jak w C++/PHP, wiec nie ma się czego tu uczyć. Instrukcją warunkową, poprzez Get-CDDrive -VM $vm sprawdzamy cz dana VM ma podłączony ISO. Analogicznie jak w poprzednim artykule sprawdzamy poprzez użycie where i warunków równości (-eq) i podobieństwa (-like) na parametrach ConnectionState.Connected, ConnectionState.StartConnected, ISOPath. Nowe elementy to -or, oraz -and. Dzięki nim możemy dodawać kolnej warunki do where i logicznie je sprawdzać. Kolejną nowością jest %{$_.ISOPath}, które jest po prostu okresleniem jaki element będzie zwracany i będzie pakowany do zmiennej $cdrom. Zwracam ISOPath ponieważ w raporcie chciałbym miec nazwę VM oraz ścierzkę do obrzu ISO który jest do niej zamontowany, oczywiście można to dowolne modyfikować do swoich wyuzdanych potrzeb. Kolejnym krokiem jest wrzucenie danych – nazwy i adresu obrazu ISO do zmiennej $report. Realizujemy to poprzez instrukcję warunkową sprawdzającą czy wykryto ISO czy nie – jak tak to dopisujemy, jak nie to nie. Następnie drukujemy nasz raport na ekranie:

echo $report | Out-String;

A potem odłączamy zapomniane ISO:

foreach ($vm in Get-VM) {
if (Get-CDDrive -VM $vm) {
Get-CDDrive -VM $vm | Set-CDDrive -NoMedia -Confirm:$false | Out-Null
}
}

Powyższy fragment powinien być już jasny. Jedynie należałoby wspomnieć coś o Set-CDDrive -NoMedia -Confirm:$false. Instrukcja ta pozwala nam na zmiane z zamintowanego Iso na NoMedia. Czyli w skrócie – sprząta cały bałagan. Do pełni szczęścia dorzuciłbym pytanie do użytkownika czy aby na pewno odłączyć ISO. Potrzebujemy więc sposobu by je zadać, jak również sposobu by uzyskać odpowiedzi. Pytanie można zadać oczywiście przez echo… ale my zaszalejemy:

Write-Host -NoNewline -ForegroundColor Yellow „Deattach ISO from above VM’s? [Y/N] ”
$action = Read-Host

Komenda Write-Host -NoNewline -ForegroundColor Yellow to takie lepsze echo które pozwala nam kolorować tekst. Jako, że żyjemy w erze Post-MTV i nic nie może być jednokolorowe komenda ta staje się naszym wybawieniem. Kolorów jest kilka, uprzedzając pytania, niema różowego chłopcy! 😉 Druga linia zawiera instrukcję Read-Host pozwalającą nam uzyskać od użytkownika odpowiedz na zadane pytanie.

Mamy już wszystkie elementy układanki, tak więc czas na kompletny skrypt:

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

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

$report= @()

foreach ($vm in Get-VM) {
$cdrom= @()
if (Get-CDDrive -VM $vm) {
$cdrom = (
Get-CDDrive -VM $vm | where {($_.ConnectionState.Connected -eq $True -or $_.ConnectionState.StartConnected -eq $True) -and  $_.ISOPath -like „*.ISO*” } | %{$_.ISOPath})
}
if($cdrom -ne $null){
$report += ($vm.Name + ”   ” + $cdrom + „”)
}
}

Write-Host „”

if ($report -ne $null) {

Write-Host -ForegroundColor Yellow „VM witch attached ISO:”

echo $report | Out-String;

Write-Host -NoNewline -ForegroundColor Yellow „Deattach ISO from above VM’s? [Y/N] ”
$action = Read-Host

if ($action -eq „Y”) {
foreach ($vm in Get-VM) {
if (Get-CDDrive -VM $vm) {
Get-CDDrive -VM $vm | Set-CDDrive -NoMedia -Confirm:$false | Out-Null
}
}
}
} else {
Write-Host -ForegroundColor Yellow „There is no attached ISO to VM.”
}

Jak widzicie trochę przearanżowałem ten skrypt… u mnie działa. A u was?

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