VCSA vCenter 6.7 Embedded installieren auf via bestehendes vCenter

Schritt 2 zum automatischen Lab ist fertig. Die Installation eines neuen vCenters auf ein bestehendes vCenter.

Im Homelab läuft ein vCenter, welches den Kontakt zur Hardware pflegt. Da ich dieser ein wenig Sorge trage, benötige ich meistens eine nested Installation eines zweiten oder dritten vCenters mit nestes Hosts. Wenn da mal was schief geht, kann ich das ganze einfach entsorgen und der Hauptumgebung passiert sofern nichts. Man könnte es mit einer Tegnant Umgebung vergleichen, worin das Main-vCenter die Hülle darstellt und im Kern mehrere weitere vCenter mit Hosts beherbergt, welche wia Zugriffsrechte und Netzwerk voneinander getrennt sind.

Hier mal ein Script dazu. Zum Mounten des Laufwerks gibts bereits einen Beitrag.

Voraussetzung:

Ein Netzwerk, worüber kommuniziert werden kann.
Eine freie IP-Adresse.
Einen DNS Eintrag zum vCenter mit der passenden IP.

All diese Sachen prüft der Installer von VMware und schläft fehl, wenn etwas nicht klappt. Als prüfe das vorgängig selber, eine Abfangroutine ist im Script noch nicht eingebaut.

$TemplateJson = Get-Content 'DRIVELETTER:\vcsa-cli-installer\templates\install\embedded_vCSA_on_VC.json' -Encoding utf8
$TemplatePs = $Template | ConvertFrom-Json

#vCenter Settings
$TemplatePs.new_vcsa.vc.hostname = "FQDN zum vCENTER"
$TemplatePs.new_vcsa.vc.username = "Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!"
$TemplatePs.new_vcsa.vc.password = "DEIN PASSWORT"
$TemplatePs.new_vcsa.vc.deployment_network = "PORTGRUPPE"
$TemplatePs.new_vcsa.vc.datacenter = "NAME DES DATACENTERS"
$TemplatePs.new_vcsa.vc.datastore = "NAME DES STORAGES"
$TemplatePs.new_vcsa.vc.target = "NAME DES CLUSTERS ODER DATACENTERS (KEIN RESSOURCENPOOL)"

#Appliance Settings
$TemplatePs.new_vcsa.appliance.thin_disk_mode = $true
$TemplatePs.new_vcsa.appliance.deployment_option = "small"
$TemplatePs.new_vcsa.appliance.name = "Name, wie die VM heissen soll"

#Network Settings
$TemplatePs.new_vcsa.network.ip_family = "ipv4"
$TemplatePs.new_vcsa.network.mode = "static"
$TemplatePs.new_vcsa.network.ip = "IP DES VCENTERS"
$TemplatePs.new_vcsa.network.dns_servers = "DNS, MEHRERE SERVER KOMMAGETRENNT"
$TemplatePs.new_vcsa.network.prefix = "SUFFIX"
$TemplatePs.new_vcsa.network.gateway = "GATEWAY"
$TemplatePs.new_vcsa.network.system_name = "FQDN DES NEUEN VCENTER SERVERS"

#OS Settings
$TemplatePs.new_vcsa.os.password = "PASSWORT DER APPLIANCE"
$TemplatePs.new_vcsa.os.ntp_servers = "NTP-SERVER"
$TemplatePs.new_vcsa.os.ssh_enable = $false

#SSO Settings
$TemplatePs.new_vcsa.sso.password = "PASSWORD DES USERS ADMINISTRATOR@DOMAIN"
$TemplatePs.new_vcsa.sso.domain_name = "DOMAINNAME"

#CEIP
$TemplatePs.ceip.settings.ceip_enabled = $false

$Json = $TemplatePs | ConvertTo-Json -Depth 10

$Json = $Json -replace("\\u003c","<")
$Json = $Json -replace("\\u003e",">")
$Json = $Json -replace("\\u0026","&")
$Json = $Json -replace("\\u0027","'")
$Json = $Json -replace("`r`n","`n")

[System.IO.File]::WriteAllLines('C:\Temp\test.json', $Json)
Start-Process -Wait "E:\vcsa-cli-installer\win32\vcsa-deploy.exe" -ArgumentList "install C:\Temp\test.json --accept-eula --no-ssl-certificate-verification"

Was passiert da nun?

  1. Der Inhalt des Json-Templates, welches sich auf dem Installationmedium befindet, eingelesen.
  2. Das Template wird von Json in ein PowershellObjekt konvertiert.
  3. Nun werden die verschiedenen Parameter angepasst aus der Vorlage, damit sie auf das Lab passen.

Nach dem Anpassen des letzten Parameters CEIP wird es ein wenig spannender, oder auch für den einen oder anderen unverständlich.

Das PowershellObjekt wird wieder zu Json konvertiert und in der Variable $Json abgelegt. Dabei müssen wir die Tiefe angeben, welche entsprechend aufgebrochen werden soll, damit keine Subarrays entstehen oder gar Inhalte einfach verschwinden.

Seit einem Update des .Net Frameworks gibt es einige Probleme beim Erstellen des Jsons. Ein grosses Problem ist das Ersetzen von Sonderzeichen in Platzhalter wie \\u003c. Die nächsten Zeilen dienen dazu, diee Zeichen wieder richtig zu stellen und entsprechend zu ersetzten.

Nun sollte das Json in eine Datei geschrieben werden. Da hat aber Powershell auch wieder ein paar Probleme. Vorallem wenn es darum geht, reines UTF-8 zu generieren. Mit Out-File -Encoding utf8 wird nämlich UTF8 BOM erstellt. Mit dem genutzten Befehl wird ein sauberes utf8 erstellt, womit auch der Deployer von VMware zufrieden ist.

Der letzte Schritt ist das Aufrufen des Deplyers, dabei wird als Parameter --accept-eula und --no-ssl-certificate-verification mitgegeben. Die EULA habe ich selbstverständlich durchgelesen, Punkt für Punkt. Da in einem Homelab meistens die Zertis selbstsigniert sind, schalten wird die Überprüfung des Zertis einfach ab.

Nun wird das Script gestartet. Nach wenigen Minuten ist da vCenter erstellt, installiert und man kann sihc mit dem SSO User daran anmelden und bereits die ersten Hosts einfügen.

 

Der nächste Schritt wird nun sein, ESXi Hosts auch automatisch zu deployen und anschliessend via Script im vCenter hinzuzufügen. Damit hätten wir dann die Basis, mit einem kompletten Container arbeiten zu können.


Drucken