Skip to content

(D) VCF Patterns

Brendan O'Connor edited this page Feb 7, 2024 · 55 revisions

VCF Pattern Prerequisites

CPU Support for ESXi 8.0

All patterns below require vSphere 8. ESXi 8.0 Update 2 requires CPU processors that support XSAVE instruction. Its important to note that if you've previously used the allowLegacyCPU=true hack in your lab to bypass the "CPU Support Error", it will no longer work with ESXi 8.x. The VCF Patterns below require upgraded hardware to support the nested ESXi 8.x hypervisors.

Development and testing of the patterns below leverage the following physical lab equipment:

  • Lenovo ThinkSystem SR250 V2
  • 4 CPUs x Intel(R) Xeon(R) E-2334 CPI @ 3.40GHz
  • 127.92 GB of Memory
  • 800 GB of Storage

This specific server configuration is not required to complete the lab below. For details please refer to the VMware HCL.

Pattern D-00: Generic VCF Patterns

The patterns below contain tools and techniques to assist with VCF 5.x prerequisites.

D-00A: Parse VCF JSON and print VLANs

Navigate to the vcf repo.

cd /usr/local/e2e-patterns/vcf

Copy the completed VCF 5 JSON Prerequisites file (naming convention vcf.json) to the /vcf repo:

root@photon-machine [ /usr/local/e2e-patterns/vcf ]# ls -l
-rw-r----- 1 root root 1680 Nov 10 01:26 e2e-vcf-tool-get-vlans.py
-rw-r----- 1 root root 8022 Nov 10 01:27 vcf.json

Run the get-vlans tool

python3 e2e-vcf-tool-get-vlans.py

Sample output:

VLANs:
    MANAGEMENT
        Subnet: 192.168.10.0/24
        VLAN ID: 1500
        MTU: 9000
        Gateway: 192.168.10.1
    VSAN
        Subnet: 192.168.11.0/24
        VLAN ID: 1
        MTU: 9000
        Gateway: 192.168.11.1
    VMOTION
        Subnet: 192.168.13.0/24
        VLAN ID: 3
        MTU: 9000
        Gateway: 192.168.13.1
    TEP
        Transport VLAN ID: 2
        CIDR: 192.168.12.0/24
        Gateway: 192.168.12.1

D-00B: Parse VCF JSON and Print DNS Entries

Navigate to the vcf repo.

cd /usr/local/e2e-patterns/vcf

Copy the completed VCF 5 JSON Prerequisites file (naming convention vcf.json) to the /vcf repo:

root@photon-machine [ /usr/local/e2e-patterns/vcf ]# ls -l
-rw-r----- 1 root root 2032 Nov  9 22:33 e2e-vcf-tool-get-dns.py
-rw-r----- 1 root root 8022 Nov  9 22:37 vcf.json

Run the get-dns tool

python3 e2e-vcf-tool-get-dns.py

Sample output:

DNS Entries for Management Workload Domain:
    DNS Servers: 172.16.0.9, 8.8.8.8
    DNS Zone: e2e.local
    SDDC Manager: e2e-vcf01 192.168.10.4 (Subnet Mask: 255.255.255.0)
    NSX Manager 01: e2e-m01-nsx01a 192.168.10.31
    NSX Manager 02: e2e-m01-nsx01b 192.168.10.32
    NSX Manager 03: e2e-m01-nsx01c 192.168.10.33
    NSX Manager VIP: e2e-m01-nsx01 192.168.10.30
    vCenter: e2e-m01-vc01 192.168.10.6
    ESXi Host 01: e2e-m01-esx01 192.168.10.100 (Gateway: 192.168.10.1, Subnet Mask: 255.255.255.0)
    ESXi Host 02: e2e-m01-esx02 192.168.10.101 (Gateway: 192.168.10.1, Subnet Mask: 255.255.255.0)
    ESXi Host 03: e2e-m01-esx03 192.168.10.102 (Gateway: 192.168.10.1, Subnet Mask: 255.255.255.0)
    ESXi Host 04: e2e-m01-esx04 192.168.10.103 (Gateway: 192.168.10.1, Subnet Mask: 255.255.255.0)

