in tasks/Node/src/tasks/AzureDtlCreateVM/task.ts [82:157]
async function createVm(clients: TaskClients, inputData: CreateVmTaskInputData): Promise<void> {
let labVmId: string = '';
const labName: string = resutil.getLabResourceName(inputData.labId, 'labs');
const labRgName: string = resutil.getLabResourceName(inputData.labId, 'resourcegroups');
console.log(`Creating Virtual Machine in Lab '${labName}' under Resource Group '${labRgName}'.`);
const baseVmName: string = inputData.vmName;
const count: number = 1 + inputData.retryCount;
for (let i = 1; i <= count; i++) {
const deploymentName: string = deployutil.getDeploymentName();
resutil.testVmName(inputData.vmName);
try {
const deployment: ResourceManagementModels.Deployment = getDeployment(labName, inputData.vmName, inputData.templateFile, inputData.parametersFile, inputData.parameterOverrides);
console.log('Invoking deployment with the following parameters:');
console.log(` DeploymentName = ${deploymentName}`);
console.log(` ResourceGroupName = ${labRgName}`);
console.log(` LabName = ${labName}`);
console.log(` VmName = ${inputData.vmName}`);
console.log(` TemplateFile = ${inputData.templateFile}`);
const results: ResourceManagementModels.DeploymentsCreateOrUpdateResponse = await clients.arm.deployments.createOrUpdate(labRgName, deploymentName, deployment);
if (results && results.properties) {
const properties: any = results.properties;
if (properties.provisioningState !== 'Succeeded') {
throw results._response.parsedBody;
}
if (properties.outputResources) {
const outputs: any = properties.outputResources[0];
if (outputs.id) {
labVmId = outputs.id;
}
}
}
if (labVmId) {
await waitForApplyArtifacts(clients.dtl, labVmId, inputData.waitMinutes);
await checkArtifactsStatus(clients.dtl, labVmId, inputData.templateFile, inputData.failOnArtifactError);
break;
}
}
catch (error) {
if (i === count) {
throw error;
}
else {
// Reset labVmId to ensure we don't mistakenly return a previously invalid value in case of a subsequent retry error.
labVmId = '';
tl.warning(`A deployment failure occured. Retrying deployment (attempt ${i} of ${count - 1}).`);
tl.debug('Deployment failed with error:');
tl.debug(JSON.stringify(error, null, 2));
await removeFailedResources(clients.arm, labRgName, deploymentName, inputData.deleteLabVm, inputData.deleteDeployment);
if (inputData.appendRetryNumberToVmName) {
inputData.vmName = `${baseVmName}-${i}`;
}
}
}
}
if (labVmId) {
tl.setVariable('labVmId', labVmId);
}
console.log(`Finished creating Lab Virtual Machine '${inputData.vmName}'.`);
}