With VMware Cloud Foundation, there is a number of prerequisites needed to be configured on an ESXi host before it can be commissioned or used for a management domain bringup.
When dealing with multiple ESXi hosts it is often quicker to script the configuration needed.
Based on the official documentation, the following needs to be configured before we can use the ESXi host with VCF:
1. DNS configuration (DNS servers, domain name, search domain)
2. NTP and SSH started and policy set to Start and stop with host
3. VM Network
portgroup tagged with the same VLAN ID as Management Network
In addition to this, I often add the license key and rename the local datastore as part of the preparation.
Attached is a PowerCLI script that can be used to speed up the preparation.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | <# Written by Martin Gustafsson, mgustafsson (at) vmware.com This is a script used to prepare ESXi hosts for VMware Cloud Foundation Deployments. It can be used for both the management domain and VI workload domains. It uses the ESXi hosts defined in C:\temp\esxlist.txt, one host per line. The following is being configured: Add the ESXi license Start SSH and configure the policy to Start and Stop with the Host Start NTP, configure the NTP source and set the policy to Start and stop with the Host Configuring DNS servers, domain name and search domains. Tag the portgroup "VM Network" with the same VLAN ID as the Management Network Rename the local datastore to <short name>.local This is based on the requirements as per our official documentation #> $user = "root" $Passwd = "VMware123!" $esxlist = get-content C:\temp\esxlist.txt $license = "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX" $ntpserver = "se.pool.ntp.org" $domainname = "eng.vmware.com" $searchdomain = "eng.vmware.com" $dns1 = "10.0.0.1" $dns2 = "10.0.0.2" foreach ( $esx in $esxlist ) { Connect-VIServer $esx -User $user -Password $Passwd Write-Host -Object "Adding license key on $esx" -ForegroundColor Green Set-VMHost -VMHost $esx -LicenseKey $license Write-Host -Object "Starting SSH on $esx" -ForegroundColor Green $sshstatus = Get-VMHostService -VMHost $esx | where { $psitem .key -eq "tsm-ssh" } if ( $sshstatus .Running -eq $False ) { Get-VMHostService | where { $psitem .key -eq "tsm-ssh" } | Start-VMHostService } Get-VMHostservice | Where-object { $_ .key -eq "tsm-ssh" } | Set-VMHostService -policy "On" Write-Host -Object "Configuring NTP to $ntpserver on $esx" -ForegroundColor Green Add-VMHostNtpServer $ntpserver Get-VMHostFirewallException | where { $_ .Name -eq "NTP client" } | Set-VMHostFirewallException -Enabled : $true Get-VMHostService | Where-Object { $_ .key -eq "ntpd" } | Start-VMHostService Get-VMHostService | Where-Object { $_ .key -eq "ntpd" } | Set-VMHostService -policy "On" Write-Host "Configuring DNS and Domain Name on $esx" -ForegroundColor Green Get-VMHostNetwork -VMHost $esx | Set-VMHostNetwork -DomainName $domainname -DNSAddress $dns1 , $dns2 -SearchDomain $searchdomain -Confirm : $false Write-Host "Getting VLAN ID from Management Network on $esx" -ForegroundColor Green $vlanid = Get-VirtualPortgroup -name "Management Network" | % { $pg = $_ ; get-vmhostnetworkadapter -portgroup $pg | % { "$($pg.vlanid)" }} Write-Host -Object "Tagging VM Network with vlan $vlanid on vSwitch0 on $esx" -ForegroundColor Green Get-VirtualSwitch -name vSwitch0 | Get-VirtualPortgroup -name "VM Network" | Set-VirtualPortgroup -vlanid $vlanid Write-Host -Object "Renaming local datastore to .local on $esx" -ForegroundColor Green Get-Datastore -Name datastore1* | %{ $n = '' + ( Get-VMHost -Id $_ .ExtensionData.Host[0].Key[0]).Name.Split( '.' )[0] + '.local' ; Set-Datastore -Datastore $_ -Name $n } Disconnect-VIserver * -confirm : $false } |
Thank you Martin for this Amazing script,
Just a quick tip for anyone using Powershell from Linux. You can directly store your hosts in the variable.
Eg:
$esxlist = ‘10.0.0.10’, ‘10.0.0.11’, ‘10.0.0.12’
thanks