new1234.jpg

Archive

Posts Tagged ‘IP Change’

VMware: Migrate vSphere hosts to new ip subnet, new DNS servers, new gateway and rejoin vCenter server with PowerCLI

January 30th, 2012 12 comments

Last month I’ve wrote a script for a company that is merging with a new company in a different datacenter, that means new ip-addresses, new subnet, new gateway, new DNS servers and rejoin vCenter server.. my part was to migrate all (60) VMware vSphere hosts to the new subnet and rejoin the vSphere vCenter cluster… without downtime!

Function:

#Connect to vCenter server
— Specify host
— Enter Host Standby mode
— Move all VM’s to other hosts in cluster
— Re-balance with DRS
— Disconnect host
— Remove host from cluster

#Connect to ESXi Server
— Add new VMKernel Management Network with new range in vSwitch0
— Enable Management option for new VMkernel
— Configure NIC Teaming policy
— Configure new DNS servers
— Configure new VMkernel gateway
— Reboot host

#MANUAL ACTION: Update DNS records at configured DNS servers

#Connect to vCenter server
— Add new record in vCenter server host file with new host ipaddress Management VMkernel
— Add host with new VMkernel Management Network
— Delete old VMkernel from vSwitch0
— Exit Host Standby mode
— Rebalance cluster with DRS

#Script finished
— Next host…>


The script
:

#====================================================================#
#   SCRIPT:       VMware_vSphere_IP_Redesign_v.1.0.ps1               #
#   AUTHOR:       S.Daems - VMpros.nl                                #
#   CREATED:      22/01/2012                                         #
#   MODIFIED:     30/01/2012                                         #
#   VERSION:      v.1.0                                              #
#                                                                    #
#====================================================================#
#   CHANGELOG:                                                       #
#                                                                    #
#    v.1.0                                                           #
#     - Script created                                               #
#                                                                    #
#====================================================================#
#   FUNCTION:                                                        #
#                                                                    #
#   #Connect to vCenter server                                       #
#     Specify host                                                   #
#     Enter Host Standby mode                                        #
#     Move all VM's to other hosts in cluster                        #
#     Re-balance with DRS                                            #
#     Disconnect host                                                #
#     Remove host from cluster                                       #
#                                                                    #
#   #Connect to ESXi Server                                          #
#     Add new VMKernel Management Network with new range in vSwitch0 #
#     Enable Management option for new VMkernel                      #
#     Configure NIC Teaming policy                                   #
#     Configure new DNS servers                                      #
#     Configure new VMkernel gateway                                 #
#     Reboot host                                                    #
#                                                                    #
#   #MANUAL ACTION: Update DNS records at configured DNS servers     #
#                                                                    #
#   #Connect to vCenter server                                       #
#     Add new record in vCenter server host file with new host ip-   #
#     address Management VMkernel                                    #
#     Add host with new VMkernel Management Network                  #
#     Delete old VMkernel from vSwitch0                              #
#     Exit Host Standby mode                                         #
#     Rebalance cluster with DRS                                     #
#                                                                    #
#   #Script finished                                                 #
#     Next host...>                                                  #
#                                                                    #
#====================================================================#
#   NOTE:                                                            #
#                                                                    #
#     - Run this script first in a test environment                  #
#     - Make sure youre ESXi host - vSwitch0 have multiple pNIC's    #
#       and can access both networks/gateway's                       #
#     - Don't forgot to update vCenter Cluster das.isolationaddress2 #
#       if vCenter is configured in a new subnet                     #
#     - Don't forgot to update DNS (A) records at your DNS servers   #
#       with with new ESXi host Management ip-addresses              #
#     - Check if the correct pNIC's are configured for NIC Teaming   #
#     - Check if the correct VMkernel is selected for gateway config #
#     - This script is written with VMware vSphere PowerCLI 5.0.0    #
#                                                                    #
#====================================================================#
#   CUSTOM DEFINITIONS                                               #
#====================================================================#
$vCenterServer = "vCENTER SERVER NAME BY DNS"
$vCenterUsername = "vCENTER DOMAIN\USERNAME"
$vCenterPassword = "vCENTER PASSWORD"
$vCenterDatacenter = "vCENTER DATACENTER NAME"
$vCenterCluster = "vCENTER CLUSTERNAME"
$ESXiHost = "ESXi HOSTS BY DNS"
$RootUser = "ROOT USER ACCOUNT TO CONFIGURE/CONNECT HOST"
$RootPassword = "ROOT PASSWORD TO CONFIGURE/CONNECT HOST"
$Old_MGMT_Network = "ORIGINAL MANAGEMENT VMKERNEL NAME"
$New_MGMT_Network = "NEW MANAGEMENT VMKERNEL IPADDRESS"
$New_MGMT_Subnet = "NEW MANAGEMENT VMKERNEL SUBNET"
$New_VMK_Gateway = "NEW MANAGEMENT VMKERNEL GATEWAY"
$New_DNS01 = "NEW PRIMARY DNS SERVER TO CONFIGURE"
$New_DNS02 = "NEW SECUNDARY DNS SERVER TO CONFIGURE"
New-VICredentialStoreItem -Host "$vCenterServer" -User "$vCenterUsername" -Password "$vCenterPassword" | out-null
New-VICredentialStoreItem -Host "$ESXiHost" -User "$RootUser" -Password "$RootPassword" | out-null
Write-Host "Script will start..." -foregroundcolor yellow