D-00C: Parse VCF JSON and Print Passwords

Navigate to the vcf repo.

cd /usr/local/e2e-patterns/vcf

Copy the completed VCF 5 JSON Prerequisites file (naming convention vcf.json) to the /vcf repo:

root@photon-machine [ /usr/local/e2e-patterns/vcf ]# ls -l
-rw-r----- 1 root root 1423 Jan 23 18:06 e2e-vcf-tool-get-passwords.py
-rw-r----- 1 root root 1423 Jan 23 18:06 vcf.json

Run the get-passwords tool

python3 e2e-vcf-tool-get-passwords.py

Sample output:

Passwords for Management Workload Domain:
    SDDC Manager: VMware1!VMware1!
    Root NSX Manager Password: VMware1!VMware1!
    NSXT Admin Password: VMware1!VMware1!
    NSXT Audit Password: VMware1!VMware1!
    vCenter: VMware1!VMware1!
    ESXi Host 01: VMware1!
    ESXi Host 02: VMware1!
    ESXi Host 03: VMware1!
    ESXi Host 04: VMware1!

D-00D: Parse VCF JSON and Print License Keys

Navigate to the vcf repo.

cd /usr/local/e2e-patterns/vcf

Copy the completed VCF 5 JSON Prerequisites file (naming convention vcf.json) to the /vcf repo:

root@photon-machine [ /usr/local/e2e-patterns/vcf ]# ls -l
-rw-r----- 1 root root 1477 Jan 23 21:03 e2e-vcf-tool-get-licenses.py
-rw-r----- 1 root root 7941 Jan 23 21:03 vcf.json

Run the get-licenses tool

python3 e2e-vcf-tool-get-licenses.py

Sample output:

VCF License Keys:
    ESXi: XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
    vSAN: XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
    vCenter: XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
    NSX: XXXXX-XXXXX-XXXXX-XXXXX-XXXXX

D-00E: Parse VCF JSON and create Terraform Variables file

Navigate to the vcf repo.

cd /usr/local/e2e-patterns/vcf

Copy the completed VCF 5 JSON Prerequisites file (naming convention vcf.json) to the /vcf repo:

root@photon-machine [ /usr/local/e2e-patterns/vcf ]# ls -l
-rw-r----- 1 root root 2032 Nov  9 22:33 e2e-vcf-tool-create-tf-varfile-from-json.py
-rw-r----- 1 root root 8022 Nov  9 22:37 vcf.json

Run the create-tf-varfile-from-json tool

python3 e2e-vcf-tool-create-tf-varfile-from-json.py

A terraform varfile is created.

root@photon-machine [ /usr/local/e2e-patterns/vcf ]# ls -l
-rw-r----- 1 root root  2825 Nov 15 13:52 e2e-vcf-tool-create-tf-varfile-from-json.py
-rw-r----- 1 root root  8017 Nov 15 13:53 vcf.json
-rw-r----- 1 root root  1295 Nov 15 13:53 vcf_var.tf

Sample view of the vcf_var.tf file:

