src/Utils/TaskParametersUtil.ts (71 lines of code) (raw):
import { isNullOrUndefined } from "util";
import * as CoreUtils from './CoreUtils';
import * as InputConstants from "../Constants/InputConstants";
import * as EnvironmentConstants from "../Constants/EnvironmentConstants";
import { TaskParameters } from "../models/TaskParameters";
import * as AzCliUtility from '../Utils/AzCliUtility';
export class TaskParametersUtil {
public static async getTaskParameters(isPostProcessJob: boolean = false): Promise<TaskParameters> {
let taskParameters: TaskParameters = {
subscriptionId: '',
subscriptionName: '',
environment: EnvironmentConstants.AzurePublicCloud.cloudName,
armTokenScope: EnvironmentConstants.AzurePublicCloud.armTokenScope,
dataPlaneTokenScope: EnvironmentConstants.AzurePublicCloud.dataPlaneTokenScope,
resourceId: '',
armEndpoint: EnvironmentConstants.AzurePublicCloud.armEndpoint,
};
// Post process job does not require resource parameters
if (!isPostProcessJob) {
await this.setSubscriptionParameters(taskParameters);
this.setResourceParameters(taskParameters);
}
await this.setEndpointAndScopeParameters(taskParameters);
return taskParameters;
}
private static setResourceParameters(taskParameters: TaskParameters) {
const resourceGroup: string | undefined = CoreUtils.getInput(InputConstants.resourceGroup);
const loadTestResourceName: string | undefined = CoreUtils.getInput(InputConstants.loadTestResource);
if(isNullOrUndefined(resourceGroup) || resourceGroup == ''){
throw new Error(`The input field "${InputConstants.resourceGroupLabel}" is empty. Provide an existing resource group name.`);
}
if(isNullOrUndefined(loadTestResourceName) || loadTestResourceName == ''){
throw new Error(`The input field "${InputConstants.loadTestResourceLabel}" is empty. Provide an existing load test resource name.`);
}
taskParameters.resourceId = "/subscriptions/"+taskParameters.subscriptionId+"/resourcegroups/"+resourceGroup+"/providers/microsoft.loadtestservice/loadtests/"+loadTestResourceName;
}
private static async setSubscriptionParameters(taskParameters: TaskParameters) {
try {
const cmdArguments = ["account", "show"];
var result: any = await AzCliUtility.execAz(cmdArguments);
taskParameters.subscriptionId = result.id;
taskParameters.subscriptionName = result.name;
}
catch (err: any) {
const message =
`An error occurred while getting credentials from ` +
`Azure CLI for getting subscription name: ${err.message}`;
throw new Error(message);
}
}
private static async setEndpointAndScopeParameters(taskParameters: TaskParameters) {
try
{
const cmdArguments = ["cloud", "show"];
var result: any = await AzCliUtility.execAz(cmdArguments);
let env = result ? result.name : null;
taskParameters.environment = env ?? EnvironmentConstants.AzurePublicCloud.cloudName;
let endpointUrl = (result && result.endpoints) ? result.endpoints.resourceManager : null;
taskParameters.armEndpoint = endpointUrl ?? taskParameters.armEndpoint;
if(taskParameters.environment.toLowerCase() == EnvironmentConstants.AzureUSGovernmentCloud.cloudName.toLowerCase()) {
taskParameters.dataPlaneTokenScope = EnvironmentConstants.AzureUSGovernmentCloud.dataPlaneTokenScope;
taskParameters.armTokenScope = EnvironmentConstants.AzureUSGovernmentCloud.armTokenScope;
}
}
catch (err: any) {
const message =
`An error occurred while getting credentials from ` +
`Azure CLI for setting endPoint and scope: ${err.message}`;
throw new Error(message);
}
}
}