[Bielefeld-pm] Perl und VMware
Stefan Oberwahrenbrock
oberwahrenbrock at gmx.de
Fr Nov 25 09:07:49 PST 2011
Wie beim letzten Treffen angekündigt, habe ich den Versuch unternommen,
das Zusammenspiel von Perl mit verschiedenen VMware-Produkten
auszuprobieren. Für Interessierte anbei eine Zusammenfassung meiner
bisherigen Erfahrungen hierzu.
Gruß,
Stefan
Überblick
=========
Die Produkte von VMware lassen sich grob in zwei Gruppen einteilen: Zum
einen in Produkte für End- bzw. Heimanwender und zum anderen in
Produkte, die für (komplexere) Unternehmensszenarien gedacht sind.
Zur ersten Gruppe zähle ich "VMware Player", "VMware Workstation",
"VMware Fusion" (für Mac-Benutzer) und auch noch den "VMware Server".
Während "VMware Workstation" und "VMware Fusion" kommerzielle Produkte
sind, kann man sich den "VMware Player" und den "VMware Server"
kostenlos von der Web-Seite des Herstellers herunterladen (Registrierung
erforderlich). Die Weiterentwicklung des "VMware Server" wurde
allerdings bereits vor einer ganzen Weile eingestellt. Die beiden
kostenlosen Produkte weisen einen reduzierten Funktionsumfang auf. Alle
vier Produkte benötigen ein bereits installiertes Betriebssystem.
Zur zweiten Gruppe zählen ich die Virtualisierungsplattform "VMware
vSphere Hypervisor (ESXi)" in Verbindung mit Management-Software wie dem
"VMware vCenter Server". Dieses Konglomerat ist in diversen Ausbaustufen
kostenpflichtig erhältlich und firmiert aktuell unter dem allgemeinen
Begriff "VMware vSphere". Ein "VMware vSphere Hypervisor (ESXi)" kann
zwar auch kostenlos heruntergeladen und betrieben werden (Registrierung
erforderlich), stellt allerdings spezielle Anforderungen an die
Hardware. So ist dedizierte Hardware nötigt (kein bestehendes
Betriebssystem als Grundlage) und es müssen bestimmte
Mindest-Voraussetzungen erfüllt werden - z. B. im Bereich der Netzwerk-
und Festplattenhardware. Im End- bzw. Heimanwenderbereich wird man es
daher vermutlich eher selten mit einer "vSphere"-Umgebung zu tun haben.
Dies soll keine vollständige Klassifizierung der Produktpalette von
VMware sein, sondern lediglich eine Orientierungshilfe. Es gibt da
gerade im vSphere-Bereich noch eine ganze Reihe weiterer Produkte, die
hier nicht erwähnt werden.
SDKs und APIs
=============
VMware stellt diverse Dokumentationen zu APIs und SDKs zur Verfügung
[1]. Im Hinblick auf Perl sind hiervon zwei Nennungen besonders
interessant: "VMware vSphere SDK for Perl" und "VMware VIX API".
Beim "VMware vSphere SDK for Perl" handelt es sich um ein
client-seitiges Framework, das den Zugriff auf die "vSphere Web Services
API" ermöglicht. Diese "Services" sind im wesentlichen
Management-Funktionen wie z. B. virtuelle Maschine (Guest) hochfahren,
herunterfahren, auf Snapshot zurücksetzen etc. In der aktuellen Version
5.0 sind allerdings auch erstmalig Funktionen integriert, die Aktionen
innerhalb der virtuellen Maschine ermöglichen [2]. Diese umfassen
Funktionen wie z. B. Dateien in die virtuelle Maschine kopieren,
Programme starten, Prozesse beenden etc. Hierzu müssen in der virtuellen
Maschine die "VMware Tools" installiert sein.
Die "VMware VIX API" ermöglicht seit jeher sowohl die Ausführung von
Management-Funktionen als auch das Durchführen von Operationen innerhalb
der virtuellen Maschine. Falls jemand bei dem Begriff "VIX" ins Grübeln
kommt: Er steht für "Virtual Infrastructure eXtension". Die "VMware VIX
API" kommt nicht nur in vSphere-Umgebungen zum Einsatz, sondern findet
auch bei Endanwender-Produkten Verwendung. Auch hier müssen in der
virtuellen Maschine die "VMware Tools" installiert sein, um diese API
vollständig nutzen zu können. Es gibt "Bindings" für verschiedenen
Sprachen, u. a. auch für Perl, die die Verwendung der API in eigenen
Programmen/Scripten ermöglichen.
In den derzeit aktuellen Version von "VMware vSphere SDK for Perl" (5.0)
und "VMware VIX API" (1.11) haben sich Funktionsumfang und Einsatzzweck
teilweise vermischt. Dies kann verwirren - es gibt Beiträge, die hierzu
Hilfestellung für den Durchblick geben [3].
Installation
============
Ich habe beide Produkte auf verschiedenen Betriebssystemen ausprobiert.
Dies erfolgte in einer vSphere 4.1 Umgebung mit Management-Server. Ein
Mac-System steht mir nicht zur Verfügung. Zu den Installationen folgende
Notizen:
"VMware VIX API" unter Windows
Nach der Installation findet sich im Installationsverzeichnis die Datei
"vix-perl.zip". Entpackt man diese, findet sich in der darin enthaltenen
README-Datei eine Anleitung zur Installation der Perl-Bindings. Laut der
Anleitung werden zwei Dinge benötigt: Eine C-Entwicklungsumgebung und
ein installiertes Perl. Die Anleitung legt einem nahe ein ActivePerl in
Version 5.10 sowie eine Entwicklungsumgebung von Microsoft zu verwenden.
Nach meinen Erfahrungen kann man hier auch ein aktuelles ActivePerl 5.14
verwenden, die Community-Edition ist frei verfügbar [4]. Ältere
Versionen stehen seitens ActiveState ohnehin nur für die
kostenpflichtige Business-Edition zur Verfügung. Auch die
Entwicklungsumgebung "Microsoft Visual Studio 2008 Express Editions mit
SP1" wird von Microsoft erfreulicherweise kostenlos zum Download zur
Verfügung gestellt [5]. In diesem Szenario funktionierte die
Installation unter Windows XP SP3 problemlos. Ich habe es hingegen
leider nicht hinbekommen, die Installation mit einer anderen
C-Entwicklungsumgebung (MinGW installiert durch ActivePerl) oder einem
Strawberry-Perl und dessen Build-Tools erfolgreich abzuschließen.
"VMware VIX API" unter Linux
Mit einem Debian 6.0 System konnte ich die Installtion zwar scheinbar
erfolgreich (mit Warnungen) abschließen. Allerdings konnte ich die API
dann in Scripten nicht benutzen - es kam immer die Meldung
"HostConnect() failed, 6000 The operation is not supported for the
specified parameters".
Mit einem OpenSUSE-11.4-System verlief die Installtion erfolgreich. Nach
der Installation befindet sich die Installationsdatei für die
Perl-Bindings unter "/usr/lib/vmware-vix/vix-perl.tar.gz". Nach dem
Entpacken und Wechseln in das dabei erzeugte Verzeichnis "vix-perl",
kann man das Module mit den drei Schritten "perl Makefile.PL; make; make
install" installieren. Hierzu muss das Paket
"patterns-openSUSE-devel_C_C++" installier sein. Die Warnungen während
des "make" scheinen keine negativen Auswirkungen auf die Funktionalität
zu haben. Mein Testscript, das unter Debian nicht funktionierte,
arbeitet unter OpenSUSE ohne irgendwelche Anpassungen fehlerfrei.
"VMware vSphere SDK for Perl" unter Windows
Unter Windows XP SP3 verlief die Installation der aktuellen Version 5.0
problemlos. Das Setup bringt ein leicht angestaubtes ActivePerl 5.8.8
mit. Die getesteten Beispiel-Scripte funktionierten auf Anhieb. Ich habe
die Installation nur auf einem Rechner getestet, auf dem vorher noch
kein Perl installiert war.
"VMware vSphere SDK for Perl" unter Linux
Mit einem Debian System konnte ich die Installation leider nicht
erfolgreich abschließen. Das Setup von VMware setzt anscheinend ein
Linux-System voraus, das mit einem RPM-basierten Paket-Manager arbeitet.
Mit einem OpenSUSE-11.4-System verlief die Installation erfolgreich - es
müssen allerdings bestimmt Voraussetzungen erfüllt bzw. Kniffe
angewendet werden:
a) Die Pakete "patterns-openSUSE-devel_C_C++" und "perl-libwww-perl"
müssen installiert sein
b) Zugang zum CPAN muss eingerichtet sein und funktionieren
c) Für den Zugriff auf einen vSphere-Management-Server via HTTPS muss
die Umgebungsvariable PERL_LWP_SSL_VERIFY_HOSTNAME mit dem Wert 0
exportiert werden. Ist dies nicht der Fall, aktzeptiert das zum Einsatz
kommende LWP::Protocol::https das selbst signierte Zertifikat des
Management-Servers nicht.
Code-Beispiele
==============
An dieser Stelle sei erneut auf die Dokumentation des Herstellers
verwiesen, über die sich auch Beispiele finden lassen [1]. Ein erster
Schritt könnte z. B. das Einschalten einer virtuellen Maschine über die
"VMware VIX API" sein [6]. Zudem sind den jeweiligen Installationen
ebenfalls Beispiel-Scripte beigefügt, denen man Perl-Code-Schnipsel
entnehmen kann.
Fazit
=====
Schade ist, dass sich sowohl "VMware VIX API" als auch "VMware vSphere
SDK for Perl" nur unter bestimmten Betriebssystemen und in bestimmten
Software-Konstellationen installieren bzw. verwenden lassen. Hier wäre
etwas mehr Plattform-Unabhängigkeit wünschenswert. Kann man diesen
Umstand aber in Kauf nehmen und sich auf die funktionierenden
Zusammensetzungen beschränken, halten beide Produkte anscheinend, was
die Dokumentation verspricht. So konnte ich mittels "VMware VIX API" in
einem eigenen Perl-Script virtuelle Maschinen starten und Dateien in die
jeweilige Maschine kopieren. Ebenso funktionierte das Hochfahren von
virtuellen Maschinen mittels "VMware vSphere SDK for Perl" und dem darin
enthaltenen Script "vmcontrol.pl" problemlos. Ein Verwendungszweck für
die Produkte könnten z. B. Software-Tests sein, bei denen sich
wiederholende Abläufe automatisiert ausgeführt werden müssen. Je nach
zur Verfügung stehenden VMware Produkten, können API und SDK hier
hilfreich sein.
Links
=====
[1] http://www.vmware.com/support/pubs/sdk_pubs.html
[2]
http://www.virtuallyghetto.com/2011/07/automating-new-integrated-vixguest.html
[3]
http://www.virtuallyghetto.com/2010/11/what-is-vmware-vix-api-and-its-future.html
[4] http://www.activestate.com/activeperl/downloads
[5]
http://www.microsoft.com/downloads/de-de/details.aspx?FamilyID=3254C868-BCB9-412C-95C6-D100C872EC60
[6]
http://www.vmware.com/support/developer/vix-api/vix111_reference/lang/perl/functions/VMPowerOn.html
Mehr Informationen über die Mailingliste Bielefeld-pm