#====================================================================#
#   FASE 1  - vCENTER: MAINTENANCE AND REMOVE HOST FROM vCENTER      #
#====================================================================#
Write-Host "Connect to vCenter Server" -foregroundcolor green
#====================================================================#
Connect-VIServer "$vCenterServer" | out-null
Sleep 10
#====================================================================#
Write-Host "Enter host in Maintenance mode" -foregroundcolor green
#====================================================================#
Set-VMHost "$ESXiHost" -State "Maintenance" -RunAsync | out-null
#====================================================================#
Write-Host "Disconnect host from vCenter Server" -foregroundcolor green
#====================================================================#
Set-VMHost "$ESXiHost" -State "Disconnected" -RunAsync | out-null
#====================================================================#
Write-Host "Tell DRS to re-balance VMs including the rejoined host" -foregroundcolor green
#====================================================================#
Get-DrsRecommendation -Cluster "$vCenterCluster" | where {$_.Reason -eq "Host is entering maintenance mode"} | Apply-DrsRecommendation | out-null
#====================================================================#
Write-Host "Remove host from vCenter Server" -foregroundcolor green
#====================================================================#
Remove-VMHost "$ESXiHost" -Confirm:$false | out-null
#====================================================================#
Write-Host "Disconnect from vCenter Server" -foregroundcolor green
#====================================================================#
Disconnect-VIServer -Confirm:$False | out-null

#====================================================================#
#   FASE 2 - HOST: RE-CONFIGURE MANAGEMENT NETWORK                   #
#====================================================================#
Write-Host "Connect directly to ESXi host" -foregroundcolor green
#====================================================================#
Connect-VIServer "$ESXiHost" | out-null
Sleep 10
#====================================================================#
Write-Host "Configure new management network" -foregroundcolor green
#====================================================================#
Get-VMHost "$ESXiHost" | New-VMHostNetworkAdapter -VirtualSwitch "vSwitch0" -PortGroup "MGMT Network" -IP "$New_MGMT_Network" -SubnetMask "$New_MGMT_Subnet" -ManagementTrafficEnabled:$true -Confirm:$false | out-null
#====================================================================#
Write-Host "Configure vSwitch0 - MGMT NIC Teaming Policy" -foregroundcolor green
#====================================================================#
Get-VMHost "$ESXiHost" | Get-VirtualPortGroup -name "MGMT Network" | Get-NicTeamingPolicy | Set-NicTeamingPolicy -MakeNicActive vmnic0 | out-null
Get-VMHost "$ESXiHost" | Get-VirtualPortGroup -name "MGMT Network" | Get-NicTeamingPolicy | Set-NicTeamingPolicy -MakeNicStandby vmnic2 | out-null
#====================================================================#
Write-Host "Configure new DNS servers" -foregroundcolor green
#====================================================================#
Get-VMHost "$ESXiHost" | Get-VMHostNetwork | Set-VMHostNetwork -DnsAddress "$New_DNS01","$New_DNS02" | out-null
#====================================================================#
Write-Host "Change VMkernel Gateway" -foregroundcolor green
#====================================================================#
$net = Get-VMHostNetwork
$net | Set-VMHostNetwork -VMKernelGateway "$New_VMK_Gateway" -VMKernelGatewayDevice "vmk2" | out-null
#====================================================================#
Write-Host "Reboot ESXi Host" -foregroundcolor green
#====================================================================#
Restart-VMHost -VMHost "$ESXiHost" -Confirm:$false | out-null
#====================================================================#
Write-Host "Disconnect from ESXi host" -foregroundcolor green
#====================================================================#
Disconnect-VIServer -Confirm:$False | out-null
Write-Host "Update DNS (A) records at you're Domain Controller with new ESXi ipaddress, otherwise the script will fail..!!" -foregroundcolor white
Write-Host "Update DNS (A) records at you're Domain Controller with new ESXi ipaddress, otherwise the script will fail..!!" -foregroundcolor white
Write-Host "Update DNS (A) records at you're Domain Controller with new ESXi ipaddress, otherwise the script will fail..!!" -foregroundcolor white
Sleep 360

