Kurztipp: OVA-/OVF-Vorlagen mit OVF Tool bereitstellen

Beim Bereitstellen einiger VMware Appliances unter vSphere 6.5 hatte ich kürzlich verstärkte Probleme. Unabhängig vom verwendeten Frontend (Host Client, HTML 5 Client, Web Client, C# Client) konnte keine Vorlage sauber provisioniert werden - häufige Abbrüche und "allgemeine Systemfehler" waren das Resultat.

Mark Brookfield gab mir den Tipp, anstatt einer grafischen Oberfläche OVF Tool zu verwenden. Die Konsolenanwendung dient zum Im-/Export von OVA/OVF-Vorlagen zwischen diversen VMware-Produkten und ist für Microsoft Windows, Linux und App macOS erhältlich. Das Tool kann kostenfrei heruntergeladen werden.

Der Funktionsaufruf ist prinzipiell:

1$ ovftool [parameter] quelle ziel

Einige wichtige (teilweise optionale) Parameter sind:

ParameterFunktion
-n / --nameName der Ziel-VM
-vf / --vmFolderOrder, in welchen die VM beheimatet werden soll
--acceptAllEulasEULA automatisch akzeptieren
-ds / --datastoreZu verwendender Datastore
-dm / --diskModeDisk Provisioning-Mode (bei vSphere: thin, thick oder eagerZeroedThick)
--net:NIC-Name:PortgroupKonfiguration einer Netzwerkzuordnung (Portgroup wird an NIC-Name angebunden)
--ipProtocolVerwendetes IP-Protokoll: IPv4, IPv6
--propZuweisung eines OVA-/OVF-Parameters (z. B. Root-Passwort)
--deploymentOptionAuswählen einer vApp-Konfiguration (sofern von Vorlage unterstützt)
--powerOnAnschalten der VM nach Provisionierung

Das Target muss einem bestimmten Format folgen, das sich mir nicht unbedingt direkt erschlossen hat. Einige Beispiele für vSphere:

LocatorBeschreibung
vi://myvcenter/mydatacenter/host/myclusterBeliebiger Hosts eines konkreten Datacenters und Clusters
vi://admin:admin@myvcenter/mydatacenter/host/myclusterwie oben, jedoch mit vorgegebenen Login-Informationen
vi://myvcenter/mydatacenter/vm/myfolder/myvmAngabe eines konkreten Datacenters, VM-Ordner und VM-Namen
vi://myvcenter/mydatacenter/host/myesxAngabes eines konkreten ESXi-Hosts eines Datacenters
vi://myvcenter/mydatacenter/host/myesx/Resources/myresourcewie oben, jedoch mit konkretem Ressourcenpool

Weitere Beispiele finden sich in der Online-Hilfe des Tools:

1$ ovftool -h | less
2$ ovftool -h locators | less
3$ ovftool -h examples | less

Die OVA-/OVF-Quelle muss sich übrigens nicht auf der lokalen Festplatte befinden, es kann auch über einen Webserver (http://pfad, https://pfad) oder FTP-Server (ftp://pfad) bezogen werden.

Bevor eine Vorlage bereitgestellt wird, empfiehlt es sich, einen Blick in die verfügbaren Optionen zu werfen. Hier werden unter anderem benötigte Netzwerk-Schnittstellen aufgelistet:

 1$ ovftool --hideEula VMware-vSAN-Witness-201704001-5310538.ova
 2...
 3Networks:
 4  Name:        Management Network
 5  Description: Management Network will be used to drive witness vm traffic
 6
 7  Name:        Witness Network
 8  Description: Witness Network will be used to drive witness vm traffic
 9
10In diesem Fall müssen gültige Zuordnungen für **Management Network** und **Witness Network** zugewiesen werden. Anschließend sollte man sich die verfügbaren Eigenschaften ansehen:
11
12...
13Properties:
14  ClassId:     vsan
15  Key:         witness.root.passwd
16  Label:       Root password
17  Type:        password(7..)
18  Description: Set password for root account.
19...

Manche werden zwingend benötigt, wie in diesem Fall für das Root-Password, manche sind optional. Manche OVA-/OVF-Vorlagen bieten Deployment-Optionen bzw. "T-Shirt-Größen" an:

 1Deployment Options:
 2  Id:          tiny
 3  Label:       Tiny (10 VMs or fewer)
 4  Description: Configuration for Tiny vSAN Deployments with 10 VMs or fewer
 5
 6               * 2 vCPUs
 7               * 8GB vRAM
 8               * 1x 12GB ESXi Boot Disk
 9               * 1x 15GB Magnetic Disk
10               * 1x 10GB Solid-State Disk
11               * Maximum of 750 Components
12
13  Id:          normal  (default)
14  Label:       Medium (up to 500 VMs)
15  Description: Configuration for Medium vSAN Deployments of up to 500 VMs
16
17               * 2 vCPUs
18               * 16GB vRAM
19               * 1x 12GB ESXi Boot Disk
20               * 1x 350GB Magnetic Disk
21               * 1x 10GB Solid-State Disk
22               * Maximum of 22K Components
23
24  Id:          large
25  Label:       Large (more than 500 VMs)
26  Description: Configuration for Large vSAN Deployments of more than 500 VMs
27
28               * 2 vCPUs
29               * 32GB vRAM
30               * 1x 12GB ESXi Boot Disk
31               * 3x 350GB Magnetic Disks
32               * 1x 10GB Solid-State Disk
33               * Maximum of 45K Components

Hier gibt es drei fertige Größen, die Anforderungen und Einsatzgebiete werden entsprechend dargestellt.

Der vollständige Aufruf sieht dann beispielsweise wie folgt aus:

 1$ ovftool --acceptAllEulas -ds=NFS-Backup --net:"Management Network"="DPortGroup-MGMT" --net:"Witness Network"="DPortGroup-VSAN" --prop:witness.root.passwd=... --deploymentOption=tiny VMware-vSAN-Witness-201704001-5310538.ova vi://st-vcsa03.stankowic.loc/Stankowic/host/Darmstadt/
 2Opening OVA source: VMware-vSAN-Witness-201704001-5310538.ova
 3The manifest validates
 4Source is signed and the certificate validates
 5Enter login information for target vi://st-vcsa03.stankowic.loc/
 6Username: administrator@vsphere.local
 7Password: ...
 8Opening VI target: vi://administrator%40vsphere.local@st-vcsa03.stankowic.loc:443/Stankowic/host/Darmstadt/
 9Deploying to VI: vi://administrator%40vsphere.local@st-vcsa03.stankowic.loc:443/Stankowic/host/Darmstadt/
10Transfer Completed

vApp-Optionen

Erhält man Warnung wie beispielsweise:

1Warning:
2- OVF property with key: 'witness.root.passwd' does not exists.

Ist es ratsam, einen Blick in den Reiter vApp-Optionen in der VM-Konfiguration zu werfen. Hier fehlt ein benötigter Wert, der vor dem Einschalten der Appliance ergänzt werden sollte.

Mithilfe des Tools war ich schlussendlich in der Lage, weitere vApps in meinem Homelab bereitzustellen - schade, dass dies jedoch nicht über die zahlreichen Frontends möglich ist. Ich weiß nicht, ob die Ursache in meinem Homelab begraben liegt, oder ob es ein generelles Problem (Bug?) ist. Hier muss ich mal näher investigieren...

Übersetzungen: