VMware Workstation jest jedną z popularniejszych platform do wirtualizacji zasobów sprzętowych. Jest to naprawdę dobry produkt dla wszystkich inżynierów i entuzjastów, którzy nie mają lub nie potrzebują dedykowanego sprzętu klasy serwerowej do pracy. Jako maszynę wirtualną można uruchomić prawie dowolny system operacyjny, a nawet inny hypervisor – ESXi. Od wersji 15 oprócz możliwości zarządzania maszynami wirtualnymi za pomocą GUI dodana została opcja wykonywania niektórych czynności za pośrednictwem interfejsu programowalnego. Pokażę ci jak uruchomić i jakie daje możliwości interfejs REST API w VMware Workstation w wersji 15.0 i nowszych.
Włącz REST API
Funkcje interfejsu API REST są ograniczone do najbardziej niezbędnych operacji i odpowiadają funkcjom zaimplementowanym w API VMware Fusion 10. Obejmuje to zarządzanie maszynami wirtualnymi, ich stanem, a także wirtualnymi sieciami hosta i gościa.
Interfejs API REST w VMware Workstation jest domyślnie wyłączony ze względów bezpieczeństwa. Przed uruchomieniem należy skonfigurować poświadczenia dostępu do niego. Zarówno login, jak i hasło, są przechowywane lokalnie i są niezależne od poświadczeń systemu operacyjnego. Aby je zdefiniować, powinniśmy uruchomić vmrest.exe -C (lub vmrest -C w systemie Linux). Połączenia z usługą mogą być realizowane w sposób nieszyfrowany lub szyfrowany. Nieszyfrowane połączenia dozwolone są jednak jedynie z maszyny, na której uruchomiony jest VMware Workstation, gdyż usługa powiązana zostanie jedynie z interfejsem loopback. Jeśli chcemy użyć HTTP, po prostu uruchomimy aplikację vmrest.exe. Domyślnie używa ona portu 8697, ale możemy zmienić to za pomocą parametru -p.
Jeśli chcemy uzyskać zdalny dostęp do interfejsu API REST, musimy aktywować HTTPS, czyli włączyć szyfrowanie. Potrzebujemy do tego celu wygenerować klucz szyfrowania i certyfikat. Nie ma większego znaczenia, czy będzie to certyfikat typu self-signed, podpisany przez Twoje własne CA lub od zaufanego wystawcy. W systemie Linux w prosty sposób wygenerujemy certyfikat typu self-signed oraz klucz za pomocą poniższego polecenia.
openssl req -x509 -newkey rsa:4096 -keyout klucz.pem -out cert.pem -days 365 -nodes
Gdy mamy już certyfikat i klucz możemy uruchomić aplikację obsługującą interfejs REST API podając je jako odpowiednie parametry. Dodatkowo musimy zadeklarować adres IP jednego z lokalnych interfejsów, na którym ma usługa nasłuchiwać. Jeżeli tego nie zrobimy, to powiąże się ona z interfejsem loopback.
vmrest.exe -i 192.168.10.202 -c cert.pem -k klucz.pem
Wadą takiego sposobu uruchamiania jest to, że usługa interfejsu będzie działać jedynie tak długo, jak otwarty będzie wiersz poleceń. Jeżeli często będziemy korzystali z REST API w VMware Workstation to skonfigurujmy wywołanie vmest.exe w formie usługi systemowej.
To jedno "ale", które bardzo przeszkadza
Interaktywna dokumentacja usługi dostępna jest za pośrednictwem przeglądarki. Wystarczy, że połączymy się z adresem, z którym powiązaliśmy usługę. W prawym górnym roku strony znajdziemy też przycisk do logowania. Zalogowany użytkownik może wywoływać metody bezpośrednio z okna przeglądarki. Korzystając z zewnętrznych aplikacji, takich jak Postman, czy wywołując je bezpośrednio z własnych skryptów, musimy do każdego wywołania dodać nagłówek typu Basic Auth zawierający login i hasło utworzonego wcześniej użytkownika.
Strukturą stosowaną do opisu danych jest JSON. Za pomocą dostępnych metod wykonamy większość typowych zadań na maszynie wirtualnej i podstawowe operacje związane z konfiguracją sieci hosta. Możemy zmienić stan maszyny wirtualnej, włączając ją lub wyłączając, zawieszając, wznawiając czy wstrzymując, ale nie możemy jej zresetować.
Dostępne są też metody pozwalające na odczytanie wielu parametrów uruchomionej maszyny wirtualnej i jej kart sieciowych i modyfikację niektórych z nich. W moim domowym labie szczególnie przydatna okazała się metoda pozwalająca na modyfikację parametrów karty sieciowej maszyny wirtualnej. W prosty sposób mogę zmieniać powiązany z kartą interfejs vmnet oraz wirtualny adresu MAC. Pozwala mi to przenosić maszyny pomiędzy VLANami, w szczególności przełączyć je z VLANu dedykowanego do provisioningu konfiguracji do produkcyjnego.
Interfejs API ma jednak także sporo ograniczeń. Jednym z nich jest brak możliwości utworzenia maszyny z obrazu OVA lub pustej instancji z zadanymi parametrami. Można jedynie sklonować maszynę, która została wcześniej utworzona – nie jest to do końca elastyczna metoda. Ograniczeniem jest także to, że modyfikować można jedynie podstawowe parametry maszyny takie jak liczba przypisanych procesorów i rozmiar pamięci oraz parametry interfejsu sieciowego. Nie odczytamy nawet informacji o wirtualnych dyskach. REST API w VMware Workstatnion nie pozwala też na zarządzania shapshot-ami.
Chociaż interfejs REST API w VMware Workstation jest niezbyt rozbudowany, to nadal pozwala na zautomatyzowanie wielu czynności. Podejrzewam jednak, że używać go będzie jedynie dość wąska grupa pasjonatów.