#====================================================================#
#   FASE 3  - vCENTER: EXIT MAINTENANCE AND RE-ADD HOST TO vCENTER   #
#====================================================================#
Write-Host "Connect to vCenter Server" -foregroundcolor green
#====================================================================#
Connect-VIServer "$vCenterServer" | out-null
Sleep 10
#====================================================================#
Write-Host "New Management Network to vCenter Server host file" -foregroundcolor green
#====================================================================#
$hostsPath = “$env:windir\System32\drivers\etc\hosts”
$hosts = get-content $hostsPath
$string = “$New_MGMT_Network             $ESXiHost”
$hosts = $hosts + $string
$hosts | Out-File $hostsPath -enc ascii
#====================================================================#
Write-Host "Add ESXi host to vCenter Server" -foregroundcolor green
#====================================================================#
Add-VMHost "$ESXiHost" -location (Get-Datacenter -name "$vCenterDatacenter" | Get-Cluster -name "$vCenterCluster") -user root -password $RootPassword -force | out-null
#====================================================================#
Write-Host "Remove old Management Network from host" -foregroundcolor green
#====================================================================#
#$vNic = Get-VMHostNetworkAdapter -VMHost $ESXiHost | where {$_.PortgroupName -eq $Old_MGMT_Network} | out-null
#Remove-VMHostNetworkAdapter -Nic $vNic | out-null
#====================================================================#
Write-Host "Exit host from Maintenance mode" -foregroundcolor green
#====================================================================#
Set-VMHost "$ESXiHost" -State "Connected" -RunAsync | out-null
#====================================================================#
Write-Host "Tell DRS to re-balance VMs including the rejoined host" -foregroundcolor green
#====================================================================#
Get-DrsRecommendation -Cluster "$vCenterCluster" | where {$_.Reason -eq "Host is entering maintenance mode"} | Apply-DrsRecommendation | out-null
#====================================================================#
Write-Host "Disconnect from vCenter Server" -foregroundcolor green
#====================================================================#
Disconnect-VIServer -Confirm:$False | out-null

#====================================================================#
#   FASE 4  - SCRIPT FINISHED                                        #
#====================================================================#
Write-Host "Script finished, please check error log..." -foregroundcolor yellow
#====================================================================#

The script is finished:

image

Custom settings:

$vCenterServer = "vCENTER SERVER NAME BY DNS"
$vCenterUsername = "vCENTER DOMAIN\USERNAME"
$vCenterPassword = "vCENTER PASSWORD"
$vCenterDatacenter = "vCENTER DATACENTER NAME"
$vCenterCluster = "vCENTER CLUSTERNAME"
$ESXiHost = "ESXi HOSTS BY DNS"
$RootUser = "ROOT USER ACCOUNT TO CONFIGURE/CONNECT HOST"
$RootPassword = "ROOT PASSWORD TO CONFIGURE/CONNECT HOST"
$Old_MGMT_Network = "ORIGINAL MANAGEMENT VMKERNEL NAME"
$New_MGMT_Network = "NEW MANAGEMENT VMKERNEL IPADDRESS"
$New_MGMT_Subnet = "NEW MANAGEMENT VMKERNEL SUBNET"
$New_VMK_Gateway = "NEW MANAGEMENT VMKERNEL GATEWAY"
$New_DNS01 = "NEW PRIMARY DNS SERVER TO CONFIGURE"
$New_DNS02 = "NEW SECUNDARY DNS SERVER TO CONFIGURE"


sanderdaems

Sander Daems is founder and author of this blog and working as a Lead (Sr.) Consultant by UNICA ICT Solutions. Sander has over 15 years experience in IT, primary focus: virtualization and modern worksplace.

More Posts - Website

Follow Me:
TwitterLinkedIn