[Powercli] Script : Déployer des VMs avec des configurations aléatoires

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

vCenter Task

Et le résultat, des VMs avec une configuration mémoire/cpu différentes

VM créées

 

Vous trouverez le script ici : DeployVMLAb.ps1

Enjoy !

 

Laisser un commentaire