Holodeck 9.1 Click-to-Deploy GitOps — Part 1: HoloRouter OVA Deployment with GitLab Auto-Provisioning
Objectives
- Verify a physical ESXi host against the Holodeck 9.1 prerequisites (ESX 8.0 U3 minimum, sizing, VLAN and IP hygiene)
- Deploy the Holodeck 9.1 HoloRouter OVA with GitOps enabled and observe the first-boot service stack initialization
- Validate that the GitOps-enabled HoloRouter auto-provisions GitLab and exposes it behind the new HTTPS reverse proxy
- Navigate the Click-to-Deploy UI, map its actions to Git commits, and locate the auto-generated Site A / Site B configuration structure
- Author and commit a Site A VCF 9.1.0.0 deployment configuration entirely through the UI — without running any New-HoloDeck* cmdlet
- Maintain a verify-live findings log that closes the gaps the 9.1 release announcement leaves open (OVF property names, bundled GitLab version, repository layout, initial credentials)
Prerequisites
Physical ESXi host at 8.0 U3 or later with Holodeck Toolkit 9.1 content staged and the 9.1 HoloRouter OVA downloaded and checksum-verified (holodeck91-01 completed). No existing 9.1 Holodeck instance on the host. Sizing baseline unchanged from the 9.0 track: minimum 512 GB RAM, 64 logical cores, 2 TB SSD/NVMe datastore. If the physical host also carries a 9.0.x Holodeck instance or a colleague's instance, coordinate before deploying — router-level operations on a shared host have historically been destructive to global router state (see Task 2 warnings).
Prior labs: holodeck91-01
Required skills:
- ESXi host management and OVF/OVA deployment via vSphere Client
- Basic Git concepts: repository, commit, branch, pipeline (taught lightly here, assumed at reading level)
- Understanding of VCF management domain architecture (VCF Installer, SDDC Manager, vCenter, NSX)
- Familiarity with the Holodeck 9.0.x cmdlet-driven deployment flow (holodeck-02) — this lab constantly contrasts against it
- Reading TLS certificates in a browser (issuer, SAN, chain)
Lab Environment
Single physical ESXi host. This lab deploys ONLY the Holodeck 9.1 HoloRouter OVA with GitOps enabled. On first boot the router brings up its embedded service stack: GitLab (auto-provisioned for GitOps), HashiCorp Vault (:8200), Authentik SSO (:9443), Technitium DNS (:5380), authenticated Webtop (:30000) — all fronted by an HTTPS reverse proxy on the router's management IP. The nested VCF estate (ESX hosts, VCF Installer, SDDC Manager, vCenter, NSX) is NOT deployed in this lab; that is driven from the UI in holodeck91-03. The built-in services get their own deep dive in holodeck91-04.
graph TB WS[Operator Workstation] -->|HTTPS reverse proxy| HR[HoloRouter 9.1<br/>mgmt IP + 10.1.1.1 internal] HR --> GL[GitLab - auto-provisioned<br/>GitOps driver] HR --> VAULT[Vault :8200] HR --> AUTH[Authentik SSO :9443] HR --> DNS[Technitium DNS :5380] HR --> WT[Webtop :30000 - authenticated] GL -.->|holodeck91-03 triggers| NEST[Nested VCF 9.1.0.0 estate<br/>not yet deployed]
IP Addressing
| Network | Purpose | VLAN |
|---|---|---|
10.1.1.0/20 | Management supernet for the future nested estate (mirrors the 9.0 track defaults — confirm the 9.1 UI defaults match before committing config) | VLAN 1644 (9.0-era default; 9.1 fixed VLAN-range handling bugs — verify defaults live) |
10.1.2.0/24 | vMotion (planned, deployed in holodeck91-03) | VLAN 1645 (verify live) |
10.1.3.0/24 | vSAN (planned, deployed in holodeck91-03) | VLAN 1646 (verify live) |
10.1.4.0/24 | NSX Host TEP (planned) | VLAN 1647 (verify live) |
10.1.5.0/24 | NSX Edge TEP (planned) | VLAN 1648 (verify live) |
Credentials
| System | Username | Password |
|---|---|---|
| Physical ESXi Host | root | Set during ESXi installation |
| HoloRouter 9.1 (SSH/console) | admin | Set via OVF properties at deploy time — record the property name in your findings log (verify_live) |
| GitLab (auto-provisioned) | root | Initial root password mechanism not documented in the release announcement — check OVF properties, first-boot console output, or a generated-secrets file on the router (verify_live). Record the retrieval path, never the password itself. |
| Authentik SSO | akadmin (typical Authentik default — verify_live) | Default credentials are an explicitly open question in the 9.1 changelog — resolve during deployment and record the mechanism |
| Webtop (:30000) | holodeck (verify_live) | Webtop is authenticated in 9.1 — determine whether it uses local credentials or Authentik SSO during this lab |
Tasks
Task 1 Verify 9.1 prerequisites and stage the HoloRouter OVA
manageabilityHolodeck 9.1 raises the minimum nested ESX to 8.0 U3 and changes the deployment driver — a pre-flight that was 'nice to have' in 9.0 is now mandatory because a GitOps pipeline will consume your configuration unattended. In production terms this is the Planning & Preparation Workbook checkpoint: garbage committed to Git becomes garbage deployed, repeatably.
On the physical ESXi host, confirm the ESXi version meets the 9.1 floor. From the host client or SSH: vmware -vl
Confirm resource headroom: total RAM, logical cores, and free datastore capacity. From PowerCLI: Get-VMHost | Select-Object Name, MemoryTotalGB, NumCpu; Get-Datastore | Select-Object Name, FreeSpaceGB
Verify the Holodeck 9.1 content is staged for VCF 9.1.0.0 (from holodeck91-01) and note which additional trains you staged, if any (VVF 9.1.0.0, VCF 5.2.4).
Check VLAN and IP hygiene on the physical host: list existing port groups and their VLAN IDs, and confirm the range you plan to use for the nested estate is free. PowerCLI: Get-VirtualPortGroup | Select-Object Name, VLanId
Verify the HoloRouter 9.1 OVA checksum against the published value from the download source, and record the exact OVA file name and build string in your findings log.
SHARED HOST CHECK: if any other Holodeck instance (yours or a colleague's) exists on this physical host, inventory it now and agree on ownership of router-level state before deploying.
Validation Gate
Check: Confirm all five gates: ESXi >= 8.0 U3, resources within budget, VCF 9.1.0.0 content staged and checksummed, VLAN range clear, OVA checksum verified (plus shared-host agreement if applicable).
Expected: All gates pass. Findings log started with the concrete 9.1 build identifier.
Common Errors
Task 2 Deploy the HoloRouter 9.1 OVA with GitOps enabled
manageabilityThis single OVF deployment replaces what the 9.0 track did across New-HoloDeckInstance's router staging: it is the 'Click' in Click-to-Deploy. Understanding exactly which OVF properties control GitOps enablement matters because they are the only imperative act left in the whole workflow — everything after this is declarative.
In vSphere Client on the physical host, start Deploy OVF Template and select the verified HoloRouter 9.1 OVA.
Select compute and the target datastore validated in Task 1. Use thin provisioning unless you have measured a reason not to.
Map networks: the router's external interface to your reachable management port group, and its internal/trunk interface(s) per the wizard's guidance.
On the Customize Template page, locate and enable the GitOps option, and set the router admin credentials and management IP settings. Record the exact OVF property names and defaults in your findings log.
Finish the wizard and power on the appliance. Open the VM console and watch first boot.
When the console settles, confirm basic reachability from your workstation: ping the router management IP, then ssh to it with the admin credentials you set.
Validation Gate
Check: HoloRouter 9.1 VM is powered on, reachable by ping and SSH on its management IP, and your findings log records: OVF property names (especially the GitOps toggle), NIC mapping, and first-boot duration.
Expected: Router deployed with GitOps enabled and fully documented deploy-time configuration.
Common Errors
Task 3 Validate GitLab auto-provisioning and the HTTPS reverse proxy
availabilityThe headline 9.1 claim is that enabling GitOps 'automatically spins up GitLab'. This task proves the claim in your environment and characterizes the two things the release notes leave open: the bundled GitLab version and its resource cost. It also establishes the reverse-proxy access pattern you will use for every service from now on.
From your workstation browser, open https://<holorouter-mgmt-ip>/ and observe what the reverse proxy presents at the root path.
Locate the GitLab URL. Try the obvious candidates in order and record which resolves: a path or vhost on the reverse proxy, or a dedicated port. Do not guess in documentation — record only what worked.
Inspect the TLS certificate the reverse proxy serves (browser padlock > certificate). Record issuer, subject/SANs, and validity period in your findings log.
Retrieve the initial GitLab root credential using the mechanism you identified in Task 2 (OVF property, console output, or generated-secrets file on the router — whichever the live toolkit actually uses) and sign in.
Record the GitLab version (Help/About page or /help) and the appliance resource demand right now (vSphere Client > HoloRouter VM > Monitor > Utilization).
Confirm the other built-in services answer over HTTPS on their documented ports without deep-diving them yet: Vault https://<holorouter-mgmt-ip>:8200/v1/sys/health, Authentik https://<holorouter-mgmt-ip>:9443, Technitium https://<holorouter-mgmt-ip>:5380, Webtop https://<holorouter-mgmt-ip>:30000
Validation Gate
Check: GitLab reachable and signed in; TLS certificate details recorded; GitLab version and appliance resource figures logged; all four service ports (8200/9443/5380/30000) answering over HTTPS.
Expected: GitOps stack fully provisioned and characterized. Findings log closes the GitLab version and resource-overhead open questions for your environment.
Common Errors
Task 4 Explore the Click-to-Deploy UI and the GitOps repository structure
manageabilityGitOps means the repository is the source of truth and the UI is a front-end to commits. Before you trust a pipeline to build a full VCF estate (holodeck91-03), you must know where the truth lives: which repo, which files, which branch, and what a UI action looks like in Git history. A VCDX panelist will ask 'what exactly is your configuration record?' — this task is the answer.
In GitLab, list the projects/groups the appliance auto-created. Record names and purposes in your findings log.
Open the configuration repository and inventory its structure: directories, file formats (JSON/YAML), and any pipeline definition file (e.g. .gitlab-ci.yml).
Locate the Site A and Site B configuration artifacts. The 9.1 release states dual-site configurations are auto-generated in one pass (the New-HoloDeckConfig behavior); confirm how the UI/repo represents both sites.
Find the Click-to-Deploy UI itself: the page from which a full Holodeck deployment is triggered. Candidates: a GitLab pipeline 'Run' page, a custom UI on the router, or a GitLab Pages front-end. Record which it is.
Prove the UI-to-Git linkage: make one harmless, reversible change through the UI (for example, edit a description or comment field in the deployment configuration), save it, then inspect the repository's commit history.
Revert your test change (via the UI if it supports it, otherwise via a Git revert) and confirm the history shows both the change and the revert.
Validation Gate
Check: Findings log contains: auto-created repo inventory, config repo structure, Site A/Site B artifact locations, the concrete Click-to-Deploy entry point, and a commit hash pair (change + revert) proving UI actions are Git commits.
Expected: You can state, with evidence, where the source of truth lives and how UI actions become auditable history.
Common Errors
Task 5 Author the Site A VCF 9.1.0.0 deployment configuration through the UI
manageabilityThis is the declarative equivalent of holodeck-02 Task 1 (reviewing config.json before a 2-hour build), with higher stakes: the committed configuration will drive an unattended pipeline in holodeck91-03. Every value you set here is a design decision with a Git-recorded justification opportunity.
In the Click-to-Deploy UI, begin a new deployment configuration and select VCF 9.1.0.0 as the target version, referencing the content staged in holodeck91-01.
Configure the nested ESX host layout for the Site A management domain: host count and per-host CPU/memory sizing, mirroring the 9.0 baseline (4 hosts, 12 vCPU / 96 GB each) unless your physical host budget from Task 1 dictates smaller.
Configure networking for Site A: management CIDR (default 10.1.1.0/20 unless conflicting), VLAN assignments, and external reachability settings. Cross-check against the Task 1 VLAN inventory.
Confirm Site B remains parked/disabled per your Task 4 finding. Do not remove its generated artifacts — the dual-site pair is the 9.1 design intent; you are deferring it, not deleting it.
Review every remaining field the UI exposes (passwords/secrets handling, snapshot options, Day-2 toggles like VCF Automation or Supervisor deployment). Set secrets carefully and note WHERE the UI stores them — this is a key observation for holodeck91-04's Vault discussion.
Save/commit the completed Site A configuration through the UI and verify the commit in the repository, reading the full diff end to end.
Validation Gate
Check: Committed Site A configuration exists in Git with: VCF 9.1.0.0 target, host sizing within physical budget, conflict-free networking, Site B parked, secrets handling observed and logged. You have read the full diff.
Expected: Deployment-ready declarative configuration, fully reviewed, with a documented understanding of where every value lives.
Common Errors
Task 6 Snapshot the GitOps control plane and consolidate the findings log
recoverabilityThe router now carries your pipeline, secrets, identity, and DNS — it is the control plane for everything holodeck91-03 will build. Snapshotting it BEFORE the first pipeline run gives you a clean 'pipeline never ran' restore point, and the consolidated findings log is your personal 9.1 documentation until official docs and community KB catch up.
Shut down cleanly or use a quiesce-capable snapshot: take a snapshot of the HoloRouter 9.1 VM named 'holodeck91-02-complete'. PowerCLI: Get-VM -Name '<holorouter-91-vm-name>' | New-Snapshot -Name 'holodeck91-02-complete' -Description 'GitOps stack provisioned, Site A config committed, no deployment run' -Memory:$false
Verify the snapshot exists and boots: power the router back on (if shut down) and confirm GitLab still serves your committed Site A configuration.
Consolidate the findings log into a single verify-live table with columns: [Open Question from Release Notes, What You Observed, Evidence (screenshot/commit/URL), Confidence]. Minimum rows: GitOps OVF property, GitLab URL scheme, GitLab version, appliance resource overhead, initial credentials mechanism, repo layout, Click-to-Deploy entry point, secrets handling in config.
Cross-check your findings log against the structured changelog's section 7 open questions and mark which you have now closed for your environment (GitLab version, resource overhead) and which remain (VNA sizing, Technitium/dnsmasq coexistence, Authentik defaults, 9.0-to-9.1 upgrade path).
Validation Gate
Check: Snapshot 'holodeck91-02-complete' exists and is boot-verified. Findings table complete with evidence links. Open-question status reconciled against the changelog.
Expected: Clean restore point ahead of the first pipeline run, plus a defensible personal 9.1 reference document.
Common Errors
Final Validation
The Holodeck 9.1 GitOps control plane is fully provisioned: HoloRouter 9.1 deployed with GitOps enabled, GitLab auto-provisioned and characterized (version, resource cost), all built-in services answering over HTTPS, and a reviewed Site A VCF 9.1.0.0 configuration committed to Git. No deployment has been triggered — that is holodeck91-03. A boot-verified snapshot protects the control plane, and a findings log documents every verify-live observation.
✓ HoloRouter 9.1 VM reachable via ping/SSH on management IP → Router up with GitOps stack running
✓ GitLab reachable over HTTPS via reverse proxy, signed in, version recorded → GitLab operational; version and resource overhead logged
✓ Service liveness: :8200 (Vault), :9443 (Authentik), :5380 (Technitium), :30000 (Webtop) all HTTPS → All four documented ports answering over HTTPS
✓ Site A VCF 9.1.0.0 configuration committed to Git, full diff reviewed → Single reviewed commit at HEAD; Site B parked, not deleted
✓ Snapshot 'holodeck91-02-complete' exists and boot-verified → Restore point proven before any pipeline run
✓ Findings log: 8+ verify-live rows with evidence → Release-notes open questions reconciled: closed vs carried forward
Cleanup / Restore
Snapshot: holodeck91-02-complete
• Snapshot the HoloRouter 9.1 VM as 'holodeck91-02-complete' (done in Task 6; prefer clean-shutdown snapshot)
• Store the findings log in your VCDX study folder alongside the Holodeck-9.1 reference docs — it is the only 9.1 field documentation in existence for your environment
• Sign out of GitLab and the service UIs; do not leave bootstrap admin sessions open
• If on a shared host, notify co-tenants that the 9.1 router is live and share its IP footprint
Design Reflection (VCDX)
A panelist handed this design would immediately probe the deployment-driver decision: 'You had a working cmdlet-based process in 9.0 — justify moving the driver into a GitOps pipeline.' Strong answers are architectural, not fashionable: the repository becomes the single source of truth, every configuration change is an attributable commit, and the pipeline makes deployment repeatable by construction rather than by operator discipline.
Equally, be ready for the inverse: the GitOps control plane (GitLab on the router) is new infrastructure with its own availability, recoverability, and security burden that the 9.0 PowerShell workstation simply did not have. If you cannot articulate what you TRADED for auditability — a heavier single-point-of-failure appliance, secrets concentration, unfamiliar failure modes with zero community KB — the panel will conclude you adopted the feature, not designed the solution.
Requirements
- Deployment configuration must be version-controlled with attributable change history (who changed what, when)
- A full Site A VCF 9.1.0.0 deployment must be triggerable without manual PowerShell on an operator workstation
- The GitOps control plane must be restorable to a known-good state independent of the nested estate
- All router-hosted services must be reachable only over HTTPS
Constraints
- The 9.1 release announcement documents capabilities but not implementation details — every unlisted UI path, property, and credential mechanism must be field-verified before it enters design documentation
- Community KB corpus is entirely 9.0-era: zero 9.1 threads exist, so there is no external validation for novel failure modes
- GitLab, Vault, Authentik, Technitium, and Webtop all run on the single HoloRouter appliance — control-plane resource ceiling and failure domain are one VM
- Physical host must be ESXi 8.0 U3 minimum (raised floor vs 9.0 track)
- Shared-host deployments inherit the unresolved 9.0-era router-state collision risk until re-validated under 9.1
Assumptions
- The 9.1 OVA's GitOps enablement provisions GitLab without external dependencies (no internet-dependent bootstrap) — verify on first deploy
- PowerShell cmdlets remain available as a fallback deployment path per the release notes, even though this lab never uses them
- Dual-site config auto-generation produces a Site B that is safely inert until explicitly deployed
- Snapshot-based recovery of the router restores GitLab and Vault to a consistent state when taken from clean shutdown
Risks
- Control-plane concentration: one appliance now carries pipeline, secrets, identity, and DNS — IMPACT: single failure removes the ability to deploy, authenticate, and resolve names simultaneously; MITIGATION: boot-verified snapshots, documented rebuild-from-OVA procedure, findings log as rebuild reference
- Undocumented surface: acting on assumed UI paths or property names — IMPACT: misconfiguration or fabricated documentation that fails design defense scrutiny; MITIGATION: verify-live discipline, evidence-linked findings log
- Secrets in Git: if deployment credentials are committed in plaintext the audit trail becomes a leak vector — IMPACT: anyone with repo read access holds the estate's keys; MITIGATION: observe and document actual behavior in Task 5, escalate to Vault-referenced secrets if supported (holodeck91-04)
- Zero 9.1 KB: novel failures have no community answers — IMPACT: longer time-to-resolution than the KB-rich 9.0 track; MITIGATION: capture evidence rigorously and contribute findings back
Self-Assessment Discussion Prompts
- Contrast the 9.0 cmdlet path (New-HoloDeckInstance against a hand-edited config.json) with the 9.1 GitOps path across three axes: repeatability, auditability, and drift. Which axis improves most, and which gains a new failure mode?
- The 9.0 track's config.json had no history; the 9.1 config repo has full history. Give a concrete operational scenario from your own lab where that history would have saved you time, and one where it would not have helped at all.
- The GitOps control plane runs ON the HoloRouter. Argue for and against separating it onto a dedicated appliance. What does production infrastructure practice say about co-locating the deployment system with the network gateway it deploys through?
- PowerShell cmdlets remain available in 9.1. Under what circumstances would you deliberately choose the cmdlet path over the UI/GitOps path, and how would you keep Git as the source of truth if you did?
- You observed (Task 4) how UI actions map to commits. If some UI state never reaches Git, what drift risks does that create, and how would you detect them?
- A change made directly in Git (bypassing the UI) versus a change made in the UI: are both legitimate in a GitOps model? Design the change-control policy you would defend to a panel.
Extensions
Parallel Cmdlet-Path Deployment Comparison
On a second host (or after tearing down), perform the same router deployment using the 9.1 PowerShell cmdlet path that remains available, without GitOps enabled. Time both paths, diff the resulting router state, and document which built-in services exist in each mode. This directly answers the 'GitOps vs cmdlets' decision with primary evidence.
sameCharacterize the GitOps Appliance Overhead Curve
Extend the Task 3 resource measurement into a time series: capture router CPU/memory at idle, during a config commit, and (after holodeck91-03) during a full pipeline run. Publish the curve in your findings log — this closes the release-notes open question quantitatively.
sameBreak and Restore the Control Plane
After confirming the snapshot, deliberately corrupt the control plane (power-off mid-commit, fill the appliance disk) and practice restoring from 'holodeck91-02-complete'. Document GitLab and Vault behavior on restore from both clean-shutdown and crash-consistent snapshots.
harderShared-Host Coexistence Re-Validation
On a host carrying a 9.0.x instance, deploy the 9.1 router in a coordinated window and systematically test whether the 9.0-era global-state destructiveness (Set-HoloRouter overwriting shared dnsmasq/FRR state) has an analog under the 9.1 reverse-proxy/Technitium model. This resolves a standing open question for multi-tenant lab hosts.
much harder⚠ Known Pitfalls (from Community KB)
References
- HoloDeck 9.1 Release Announcement (verbatim capture)
Holodeck-9.1/01-release-announcement.mdlocal fileTier 1 — Official
Primary source for every capability claim in this lab: GitOps enablement, GitLab auto-provisioning, service ports, HTTPS reverse proxy, supported VCF range, minimum ESX 8.0 U3. - HoloDeck Toolkit 9.1 — Structured Reference & Changelog
Holodeck-9.1/02-structured-changelog.mdlocal fileTier 1 — Official
Structured digest of the announcement including the section 7 open questions this lab's findings log is built around. - VCF 9.1 Release Intake — rn-9-1-016 (Click-to-Deploy GitOps)
academy-v2/content/releases/vcf-9.1.jsonlocal fileTier 1 — Official
Release-intake entry confirming the deployment driver shift from New-HoloDeck* cmdlets to the UI/GitOps pipeline, with cmdlets remaining available. - VCF Holodeck Toolkit — Broadcom Community ForumTier 1 — Official
Community forum. NOTE: all 63 captured KB threads are 9.0-era; no 9.1 threads existed at authoring time. Treat carried-over fixes as hypotheses under 9.1. - GitLab CI/CD DocumentationTier 2 — VMware Press
Reference for reading the auto-provisioned pipeline definition (.gitlab-ci.yml) encountered in Task 4. - OpenGitOps PrinciplesTier 2 — VMware Press
The four GitOps principles (declarative, versioned and immutable, pulled automatically, continuously reconciled) — the evaluation framework used in the design reflection. - William Lam — VCF and Nested Lab AutomationTier 3 — Expert Blog
Community expert coverage of nested VCF deployment; watch for 9.1 Toolkit coverage as it emerges.