Mise en place de maquettes de test automatisées sous Virtual Server 2005
Accueil > Articles > Serveurs
|
|
Auteurs
|
|
 |
|
 |

59707 13/55
|
3. Mise en place des ordinateurs virtuels
A partir de maintenant pour créer une nouvelle machine
virtuelle il faudra créer au préalable un disque différentiel qui pointera sur
un de vos disques sources (ci dessous le disque du Serveur 2003)

Pour augmenter les performances il est conseillé de mettre le
disque virtuel sur un disque physique différent de votre source, comme cela les
accès aux disques virtuels seront répartis sur deux emplacements différents.
Ensuite la création de la machine se réalise comme d'habitude via l'assistant en
indiquant spécifiquement le nom de votre disque virtuel différentiel (et non le
disque source), vous pourrez activer les "undo disks" en plus si vous le
désirez.
Lors du premier démarrage de la machine virtuelle vous aurez
une mire d'attente (pour 2003) ou la partie graphique du setup (mini setup de
Windows XP) qui apparaitra pour terminer la configuration du poste. Si vous
avez bien respecté la création de vos sysprep.inf aucun paramètre ne vous sera demandé
et vous arriverez sur la mire de login (Windows 2003) ou directement sur le
bureau (Windows XP) moins de 5 minutes après (suivant la puissance de l'hôte de VSS et le nombre de machines virtuelles actives).

L'une des fonctionnalité très utiles de VSS est la possibilité
de scripter une grande partie de l'utilisation de ce logiciel. Je vous invite à
vous reporter à ces liens pour avoir de plus amples informations:
Déjà ainsi vous aurez beaucoup d'exemples sur le scripting de
VSS et pourrez vous former sur l'utilisation de ceux-ci. Nous allons ici nous
intéresser à la rédaction de certains scripts.
Nous allons commencer par un script qui liste le nom de
toutes les machines virtuelles disponibles sur le serveur ainsi que
l'emplacement de chacun de leur fichier de configuration:
List_VM.vbs:
On Error Resume Next
Set objVS = CreateObject("VirtualServer.Application")
for each objtest in objVS.VirtualMachines
Wscript.Echo objtest.name & " ---- " & objtest.file
next |
Pour automatiser la création de nos disques différentiels
nous devons indiquer quelque part l'emplacement de nos disques sources ainsi que
le système auquel ils appartiennent. Nous allons donc créer un simple fichier
texte avec pour chaque ligne le nom du système d'exploitation et le chemin
complet vers le fichier de disque virtuel, le tout séparé par une virgule.
List_Sources.cfg:
Windows XP;c:\Source Disc\XP_SP2_EN.vhd
Windows 2003;c:\Source Disc\2003_STD_SP1.vhd |
Ensuite ce bout de code sera utilisé pour
lire le fichier List_Sources.cfg et rentrer les paramètres dans un tableau
Read_cfg.vbs:
Dim ListConfig(10,2)
Set fso = CreateObject("Scripting.FileSystemObject")
SourceFile="d:\List_Sources.cfg"
set SourceFileList=fso.GetFile(Sourcefile)
Set TextStream=SourceFileList.OpenAsTextStream(1)
i=1
j=1
Do While not TextStream.atendofstream
LigneConf=TextStream.readline
Ligneconfparam=Split(LigneConf,";")
For each parametres in Ligneconfparam
ListConfig(i,j)=parametres
j=j+1
next
j=1
i=i+1
loop
TextStream.close |
Ce petit programme lit le fichier "Sourcefile"
(d:\List_source.cfg) et met les différents paramètres dans une variable à deux
dimensions, ce bout de code sera utilisé plus tard.
Search_Space.vbs
Set fso = CreateObject("Scripting.FileSystemObject")
Set objVS = CreateObject("VirtualServer.Application")
testpath=objVS.Searchpaths
PathSpace=""
PlaceLibre=0
for i=0 to UBound(testpath)
set d=fso.getdrive(left(testpath(i),3))
if d.Freespace>PlaceLibre then
PlaceLibre=d.Freespace
PathSpace=testpath(i)
end if
next
wscript.echo PathSpace |
Ce script récupère les "search path" définit sur le serveur
Virtuel et renvoi celui qui appartient au disque possédant le plus grand espace
libre, si deux chemins appartiennent au même disque, seul le dernier dans la
liste sera pris en compte.
Create_Diff_Disque.vbs
ALREADYEXIST=-2147024713
ACCESSREFUSED=-2147024891
on error resume next
Set objVS = CreateObject("VirtualServer.Application")
DisqueSource="c:\Source Disc\XP_SP2_EN.vhd"
Disquedest="d:\test.vhd"
set errreturn=objvs.CreateDifferencingVirtualHardDisk(Disquedest,DisqueSource)
testerr=err.number
SELECT Case testerr
CASE ALREADYEXIST
wscript.echo "existe déjà"
CASE ACCESSREFUSED
Wscript.echo "Accès refusé"
Case Else
errreturn.WaitforCompletion(1000)
If Errreturn.Result=0 then
If testerr=0 then
wscript.echo "création OK"
Else
Wscript.echo "création terminée avec une erreur"
end if
end if
end select
On error goto 0 |
Ce script crée un disque différentiel DisqueDest (d:\test.vhd ici)
avec comme source le disque DisqueSource (c:\Source Disc\XP_SP2_EN.vhd
ici), nous avons rajouté quelques traitements d'erreur courant (fichier existe
déjà ou accès refusé), vous pouvez voir aussi la méthode WaitForCompletion
qui permet d'indiquer d'attendre la fin de l'opération (pas très utile ici
car presque instantanée) avec comme paramètre un chiffre en millisecondes (1000
ici donc une seconde d'attente), ainsi que Result qui renvoi 0 si la
création est OK.
Create_VM.vbs
MachineName="Test_VM_Script32"
ConfigPath="F:\Shared Virtual Machines"
MemorySize=256
NetworkName="Réseau VSS2005local"
DisqueDest="d:\test.vhd"
Set objVS = CreateObject("VirtualServer.Application")
on error resume next
Set MyVM = objVS.CreateVirtualMachine(MachineName,ConfigPath & "\" &
Machinename)
on error goto 0
set Myvm= objVS.FindVirtualMachine(MachineName)
Myvm.Memory=MemorySize
Set Mynetwork=objVS.FindVirtualNetwork(NetworkName)
Set ColNetworkAdapters=MyVm.NetworkAdapters
For Each ObjNetworkAdapter in ColNetworkadapters
errReturn=ObjNetworkAdapter.attachToVirtualNetwork(Mynetwork)
next
set HDDConnexion=myvm.AddHardDiskConnection(DisqueDest,0,0,0) |
Ce script crée une machine virtuelle nommée MachineName
(Test_VM_Script32 ici) avec un fichier de configuration situé dans le chemin
ConfigPath (F:\Shared Virtal Machines ici), cette machine aura une taille
mémoire de MemorySize en Mo (256 ici), liée au réseau NetworkName
(Réseau VSS2005local ici) et lié au disque DisqueDest (d:\test.vhd ici).
Start_VM.vbs
ALREADYRUNNING=-1610349312
MachineName="Test_VM_Script32"
Set objVS = CreateObject("VirtualServer.Application")
Set objVM = objVS.FindVirtualMachine(MachineName)
On Error resume next
Set VMTask=objVM.Startup()
if err.number=ALREADYRUNNING then
wscript.echo "la machine est déjà démarrée"
end if
VMTask.WaitforCompletion(2000)
on error goto 0 |
Ce script démarre la machine virtuelle nommée MachineName
(Test_VM_Script32 ici) et attend qu'elle ait démarrée avant de rendre la main,
il indique aussi si la machine est déjà démarrée.
A partir de ces différents scripts nous allons créer un script global qui va
réaliser ces tâches:
- Créer un disque différentiel dont le disque source utilisé sera en
fonction de l'OS choisit (on va prendre en base Read_CFG.vbs et
Create_Diff_Disque.vbs)
- Créer une machine virtuelle avec un nom en paramètre et celle ci aura une
taille mémoire et un réseau de base en fonction de la ligne de commande (on va
prendre en base Create_VM.vbs)
- Le fichier de disque différentiel sera créé sur le disque ayant le plus de place
libre (Base Search_space.vbs)
- La machine virtuelle sera démarrée (base Start_VM.vbs)
Ce script s'appelle New_VM.vbs, nous vous indiquons le code
source en fin de chapitre mais vous pouvez le télécharger
directement. Pour l'utiliser, il vous suffit d'avoir un fichier de configuration
(par défaut le script prendra le fichier List_sources.cfg dans le même
répertoire) puis vous le lancer avec cette commande:
cscript New_VM.vbs <Nom_de_machine> <Type_Machine>
[/m <Taille_Mémoire>] [/r <Nom_Réseau>] [/f <Emplacement_Fichier>]
Où :
- <Nom_de_Machine> est le nom de votre nouvelle machine virtuelle
- <Type_Machine> est le nom du système que vous avez indiqué dans votre fichier
de configuration ("Windows XP" ou "Windows 2003" dans nos exemples)
- /m <Taille_Mémoire> est la taille de la mémoire (en Mo) à allouer à la machine
virtuelle (128 Mo par défaut)
- /r <Nom_Réseau> le nom du réseau virtuel à assigner à la machine virtuelle
(le premier de la liste sera choisi par défaut)
- /f <Emplacement_fichier> est le chemin vers le fichier de configuration (le
List_sources.cfg dans le répertoire courant sera pris en compte par défaut)
Ainsi vous pourrez créer la machine virtuelle configurée en une seule ligne
de commande
New_VM.vbs
'======================================================================================================
' New_VM.vbs |
' Auteur: Guillaume Desfarges (Laboratoire des technologies Microsoft
www.laboratoire-microsoft.org) |
' Script de création d'un machine virtuelle avec un disque différentiel
|
' Ce script doit toujours être accompagné d'un fichier de configuration
contenant les textes: |
' Type_de_machine;Emplacement_du_Fichier_vhd_source |
' Par défaut le fichier List_sources.cfg sera utilisé (sinon utilisé
l'option /f) |
' Pour permettre de lier de disque différentiel au disque source
"Master" |
'======================================================================================================
'===============
' Intialisation
'===============
ALREADYEXIST=-2147024713
ACCESSREFUSED=-2147024891
set objArgs=Wscript.arguments
Dim ListConfig(10,2)
Set fso = CreateObject("Scripting.FileSystemObject")
Set objVS = CreateObject("VirtualServer.Application")
SourceFile="List_Sources.cfg"
'===================================================================
' Récupération des arguments de la ligne de commande (2 au minimum)
'===================================================================
If ObjArgs.count<2 then
Wscript.echo "Arguments manquant"
Wscript.echo "Utilisation:"
wscript.echo "Nom_de_machine Type_de_machine [/m Taille_mémoire] [/r
nom_du_réseau] [/f Fichier_de_configuration]"
wscript.quit
end if
MachineName=objArgs(0)
TypeMachine=objArgs(1)
MemorySize=128
NetworkName=""
'==========================================================================
' Récupération des commandes optionnelles
' /m pour indiquer une mémoire différentes de 128 Mo
' /r pour indiquer un réseau virtuel (sinon le premier trouvé sera
utilisé
' /f pour indiquer un fichier de configuration à un emplacement
différent
'==========================================================================
if ObjArgs.count>2 then
for i=1 to ObjArgs.count-1
Select Case ObjArgs(i)
Case "/m"
MemorySize=ObjArgs(i+1)
Case "/r"
NetworkName=ObjArgs(i+1)
Case "/f"
SourceFile=objArgs(i+1)
End Select
next
end if
'==================================================================
' Lecture du fichier de configuration (List_Sources.cfg par défaut)
'==================================================================
set SourceFileList=fso.GetFile(Sourcefile)
Set TextStream=SourceFileList.OpenAsTextStream(1)
i=1
j=1
Do While not TextStream.atendofstream
LigneConf=TextStream.readline
Ligneconfparam=Split(LigneConf,";")
For each parametres in Ligneconfparam
ListConfig(i,j)=parametres
j=j+1
next
j=1
i=i+1
loop
NombreOS=i-1
Textstream.close
Test=0
For i=1 to NombreOS
if strcomp(Listconfig(i,1),TypeMachine,1)=0 then
Test=1
DisqueSource=ListConfig(i,2)
end if
next
If test=0 then
Wscript.echo "Le type de machine est érronée"
Wscript.echo "Type de machine disponible:"
for i=1 to NombreOS
wscript.echo ListConfig(i,1)
next
wscript.quit
end if
'========================================================================================
' Détection dans la liste des emplacement définit celui possédant le
plus d'espace libre
'========================================================================================
testpath=objVS.Searchpaths
PathSpace=""
PlaceLibre=0
for i=0 to UBound(testpath)
set d=fso.getdrive(left(testpath(i),3))
if d.Freespace>PlaceLibre then
PlaceLibre=d.Freespace
PathSpace=testpath(i)
end if
next
If strcomp(right(Pathspace,1),"\",1)=0 then
DisqueDest=PathSpace & MachineName & ".vhd"
else
DisqueDest=PathSpace & "\" & MachineName & ".vhd"
end if
'=======================================
' Définition du réseau virtuel utilisé
'=======================================
Test=0
Set colNetworks = objVS.VirtualNetworks
For Each objNetwork in colNetworks
if strcomp(objnetwork.name,NetworkName,1)=0 then
Test=1
end if
if NetworkName="" and test=0 then
NetworkName=objnetwork.name
test=1
end if
next
If test=0 then
Wscript.echo "Le nom de réseau " & NetworkName & " indiqué est inconnu"
Wscript.echo "Réseaux disponible sur ce serveur:"
For Each objNetwork in colNetworks
Wscript.echo objnetwork.name
next
wscript.quit
end if
'===================================================
' Détection de la mémoire disponible sur le serveur
'===================================================
Set objHost = objVS.HostInfo
If CLng(memorysize)>CLng(objHost.memory) then
Wscript.echo "Espace mémoire physique insuffisant"
Wscript.echo "Mémoire maximale possible : " & objHost.memory
wscript.quit
end if
'=================================
' Création du disque différentiel
'=================================
on error resume next
set
errreturn=objvs.CreateDifferencingVirtualHardDisk(Disquedest,DisqueSource)
testerr=err.number
SELeCT Case testerr
CASE ALREADYEXIST
wscript.echo "Le disque """ & DisqueDest & """ existe déjà"
CASE ACCESSREFUSED
Wscript.echo "L'emplacement """ & PathSpace & """ est en Accès refusé"
Case Else
errreturn.WaitforCompletion(1000)
If Errreturn.Result=0 then
If testerr=0 then
wscript.echo "Création Disque " & Disquedest & " Différentiel OK"
Else
Wscript.echo "Création Disque " & Disquedest & " Différentiel terminée
avec une erreur"
end if
Else
Wscript.echo "Erreur dans la création du disque " & Disquedest
wscript.echo err.description
end if
end select
On error goto 0
'==================================
' Création de la machine virtuelle
'==================================
ConfigPath=objVS.DefaultVMConfigurationPath
on error resume next
if strcomp(right(ConfigPath,1),"\",1) = 0 then
Set MyVM = objVS.CreateVirtualMachine(MachineName,ConfigPath &
Machinename)
else
Set MyVM = objVS.CreateVirtualMachine(MachineName,ConfigPath & "\" &
Machinename)
end if
if not(err.number=0) then
Wscript.echo "Erreur lors de la création de la machine virtuelle"
wscript.echo err.description
wscript.quit
Else
Wscript.echo "Machine virtuelle """ & MachineName & """ créé"
end if
on error goto 0
'==========================================================
' Assignation des paramètres de disque, mémoire et réseau
'==========================================================
set Myvm= objVS.FindVirtualMachine(MachineName)
Myvm.Memory=MemorySize
Set Mynetwork=objVS.FindVirtualNetwork(NetworkName)
Set ColNetworkAdapters=MyVm.NetworkAdapters
For Each ObjNetworkAdapter in ColNetworkadapters
errReturn=ObjNetworkAdapter.attachToVirtualNetwork(Mynetwork)
next
set HDDConnexion=myvm.AddHardDiskConnection(DisqueDest,0,0,0)
'===================================
' Démarrage de la machine virtuelle
'===================================
myvm.startup |
1. Principes
1.1 La "mode" de la virtualisation
1.2 Maquette automatisée de test
2. Préparation de l'environnement
2.1. Configuration de l'environnement virtuel
2.1.1 Mise en place des chemins d'utilisation
2.1.2 Mise en place d'un réseau partagé entre les machines virtuelles et la machine hôte
2.2. Configuration des machines "master"
2.2.1 Création des disques virtuels sources
2.2.2 Installation des machines sources
2.2.3 Utilisation de Sysprep
2.3 Premières notions de sécurité
2.3.1 Protection des fichiers sources
2.3.2 Limitation des accès à l'interface VSS et le client VMRC
3. Mise en place des ordinateurs virtuels
3.1 Créations des machines virtuelles en fonction des sources
3.2 Base des API vbscript Virtual Server et utilisation en contexte
4. Pistes d'évolution
5. Conclusion
|
|
 |
Pour afficher ou poster un commentaire, cliquez sur ce lien : Forum-Microsoft
|
|