Automatyczne polecenia dla wirtualnych maszyn działających na VMware ESX/ESXi

data: 2010-03-31

Jeśli kiedykolwiek potrzebowałeś automatycznej kontroli maszyn wirtualnych, a używasz ESX/ESXi w wersjach 3.x/4.x to sprawa jest całkiem prosta. Na początku należy aktywować dostęp do SSH w samym ESX.

Aktywacja dostępu do SSH wiąże się z wykonaniem kilku kroków:

  • mając dostęp do konsoli serwera należy wcisnąć kombinacje ALT+F1
  • następnie wpisać polecenie "unsupported" (wpisywanie polecenia będzie niewidoczne)
  • zostaniemy poproszeni o hasło; po poprawnej autoryzacji uzyskamy dostęp do systemowej powłoki
  • edytujemy plik /etc/inetd.conf usuwając znak "#" (hash) na początku linii z ssh
  • restartujemy inetd poleceniem "kill -HUP `cat /var/run/inetd.pid`"
  • logujemy się na serwer po SSH na konto root
Oto komendy powłoki, które są nam potrzebne do zarządzania maszynami wirtualnymi:
vim-cmd vmsvc/getallvms
zwraca listę maszyn działających na serwerze np.:
Vmid Name File Guest OS Version Annotation
128 virtualmachine [datastore1] vm/virtualmachine.vmx otherLinuxGuest vmx-07
Polecenie to pokazuje nam (w pierwszej kolumnie) unikalny numer ID maszyn, w tym przypadku jest to 128. Chcąc sprawdzić stan naszej virtualki wpisujemy:
vim-cmd vmsvc/power.getstate 128
Wynikiem wydania polecenia jest informacja zwrotna postaci:
Retrieved runtime info
Powered on
Kolejne przydatne komendy to:
  • vim-cmd vmsvc/power.on - włącza nieaktywną maszynę
  • vim-cmd vmsvc/power.off - wyłącza aktywną maszynę
  • vim-cmd vmsvc/power.reset - robi "twardy" restart maszyny
  • vim-cmd vmsvc/power.reboot - wyłącza i włącza aktywną maszynę
Chcąc sprawdzać wszystkie maszyny wirtualne pod kątem ich stanu (włączona/wyłączona) i uruchomić nieaktywne jednostki można posłużyć się np. skryptem ruby:
#!/usr/bin/env ruby
require "rubygems"
require 'net/ssh'

#definiowanie ID wirtualnych maszyn
VM = [128,64,32,12]
VM.each do |id|
    Net::SSH.start("ip.esxa", 'root', :password=> "tajne haslo") do |ssh|
        test = ssh.exec!("vim-cmd vmsvc/power.getstate #{id} | grep Powered").strip
        if test =~ /Powered on/
            out = ssh.exec!("vim-cmd vmsvc/power.reset #{id}").strip
       else
            out = ssh.exec!("vim-cmd vmsvc/power.on #{id}").strip
        end
    end
end

Do działania skryptu potrzebny jest pakiet net-ssh (instalacja gem install net-ssh).


Polecenia powłoki pozwalają nam w prosty sposób napisać skrypty testujące stan wirtualnych maszyn i odpowiednio na nie reagować. W przypadku "uciążliwych" w działaniu aplikacji powodujących częste zawieszanie lub niestabilną pracę maszyny jest to spora ulga dla administratora :)

Powrót

Twój koszyk jest pusty,
zobacz naszą ofertę.

Zaloguj się do panelu klienta