Automatiser le déploiement de machines virtuelles avec PowerShell – Partie 2

Automatiser le déploiement de machines virtuelles avec PowerShell – Partie 2

Dans le premier billet nous avons vu , les commandes PowerShell nécessaire au déploiement d’une VM et comment vérifier les étapes de customisation de l’OS.

Maintenant nous allons détailler les commandes pour l’ajout et la modification de Cpu, de Mémoire, de volume Disque et des cartes réseaux.

Pour customiser  la VM, nous allons tout d’abord l’arrêter …

Shutdown-VMGuest -VM $myVM.name -confirm:$false -ErrorAction Stop

Une fois le ShutDown initier, nous allons attendre que le statut de la VM  nous renvoi la valeur « PoweredOff ». Vous pouvez insérer dans votre fonction un TimeOut pour ne pas rester bloquer sur le déploiement d’une VM qui ne voudrait pas s’arrêter.

(Get-vm -name $objectVm.name).PowerState -ne « PoweredOff »

Une fois que la VM est arrêtée,  nous allons commencer la phase de customisation du HardWare

1 – Paramétrage de la Mémoire

Pour le paramétrage de la mémoire, on utilise la cmdlet Set-vm avec l’argument MemoryGB.  vous pouvez trouver ici le détail des arguments utilisables avec cette cmdlet.

Comme nous stockons ce paramètre en MB, nous devons dans notre fonction la convertir en GB avant d’opérer le paramétrage. Pour l’arrondi nous utilisons la méthode [math]::Floor [decimal]

Get-vm -name $objectVm.name | Set-vm -MemoryGB $vmemoryGB -Confirm:$false -ErrorAction Stop

2 – Paramétrage des vCPU

Pour le paramétrage CPU de la Vm, on va s’appuyer sur les commandes « VirtualMachineConfigSpec » et « ReconfigVM_Task ».

Avec la commande VirtualMachineConfigSpec, on va créer un objet « cpuspec » dans lequel on va encapsuler les nouveaux  paramètres (processeurs)  de la Vm. vous pouvez consulter ici les différents paramètres modifiable.

Puis avec à la commande « ReconfigVM_Task« , on va modifier la VM avec l’objet « cpuspec » .

$cpuspec = New-Object -Type VMware.Vim.VirtualMachineConfigSpec -Property @{« NumCoresPerSocket » = $objectVm.nbCoeur; »NumCPUs » = $numCPU}

$nameVm.ExtensionData.ReconfigVM_Task($cpuspec)

  • Quand on crée l’objet « cpuspec », on lui transmet deux paramètres :
    • Le nombre de CPU sur la machine .  Nbre CPU = Nbre Socket * Nbre Coeur
    • Le nombre de cœur par Socket.

3 – Paramétrage du Réseau

Pendant le déploiement de notre Vm, nous avons configuré les paramètres réseau (IP, DNS..) associé à la carte réseau  présente sur notre Template, il ne nous reste donc plus qu’à placer notre VM dans le bon réseau VMWare et si nécessaire dans certain cas à ajouter une seconde carte réseau.

Get-vm -name $objectVm.name | Get-NetworkAdapter | Set-NetworkAdapter -NetworkName $objectVm.reseau1 -Confirm:$false -ErrorAction Stop

Pour configurer l’interface réseau de la VM,  on utilise la cmdlet « Set-NetworkAdapter » avec l’option « NetworkName »,   dont vous pouvez trouver la documentation ici.

Cette cmdlet permet notamment de changer l’adresse mac de la carte, de changer le type de carte (e1000, Flexible, Vmxnet, Vmxnet3, …)

Pour créer une nouvelle carte, bien évidemment la commande est du type New-NetworkAdaptater

Get-vm -name $objectVm.name | New-NetworkAdapter -NetworkName $objectVm.reseau2 -Type Vmxnet3 -Confirm:$false -ErrorAction Stop

Voila, nos cartes sont maintenant crées et dans le bon réseau…

4 – Ajout des disques

Les Templates de nos Vms Linux et Windows ont un disque système dimensionné par nos administrateurs systèmes, après de 700 à 800 déploiements, je n’ai jamais eu à modifier la taille, nous avons donc fait de choix de ne pas toucher au disque système dans le script, nous effectuons que des ajouts de disque supplémentaire.

Get-vm -name $objectVm.name | New-HardDisk -CapacityGB $objectVm.disks[$i] -StorageFormat Thin -ErrorAction Stop

Notre Vm est Maintenant presque finalisé, il nous reste quelques détails comme les annotations et  l’ajout au DRS Group ……

5 – Ajout des annotations

Si vous utilisez les annotations pour annoter vos vms, il faut donc les mettre à jour , pour cela on utilise la cmdlet « set-annotation -customattribute annotation1 ».

Get-vm -name $objectVm.name | Set-annotation -customattribute S_DATECREAT -Value $DateDebut

Les annotations sont maintenant insérées, il ne vous reste plus qu’a placer votre VM dans un DRS-GROUP (enfin, si vous les utilisez….) .

6 – Ajout de la VM à un DRS-Group

Ajouter une vm à un DRS-Group n’était pas si simple jusqu’à la version POWERCLI 6.5.1 . C’est avec cette version que sont apparue toutes les cmdlet nécessaire à la gestion du DRS-GROUP.

    • Get-DrsClusterGroup
    • New-DrsClusterGroup
    • Set-DrsClusterGroup
    • Remove-DrsClusterGroup
    • Get-DrsVMHostRule
    • New-DrsVMHostRule
    • Set-DrsVMHostRule
    • Remove-DrsVMHostRule

vous pouvez lire sur ce sujet l’article du blog.vmware.com

Get-DrsClusterGroup -cluster $myVM.cluster -name $myVM.drsGroup | set-drsclustergroup -vm $($myVM.name) -add -ErrorAction Stop

La commande est assez facile à comprendre, vous récupérer pour un cluster le contenu d’un DRS-Group et vous ajoutez à ce DRS votre nouvelle vm.

Le déploiement est fini, vous n’avez plus qu’a redémarrer votre serveur .

No Comments

Sorry, the comment form is closed at this time.