How to compose a lab environment from existing SCVMM based machines?
MTM provides various workflows to create environments. You can create environments from virtual machine templates, from stored environments in library, from existing physical/virtual machines which are not managed by SCVMM, from existing virtual machines managed by SCVMM. In this flow, we will learn about the last flow (of creating lab environments from existing virtual machines running on SCVMM hosts) and see the script with which you can achieve this programmatically. Here is how you can use the following script.
- Login to a machine with tfs object model installed. (The tfs object model gets installed with VS, MTM, Tfs, test controller etc)
- Open notepad, copy paste the following script and change the highlighted variables as per your setup/deployment.
- Open a power-shell command prompt and run the modified power-shell script.
- It should create an environment, provided you have one such machine available in your setup.
Enjoy !!
# Specify the tfs collection url, projectName and test controllerName
$tfsCollectionUrl = New-Object System.URI(" https://myserver:8080/tfs/myCollection");
$projectName = "myProject";
$testControllerName="mycontroller.mydomain.com:6901" #FQDN of the controller
# Load Client Assembly
[Reflection.Assembly]::Load(“Microsoft.TeamFoundation.Client, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”);
[Reflection.Assembly]::Load(“Microsoft.TeamFoundation.Common, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”);
[Reflection.Assembly]::Load(“Microsoft.TeamFoundation.Lab.Client, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”);
[Reflection.Assembly]::Load(“Microsoft.TeamFoundation.Lab.Common, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”);
# Connect to tfs
$tfsCollection = [Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory]::GetTeamProjectCollection($tfsCollectionUrl);
$labService = $tfsCollection.GetService([Microsoft.TeamFoundation.Lab.Client.LabService]);
# Query the host groups
$hostGroupQuerySpec = New-Object Microsoft.TeamFoundation.Lab.Client.TeamProjectHostGroupQuerySpec;
$hostGroupQuerySpec.Project = $projectName;
$hostGroupList = $labService.QueryTeamProjectHostGroups($hostGroupQuerySpec);
# Pick the first host group
$hostGroup = $hostGroupList[0];
# Query the virtual machines
$machineQuerySpec = New-Object Microsoft.TeamFoundation.Lab.Client.VirtualMachineQuerySpec;
$machineQuerySpec.Location = $hostGroup.Uri;
$machineQuerySpec.FilterAlreadyImportedVirtualMachines = $TRUE;
$virtualMachines = $labService.QueryVirtualMachines($machineQuerySpec);
# Pick the first virtual machine
$virtualMachine = $virtualMachines[0];
# Create lab system definition
$lsName = "machine1";
$roleName = "webRole";
$labSystemDefinition = New-Object Microsoft.TeamFoundation.Lab.Client.LabSystemDefinition($lsName,$lsName,$roleName);
$labSystemDefinition.SourceIdentifier = $virtualMachine.VMGuid.ToString();
$labSystemDefinition.SourceType = [Microsoft.TeamFoundation.Lab.Client.LabSystemSourceType]::VirtualMachine;
$labSystemDefinition.ConfigurationComplete = $TRUE;
# Create lab environment definition
$leName = "aseemEnvironment";
$leDescription = "This is Aseem's environment";
$labSystemDefinitions = [array]$labSystemDefinition
$labEnvironmentDefinition = New-Object Microsoft.TeamFoundation.Lab.Client.LabEnvironmentDefinition -ArgumentList @(,$leName, $leDescription, $labSystemDefinitions);
$labEnvironmentDefinition.TestControllerName = $testControllerName;
# Create the environment
$hostGroup.CreateLabEnvironment($labEnvironmentDefinition, $NULL, $NULL);
Comments
Anonymous
June 04, 2014
Hi Aseem,Thanks for your post.I am looking for how to find if an environment is healthy using powershell script.HOw to get agents and see if all agents are online and in Ready state.Thanks.Anonymous
June 04, 2014
Thanks Geetika for your question. See whether the script in the below link meets your requirement or not.blogs.msdn.com/.../how-to-find-whether-lab-environment-is-in-healthy-state-or-not.aspxRegardsAseem BansalAnonymous
June 05, 2014
Thanks Aseem. This works. Appreciate it.Anonymous
September 18, 2014
The comment has been removedAnonymous
September 18, 2014
I found the issue. The build number that I was using had a failed build status. For that I need to update my script to get build number status and run test against only Successful builds.Anonymous
September 18, 2014
Good to know that it is working for you, thanks Geetika.Anonymous
February 18, 2016
Hi Aseem Thanks for your post. How to compose a lab environment from standard environment?Anonymous
February 21, 2016
Refer this blogs.msdn.microsoft.com/.../create-lab-environment-using-tfs-lab-management-apis