async function checkArtifactsStatus()

in tasks/Node/src/tasks/AzureDtlCreateVM/task.ts [27:76]


async function checkArtifactsStatus(client: DevTestLabsClient, labVmId: string, templateFile: string, failOnArtifactError: boolean): Promise<void> {
    if (!failOnArtifactError) {
        tl.debug(`Fail on artifact error is ${failOnArtifactError}. Nothing to check. Ignoring.`);
        return;
    }

    const expectedArtifactsCount: number = getExpectedArtifactsCount(templateFile);
    if (expectedArtifactsCount <= 0) {
        tl.debug(`Expected artifact count is ${expectedArtifactsCount}. Nothing to check. Ignoring.`);
        return;
    }

    const vm: DevTestLabsModels.VirtualMachinesGetResponse = await getLabVm(client, labVmId);

    const artifacts: DevTestLabsModels.ArtifactInstallProperties[] = vm.artifacts ? vm.artifacts : [];
    const failedArtifacts: DevTestLabsModels.ArtifactInstallProperties[] = artifacts.filter(a => a && equalsIgnoreCase(a.status, 'Failed'));
    const succeededArtifacts: DevTestLabsModels.ArtifactInstallProperties[] = artifacts.filter(a => a && equalsIgnoreCase(a.status, 'Succeeded'));

    console.log(`Number of Artifacts Expected: ${expectedArtifactsCount}, Reported: ${artifacts.length}, Succeeded: ${succeededArtifacts.length}, Failed: ${failedArtifacts.length}`);

    if (failedArtifacts.length > 0 || succeededArtifacts.length < expectedArtifactsCount) {
        failedArtifacts.forEach(failedArtifact => {
            tl.warning(`Failed to apply artifact '${getArtifactName(failedArtifact)}'.`);

            if (failedArtifact.deploymentStatusMessage) {
                let deploymentStatusMessage: string = failedArtifact.deploymentStatusMessage;
                try {
                    deploymentStatusMessage = JSON.parse(failedArtifact.deploymentStatusMessage).error.details.message;
                }
                catch {
                    // Use the default.
                }
                console.log(`deploymentStatusMessage = ${deploymentStatusMessage}`);
            }

            if (failedArtifact.vmExtensionStatusMessage) {
                let vmExtensionStatusMessage: string = failedArtifact.vmExtensionStatusMessage;
                try {
                    vmExtensionStatusMessage = JSON.parse(failedArtifact.vmExtensionStatusMessage)[1].message;
                }
                catch {
                    // Use the default.
                }
                console.log(`vmExtensionStatusMessage = ${vmExtensionStatusMessage.replace(/\\n/gi, '')}`);
            }
        });

        throw 'At least one artifact failed to apply. Review the lab virtual machine artifact results blade for full details.';
    }
}