VMware Script de déploiement Standards vSwitch

VMware Script de déploiement Standards vSwitch

18 décembre 2015 3 Par Michael PERES


Script de configuration réseau – vSphere Standard vSwitch

Voici un script qui vous permettra de créer plusieurs vSwitchs afin d'éviter de passer sur chaque serveur ESX d'un cluster.
L'idée est de passer directement par le vCenter grâce à PowerCLI, et de faire appel à un fichier texte contenant le nom des vSwitchs.
Vous pourrez ainsi gérer cette liste de nom de vSwitch, et éviter des erreurs de saisie qui empêcheraient le déplacement des VMs lors d'un vMotion par exemple.
Pour cela, il vous faudra un poste sous Windows, avec PowerCLI installé.
Nous allons tout d'abord expliquer les différentes variables qui devront être modifiées de façons à correspondre à votre environnement, et qui seront appelées durant l'exécution du script :
$SubNet_default="255.255.255.0"
> Entrez le masque de sous réseau
$VLAN_default="1"
> Entrez l'ID du vLAN*
$vcenter_default="192.168.1.26"
> Adresse IP ou nom NetBios du vCenter
#$basic_host="ESXi_1"
$DomainName="vstory.local"
> Nom de domaine
$DNSSearch="vstory.local"
> Nom de domaine pour la zone DNS
$first_DNS="192.168.1.1"
> Adresse IP ou nom NetBios du serveur DNS primaire
$second_DNS="192.168.1.2"
> Adresse IP ou nom NetBios du serveur DNS secondaire
#$new_host=$basic_host+"."+$DomainName
$management_addOn="redundant"
$kernel_addOn="VMkernel"
$default_cluster="VS_cluster"
> Nom du Cluster
$default_timeserver1="192.168.1.1"
> Adresse IP ou nom NetBios du serveur NTP primaire
$default_timeserver2="192.168.1.2"
> Adresse IP ou nom NetBios du serveur NTP secondaire

Vous devrez créer un fichier de type ".txt" contenant le nom de vos vSwitchs. Ce script sera appelé dans le script à travers un chemin, que vous devrez renseigner. Pour cela, lorsque vous aurez copier-collé le script, identifiez le passage suivant, puis modifiez le chemin :

