Ce message est également disponible en : Anglais
[Powercli] Script : Déployer des VMs avec des configurations aléatoires
Comment déployer des VMs avec des configurations aléatoires via un template pour votre labo.
Pour mes labs, j’ai eu souvent besoin de créer des VMs rapidement soit en clonant une VM soit à partir d’un template.
J’ai donc fait un script pour déployer des VMs à partir d’un template et ceci de façon aléatoire, aussi bien d’un point de vue vCPU et mémoire que ESX et datastore. Le but étant de pouvoir provisionner le plus facilement possible.
########################################################################## ## Version : 1.0 ## ## Created by : Julien VARELA ## ## Release Date : 12/12/2016 ## ## Name : DeployVMLAb.ps1 ## ## ## ########################################################################## ##Verif des modules VMware $PSNAP= Get-PSSnapin VMware.VimAutomation.Core -erroraction ‘silentlycontinue’ if ($? -eq $false) { ##Load VMware Modules Write-Host " Loading VMware modules " asnp vmware.* } Else { Write-host " VMware modules are already loaded " } $vCenter = Read-Host "vCenter FQDN" $login = $host.ui.PromptForCredential("User/Password", "please type your log in and password ", " ", " NetBiosUserName ") $VMs=read-host "Number of VMs to deploy" connect-viserver -server $vcenter -credential $login $i=1 # Initialize variable to 1. [string]$NamingConvention = "LABTEST-VM-" # Naming convention for your VMs [string]$folderLoc = "Discovered virtual machine" # Name of the folder where the VMs will be deployed $SourceVM = "W2K12R2_Template" #Template Name $OsConfiguration =Get-OSCustomizationSpec -name "W2K12R2_CUSTOM" #Name of the customization spec while ($i -le $VMs) { $NumCPUs = (Get-Random -Minimum 1 -Maximum 6) #vCPU configuration (Between 1 and 6) $MemoryGB = ("4","6","8","10","12") | Get-Random #Memory configuration (Bewteen 4 and 12 GB) $targetDatastore = Get-Datastore | Where {($_.ExtensionData.Summary.MultipleHostAccess -eq "True") -and ($_.FreeSpaceMB -gt "50000")} | Get-Random $targetVMhost = Get-VMHost | Where { $_.ConnectionState -eq "Connected" } | Get-Random # Select a connected host $VMName = $NamingConvention + $i if ((Get-VM $VMName -ErrorAction SilentlyContinue).Name -eq $VMName) { #Check if VM already existe Write-Host "$VMName already exist, task will be skipped" -ForegroundColor Yellow } else { Write-Host "Deployment of the VM $VMName in the folder $folderLoc ..." -ForegroundColor Green #Create our VM $task = New-VM -name $VMName -Template $SourceVM -OSCustomizationSpec $OsConfiguration -Datastore $targetDatastore -VMHost $targetVMhost -RunAsync #VM creation based on the template while($task.ExtensionData.Info.State -eq "running"){ sleep 2 $task.ExtensionData.UpdateViewData('Info.State') } $task = Set-VM $VMName -NumCpu $NumCPUs -MemoryGB $MemoryGB -Confirm:$false -RunAsync #VM configuration while($task.ExtensionData.Info.State -eq "running"){ sleep 2 $task.ExtensionData.UpdateViewData('Info.State') } sleep 3 $task =Start-VM -VM $VMName -Confirm:$false # Start of the VM while($task.ExtensionData.Info.State -eq "running"){ sleep 2 $task.ExtensionData.UpdateViewData('Info.State') } } $i++ }
Une fois le script exécuté vous pourrez voir l’avancement dans votre vCenter
Et le résultat, des VMs avec une configuration mémoire/cpu différentes
Vous trouverez le script ici : DeployVMLAb.ps1
Enjoy !