Automatiser la migration de vos machines virtuelles avec SCVMM 2008R2 (Part 1-2) PDF Imprimer Envoyer
Note des utilisateurs: / 3
MauvaisTrès bien 

System Center Virtual Machine Manager 2008 R2 (SCVMM) – Automatiser la migration de vos machines virtuelle (Part 1-2)

Source Technet par Cédric Bravo.

SCVMM 2008R2 est un outil fantastique qui permet la gestion des fermes de serveurs de virtualisation ainsi que les machines virtuelles associées.

Il facilite la gestion des fermes de serveurs Hyper-V, Virtual Server, Vmware VI3 et notamment la prise en charge des environnements de clusters de virtualisation.

 


 

Basé sur Powershell, l’installation de la console d’administration de SCVMM 2008 R2 ajoute plus de 130 Command Let Additionnels dédiés à la gestion des machines virtuelles.

 


Très simples à prendre en main, ces nouveaux command let permettent de réaliser des scénarios  d’automatisation complexes.

 

Scénario : Automatiser la migration de vos machines virtuelles d’un cluster à un autre

Dans le cadre d’une migration depuis un Cluster Hyper-V 2008 R1 vers un nouveau cluster Hyper-V 2008 R2, vous souhaitez automatiser le déplacement de vos machines virtuelles.

Le processus de migration est long et fastidieux. Les contraintes sont fortes et il est souvent nécessaire de procéder en horaires non ouvrés pour assurer le transfert de vos machines virtuelles.

Heureusement, PowerShell et les différents Cmdlet de SCVMM 2008 R2 permettent d’automatiser ces tâches efficacement en quelques lignes.

 

Se connecter au serveur SCVMM.

Pour exécuter des commandes SCVMM, il est nécessaire d’établir une connexion au serveur à l’aide du Cmd-Let « Get-SCVMMServer »

La connexion au serveur SCVMM est un pré requis systématique à toute commande SCVMM.

PS>get-VMMServer "Myserver"

 


Une fois la connexion invoquée, celle-ci est valable pendant toute la session Powershell.

 

Identifier les machines que vous souhaitez migrer.

Avant de réaliser votre script de migration il est nécessaire d’identifier la liste des machines virtuelle à déplacer.

Dans le cadre d’une migration depuis un serveur Hyper-V R1 vers hyper-V R2, vérifier les points suivants :

·         Retirer les images ISO montées dans le lecteur CDROM de la machine virtuelle.

·         Supprimer tous les points de restauration. Pour compléter la fusion des disques différentiels utilisés par les points de restauration, vous devez stopper la machine virtuelle et attendre que la fusion soit complétée.

Note : l’état d’avancement de la fusion des disques n’est pas disponible dans SCVMM, vous devez consulter la console Hyper-V.

Une fois votre liste constituée et vos machines vérifiées, vous pouvez concevoir votre script de migration. Dans un premier temps, nous allons concevoir un script capable de migrer un seule machine, puis, dans la deuxième partie de cet article, nous l’adapterons pour qu’il soit en mesure de migrer toutes les machines définie dans notre fichier.

Pour réaliser cette opération,  nous avons besoin de passer par les étapes suivantes.

 

Etape 1 : Créer un GUID de Job SCVMM

Dans le monde du scripting, les commandes sont exécutées lignes par lignes de manière séquentielle.

SCVMM possède un système de commande « asynchrone », c'est-à-dire qu’il est possible de récupérer la main directement après la prise en compte d’une commande, celle-ci étant mise dans une file de tâches à exécuter en arrière plan, les « Jobs SCVMM ». Certaines commandes SCVMM nécessitent d’êtres groupées au sein d’un même job pour fonctionner. SCVMM assure de manière transparente l’ordonnancement de ces tâches.

Dans SCVMM, chaque job est caractérisé par un identifiant unique, le GUID, pour assigner des tâches à un job, il suffit de lui assigner un identifiant unique.

Pour créer ce GUID, il est nécessaire d’utiliser la classe Dot Net  [System::Guid]

P>$NewJobGroup = [System.Guid]::NewGuid()

 

Etape 2 : Stopper la machine virtuelle.

Lors d’une migration d’un cluster Hyper-V  à un autre, la machine doit être stoppée (en effet la migration live n’est disponible qu’au sein d’un même cluster). De plus le scénario illustré ici concerne le déplacement de machines virtuelles située sur un cluster Hyper-V R1, vers un cluster Hyper-V R2 (utilisant des Clustered Shared Volumes).

Dans un premier temps, nous allons récupérer l’objet qui représente notre machine virtuelle avec le Cmd-Let Get-VM, puis nous pourrons l’arrêter proprement à l’aide du Cmd-Let Shutdown-VM.

L’objet machine virtuelle ainsi récupéré pourra nous servir pour des usages futurs dans notre script.

#Récupérer l’objet machine virtuelle.

$VmName = "Nom de la machine virtuelle à stopper"

$VM = Get-Vm $VmName

#Stopper la machine virtuelle

Shutdown-VM $VM

 

Etape 3 : Reconfigurer les cartes réseau

Lors du déplacement, il est nécessaire de reconfigurer les attachements réseau des cartes virtuelles  afin de les raccorder au nouveau réseau disponible sur la machine cible.

