Jeżeli w Twoim domowym labie ląduje serwer Cisco UCS, to być może nie chcesz by działał 24/7. Prąd jest drogi, szumi to niemiłosiernie i jak nie masz serwerowni w garażu to po paru dniach będziesz miał dość odgłosów serwerowni w swoim domu. Z drugiej strony leń siedzi w każdym z nas i nikomu nie chce się chodzić by tylko kliknąć przycisk by uruchomić serwer. Zatem najbardziej przydatny skrypt to ten, który pozwoli uruchomić serwer zdalnie.
CIMC i biblioteki Python
CIMC (Cisco Integrated Management Controller) to dedykowany moduł zarządzania zdalnego, który jest często stosowany w serwerach firmy Cisco. CIMC umożliwia zdalne uruchamianie i wyłączanie serwera, co jest przydatne w przypadku potrzeby zdalnego restartu lub wyłączenia serwera w celu oszczędzania energii. Dostarcza zdalną konsolę, która pozwala administratorom uzyskać dostęp do konsoli serwera, jakby byli fizycznie podłączeni do niego. To umożliwia rozwiązywanie problemów i diagnozowanie problemów bez potrzeby fizycznego dostępu do serwera. CIMC ma dedykowany port Ethernet i działa zawsze gdy podłączone jest zasilanie do zasilacza.
imcsdk
w języku Python jest narzędziem stworzonym przez firmę Cisco, której głównym celem jest ułatwienie interakcji z urządzeniami Cisco UCS poprzez interfejs CIMC. Biblioteka ta zapewnia programistom narzędzia do automatyzacji i zarządzania serwerami Cisco UCS poprzez programowanie w języku Python. Biblioteka wykorzystuje do automatyzacji interfejs XMLAPI, który na UCS może być domyślnie wyłączony. Dlatego powinniśmy go aktywować.
ucs-cimc# scope xmlapi ucs-cimc /xmlapi # set enabled yes ucs-cimc /xmlapi *# commit ucs-cimc /xmlapi # show Enabled Active Sessions ------- --------------- yes 0
Skrypt
Mój skrypt jest bardzo prosty. Pierwszą rzeczą, jaką robi ten skrypt, jest zaimportowanie odpowiednich modułów z biblioteki imcsdk
. Następnie tworzy obiekt ImcHandle
, który służy do nawiązania połączenia z serwerem CIMC. Podczas tworzenia tego obiektu musimy podać adres IP serwera CIMC oraz dane uwierzytelniające do logowania, takie jak nazwa użytkownika i hasło. Dodatkowo, możemy określić, czy chcemy używać bezpiecznego połączenia SSL/TLS, ale w tym przypadku ustawiamy secure=False
.
Po nawiązaniu połączenia za pomocą handle.login()
, skrypt pobiera informacje o stanie zasilania serwera, używając funkcji server_power_state_get()
. Wynik jest zapisywany do zmiennej oper_power
.
Następnie skrypt analizuje stan zasilania i podejmuje odpowiednie działania. Jeżeli serwer jest wyłączony to próbuje go włączyć serwer za pomocą funkcji server_power_up()
. Na koniec, po zakończeniu operacji, skrypt wywołuje handle.logout()
w celu zakończenia sesji i zamknięcia połączenia z serwerem CIMC.
import imcsdk.imchandle import imcsdk.apis.server.serveractions # Dane do logowania ip_address = "" username = "" password = "" # Tworzenie obiektu ImcHandle i logowanie with imcsdk.imchandle.ImcHandle(ip_address, username, password, secure=False) as handle: oper_power = imcsdk.apis.server.serveractions.server_power_state_get(handle) if oper_power == "off": print("Bringing server up") imcsdk.apis.server.serveractions.server_power_up(handle) elif oper_power == "on": print("Server already on") else: print("Server power status is:", oper_power)