Déployer Automatiquent des VMs en PowerShell (Partie 2)

Déployer Automatiquent des VMs en 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.

Dans les contrôles préalables au déploiement d’une VM, il ne faut pas oublier  de vérifier, qu’au moins un ESXI de votre cluster de destination à les ressources CPU et mémoire pour héberger votre Machine Virtuel.

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 (Nbre Socket * Nbre Coeur = Nbre CPU ) sur la machine et 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-xxxx

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

Comme vous pouvez vous en douter, les paramètres de la cmdlet « New-NetworkAdapter »sont les mêmes paramètres que la commande « Set-NetworkAdapter »

A la création de la carte réseau, si vous n’indiquez pas de type de carte  (Vmxnet, Vmxnet3, e1000, Flexible,…) , ce sera le type recommandé par VMware qui sera utilisé.

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 dimensionner 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.

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

Ici, on va indiquer le format du disque (Thin, Thick ou EagerZeroedThick) et la capacité en Go. Vous pouvez aussi spécifier la localisation et d’autres paramètres. Je vous laisse lire la documentation de la commande  New-HardDisk ici

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 comme nous  vous êtes toujours dans une version inférieur à la 6.5, vous utiliser peut-être toujours le client lourd et ses annotations, avant de bientôt passer aux TAGS en 6.5 et 6.7

On va donc utiliser 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 dans n’était pas si simple jusqu’à la version POWERCLI 6.5.1 . C’est avec cette version que son apparue toutes les cmdlet necessaire à 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 ajouté à ce DRS votre VM.

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

Lire la Partie 1
No Comments

Sorry, the comment form is closed at this time.