Dans un premier temps, nous allons récupérer les objets représentant nos cartes réseaux à l’aide du Cmd-Let Get-VirtualNetworkAdapter. Puis nous utiliserons le Cmd-Let Set-VirtualNetworkAdapter pour reconfigurer la carte réseau.

Comme le nouveau réseau ne sera disponible qu’une fois la machine virtuelle déplacée sur le nouveau serveur Hyper-V, nous allons préciser que nous souhaitons une exécution asynchrone et assigner la reconfiguration de notre carte au GUID de job récupéré précédemment.

Le paramètre « -All » du Cmd-Let Get-VirtualNetwokAdapter stipule que nous souhaitons récupérer toutes les cartes réseau de toutes les machines virtuelles gérées par SCVMM.

#Récupération des objets cartes réseau

 $VirtualNetworkAdapter = Get-VirtualNetworkAdapter -All | where {$_.name -eq $vm.name}

Set-VirtualNetworkAdapter -VirtualNetworkAdapter $VirtualNetworkAdapter –VirtualNetwork "Nom_Lan_Cible" -RunAsynchronously -JobGroup $NewJobGroup

 

Note : La variable “$_” représente l’objet en cour passé à travers le « pipe » lors de chaque itération. Ici nous récupérons tous les objets carte réseau gérés par SCVMM, puis nous filtrons ces objets pour ne retenir que ceux dont la propriété « Name » est égale à la propriété « Name » de notre objet $VM. En effet, la propriété « Name » des objets carte réseau est identique à la propriété « Name » des machines virtuelles.

La commande sera mise en file d’attente et ordonnancée automatiquement par SCVMM à la suite de la commande Move-VM que nous allons utiliser plus bas.

Attention, si votre machine virtuelle comporte plus d’une carte réseau, la variable $VirtualNetworkAdapter  ne contiendra pas un objet « Carte réseau » mais un tableau d’objet carte réseau.

Pour palier à cette éventualité, il convient de traiter le résultat comme suit.

#Récupération des objets cartes réseau

 $VirtualNetworkAdapters = Get-VirtualNetworkAdapter -All | where {$_.name -eq $vm.name}

$VirtualNetworkAdapters|Foreach{

    Set-VirtualNetworkAdapter -VirtualNetworkAdapter $_ -VirtualNetwork "Nom_Lan_Cible" -RunAsynchronously -JobGroup $NewJobGroup

}

Cependant, ce script ne fonctionne que si vos cartes sont toutes reliées sur le même réseau. Dans le cas contraire, il est nécessaire de gérer de nouvelles conditions (par exemple avec le nom du réseau sur lequel la machine est actuellement connecté, récupérable par la propriété « VirtualNetwork »)

#Récupération des objets carte réseau

 $VirtualNetworkAdapters = Get-VirtualNetworkAdapter -All | where {$_.name -eq $vm.name}

$VirtualNetworkAdapters|Foreach{

  switch ($VirtualNetworkAdapters.VirtualNetWork){

        "Nom_LAN1" {

           Set-VirtualNetworkAdapter -VirtualNetworkAdapter $_ -VirtualNetwork "Nom_Lan_Cible1" -RunAsynchronously -JobGroup $NewJobGroup

         }

        "Nom_LAN2" {

           Set-VirtualNetworkAdapter -VirtualNetworkAdapter $_ -VirtualNetwork "Nom_Lan_Cible2" -RunAsynchronously -JobGroup $NewJobGroup

         }

    }

}

Ici, nous récupérons le nom du réseau sur lequel la carte est connectée et nous la reconfigurons sur le réseau cible en fonction de ce nom. La fonction « Switch » nous permet ici de préciser une action spécifique pour différente valeur renvoyée par la propriété « VirtualNetwork »

Etape 4 : Déplacer la machine virtuelle

Voila enfin le moment de demander le déplacement de notre machine virtuelle.

Le déplacement  de la machine virtuelle est effectué grâce au Cmd-Let Move-VM en précisant le nom de la machine virtuelle ($VM.name), le serveur Hyper-V ciblé et le volume sur lequel sera stocké la machine virtuelle.

Nous n’oublierons pas non plus d’indiquer une exécution asynchrone de la commande en y associant le GUID du job créé précédemment.

Le paramètre « –UseLAN » indique que le transfert s’effectuera par le réseau.

Move-VM -VM $VM.name -VMHost $VMHost -Path "C:\ClusterStorage\Volume1" –UseLAN -RunAsynchronously -JobGroup $NewJobGroup

That’s it !

Nous venons de migrer notre première machine virtuelle entièrement à l’aide de la ligne de commande !

Ok, ne nous emballons pas trop, il reste encore à attendre la fin de la migration et à redémarrer manuellement la machine. De plus, migrer une seule machine virtuelle par ligne de commande n’est pas d’un grand intérêt.

Pour cette raison nous verrons dans la prochaine partie de cet article comment constituer une liste de machine virtuelle pour alimenter notre script et comment suivre l’avancement des jobs de façon à automatiser le déplacement  d’un grand nombre de machines.

 

Automatiser la migration de vos machines virtuelles avec SCVMM 2008 R2 Part 2-2

 

Pour les CMd-Let SCVMM, vous pouvez consulter les documents suivants.

SCVMM 2008 Scripting Guide

SCVMM Command Let Reference.

 

Search GuVirt

Partagez l'article

Liens sponsorisés

Joomla! is Free Software released under the GNU/GPL License.