Automatyczne polecenia dla wirtualnych maszyn działających na VMware ESX/ESXi
data: 2010-03-31Jeś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
vim-cmd vmsvc/getallvmszwraca listę maszyn działających na serwerze np.:
Vmid Name File Guest OS Version Annotation 128 virtualmachine [datastore1] vm/virtualmachine.vmx otherLinuxGuest vmx-07Polecenie 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 128Wynikiem wydania polecenia jest informacja zwrotna postaci:
Retrieved runtime info Powered onKolejne 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ę
#!/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 :)