function config_vswitch1 {
# adding all portgroups
$portgroups = get-content -path C:/Scripts/VMware/Network/portgroups.txt

Voici un exemple du fichier ".txt" qui devra contenir les noms de vos vSwitchs :

001_Default_VLAN
002_Server_VLAN_Test1
003_Server_VLAN_Test2
004_Server_VLAN_Test3
005_Server_VLAN_Test4
012_Server_VLAN_Test5
032_Network_TEST
032_Internet_Test
033_DMZ_Test
035_Web_Test
042_Isolated
047_PXE_WINDOWS_ONLY
048_PXE_LINUX_ONLY

J'ai souhaité ajouter aussi à mon script, une connection à un partage NFS sur mon lab. Si vous n'avez pas besoin de connecter un partage NFS à vos serveurs ESX, supprimez les lignes ci-dessous, ou bien mettez un "#" devant la ligne.

function add_nfsServer {
New-Datastore -Nfs -VMHost $new_host -Name VS_NFS_01 -Path /mnt/data_nfs/data_nfs/data_nfs -NfsHost 192.168.1.13

Attention : Certains passages comme la reconfiguration de VMware HA ou la configuration du Round Robin en fin de script ne correspondront peut-être pas à votre configuration. Vous êtes libre de désactiver ou bien de supprimer ces lignes.

Voici maintenant le script qu'il vous faudra "copier-coller" dans un éditeur de texte, puis l'enregistrer en ".ps1", puisque vous exécuterez avec PowerCLI :

# defining defaults
$SubNet_default="255.255.255.0"
$VLAN_default="1"
$vcenter_default="192.168.1.26"
#$basic_host="ESXi_1"
$DomainName="vstory.local"
$DNSSearch="192.168.1.1"
$first_DNS="192.168.1.1"
$second_DNS="192.168.1.2"
$new_host=$basic_host+"."+$DomainName
$management_addOn="redundant"
$kernel_addOn="VMkernel"
$default_cluster="VS_cluster"
$default_timeserver1="192.168.1.1"
$default_timeserver2="192.168.1.2"

############################################################
function create_connection {
Write-Host "*** Welcome to configuration ESX/ESXi host ***"
$vCenter = Read-Host "Please enter the vCenter (default VC_vstory press enter)"
if ( $vCenter.length -eq 0 ) { $vCenter = $vcenter_default }

Connect-VIServer $vCenter

}
function config_ntp {
$new_host
#Remove-VmHostNtpServer -NtpServer "" -VMHost $new_host /// might be handy too
Add-VMHostNtpServer -NtpServer $default_timeserver1 -VMHost $new_host
Add-VMHostNtpServer -NtpServer $default_timeserver2 -VMHost $new_host
#Get-VmhostFirewallException -Name ìNTP Clientì |Set-VMHostFirewallException -enabled:$true;
Set-VMHostService -HostService (Get-VMHostservice -VMHost (Get-VMHost $new_host) | Where-Object {$_.key -eq "ntpd"}) -Policy "Automatic"
$ntpd = Get-VMHostService -VMHost $new_host | where {$_.Key -eq 'ntpd'}
Restart-VMHostService $ntpd -Confirm:$false
}
function config_dns {
$vmHostNetworkInfo = Get-VmHostNetwork -VMHost $new_host
Set-VmHostNetwork -Network $vmHostNetworkInfo -DomainName $DomainName -SearchDomain $DNSSearch
Set-VmHostNetwork -Network $vmHostNetworkInfo -DnsAddress $first_DNS, $second_DNS

}

function add_nfsServer {
New-Datastore -Nfs -VMHost $new_host -Name VS_NFS_01 -Path /mnt/data_nfs/data_nfs/data_nfs -NfsHost 192.168.1.13
}
function get_hosts {
$new_host=Get-Cluster $default_cluster|get-vmhost
$new_host
}
function config_vswitch1 {
# adding all portgroups
$portgroups = get-content -path C:/Scripts/VMware/Network/portgroups.txt
Get-VMHost -Name $new_host | New-VirtualSwitch -Name "vSwitch1"
$vs1 = Get-VirtualSwitch -VMHost $new_host -Name vSwitch1
foreach ($portgroup in $portgroups) {New-VirtualPortGroup -VirtualSwitch $vs1 -Name $portgroup -VLANID $portgroup.substring(0,3)}
$vs1_uplink = Set-VirtualSwitch -VirtualSwitch $vs1 -NIC vmnic1,vmnic2 -Confirm:$false
# end adding all port groups
# adding redundant management-interface
$management2port=$basic_host+$management_addOn
$tempport=[System.Net.Dns]::GetHostAddresses("$management2port")
$management2port="$tempport"
$vpg=New-VMHostNetworkAdapter -VMHost $new_host -PortGroup "Management_Network2" -VirtualSwitch $vs1 -IP $management2port -SubnetMask $SubNet_default
$vpg=Get-VirtualPortgroup -vmhost $new_host -Name "Management_Network2"
Set-VirtualPortGroup -VirtualPortGroup $vpg -VlanId $VLAN_default

# this tricks the esxi host use a second port for management.
$h = Get-VMHost $new_host | Get-View -Property configManager
$nicManager = Get-View $h.configManager.virtualNicManager
$nicManager.SelectVnicForNicType("management", "vmk1")
# END adding redundant management-interface

}

function config_vswitch0 {
# adding vmkernel port
$vmkernelport=$basic_host+$kernel_addOn
$tempkernel=[System.Net.Dns]::GetHostAddresses("$vmkernelport")
$ipkernel="$tempkernel"
$vs0 = Get-VirtualSwitch -VMHost $new_host -Name vSwitch0
New-VMHostNetworkAdapter -VMHost $new_host -PortGroup "VMkernel" -VirtualSwitch $vs0 -IP $ipkernel -SubnetMask $SubNet_default -VMotionEnabled:$true
# end adding vmkernel port

# adding the second physic NIC
$vs0_uplink = Set-VirtualSwitch -VirtualSwitch $vs0 -NIC vmnic0,vmnic3 -Confirm:$false

}
function config_roundrobin {
Get-VMHost $new_host |Get-ScsiLun -LunType "disk"|where {$_.MultipathPolicy -ne "RoundRobin"}| Set-ScsiLun -MultipathPolicy "RoundRobin"
}
function re_config_HA {
$vmhost = get-vmhost -name $new_host; $hostMO = Get-View -ID $vmhost.ID; $hostMO.ReconfigureHostForDAS()
}
# main part
############################################################
create_connection

# reading input
clear-host
$basic_host = Read-Host "Please give in host you want to configure (only hostname NO FQDN!!!)"
$new_host=$basic_host+"."+$DomainName
write-host "Going to configure:" $new_host
# end reading input

get_hosts
config_ntp
config_dns
add_nfsServer
config_vswitch1
config_vswitch0
config_roundrobin

 

Bien sûr ce script est à tester dans un environnement de test ou un LAB au préalable, mais chez moi, ça fonctionne.

Enjoy !

 

 

___________________________________________________________________________________