# vcf.tfvars file
variable "cloud_builder_username" { default = "admin" }
variable "cloud_builder_password" { default = "xxxxxx" }
variable "cloud_builder_host" { default = "x.x.x.x" }
variable "sddc_manager_root_user_password" {default = "xxxxxx"}
variable "sddc_manager_secondary_user_password" {default = "xxxxxx"}
variable "vcenter_root_password" { default = "xxxxxx"}
variable "nsx_manager_admin_password" { default = "xxxxxx"}
variable "nsx_manager_audit_password" { default = "xxxxxx" }
variable "nsx_manager_root_password" { default = "xxxxxx" }
variable "esx_host1_pass" { default = "xxxxxx" }
variable "esx_host2_pass" { default = "xxxxxx" }
variable "esx_host3_pass" { default = "xxxxxx" }
variable "esx_host4_pass" { default = "xxxxxx" }
variable "nsx_license_key" { default = "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX" }
variable "nsx_license_key" { default = "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX" }
variable "vcenter_license_key" { default = "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX" }
variable "vsan_license_key" { default = "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX" }
variable "esx_license_key" { default = "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX

Pattern D-01: Build a Nested ESXi 8 Host (DHCP) from a local controller

Prerequisites:

  • Pattern C-01D
  • Nested ESXi ova must be uploaded to /usr/local/drop repository of the controller where this script is being run. This can be either the Master Controller or a Node Controller.

Step 1: Navigate to the vcf repo.

cd /usr/local/e2e-patterns/vcf

Step 2: Run the build script using the following parameters (VMNAME = name of virtual machine running ESXi, NUMCPU = CPU, MEMORY_MB = memory in MB):

python3 build-e2ep-nested-esxi8_dhcp.py VMNAME NUMCPU MEMORY_MB

Example:

python3 build-e2ep-nested-esxi8_dhcp.py esxi-test-01 8 32768

Pattern D-01A: Build a Nested ESXi Host (Custom) from a local controller

Prerequisites:

  • Pattern D-01
  • Nested ESXi ova must be uploaded to /usr/local/drop repository of the controller where this script is being run. This can be either the Master Controller or a Node Controller.

Step 1: Navigate to the vcf repo.

cd /usr/local/e2e-patterns/vcf

Step 2: Run the build script using the following parameters (VMNAME = name of virtual machine running ESXi, DNS = comma separated NO SPACES):

python3 build-e2ep-nested-esxi-custom.py VMNAME NUMCPU MEMORY_MB HOSTNAME IPADDRESS NETMASK GATEWAY DNS DOMAIN NTP PASSWORD

Example:

python3 build-e2ep-nested-esxi-custom.py esxi-test-02 8 32768 esxi-test-02 172.16.0.29 255.255.255.0 172.16.0.1 172.16.0.9,8.8.8.8 e2e.local pool.ntp.org VMware1!

Pattern D-01B: Expand Storage Capacity (GB) on an existing nested ESXi 8 host

Prerequisites:

Step 1: Navigate to the vcf repo.

cd /usr/local/e2e-patterns/vcf

Step 2: Run the build script with the following parameters:

python3 build-e2ep-expand-nested-esxi8-capacity.py VMNAME CAPACITYGB

Example:

python3 build-e2ep-expand-nested-esxi8-capacity.py e2ep-008 100

Pattern D-02: Build a Nested ESXi Management Cluster for VCF 5.1 from the Master Controller

Prerequisites:

Step 1: Navigate to the vcf repo.

cd /usr/local/e2e-patterns/vcf

Step 2: Run the build script:

python3 e2ep-mc-build-management-hosts.py build-e2ep-vcf5-managment-hosts.py

Pattern D-02A: Expand Nested ESXi Management Cluster Disk

Warning This Pattern is actively being developed.

Prerequisites:

  • Pattern D-02

Pattern D-03: Build Cloud Builder for VCF 5.1

Prerequisites:

Step 1: Navigate to the vcf repo.

cd /usr/local/e2e-patterns/vcf

Step 2: Run the build script:

python3 e2ep-mc-build-cloudbuilder.py build-e2ep-cloudbuilder.py

Pattern D-03A: (Recommended) Take snapshot of Cloud Builder

Prerequisites:

Step 1: Navigate to the vcsa repo.

cd /usr/local/e2e-patterns/vcsa/

Step 2: Run the build script using sample parameters below:

python3 python3 build-e2ep-snapshot-vm.py e2ep-006 fresh-cb

Pattern D-03: Build VCF 5.1

Warning This Pattern is actively being developed.