Adding support for sending request headers in azure core rest request API (#16443)

* Adding support for sending additional headers in azure http requests

* Added session ids in all azure rest calls

* Fixed param name

* Adding default parameter value for request headers
This commit is contained in:
Aasim Khan
2021-07-27 12:36:50 -07:00
committed by GitHub
parent 35207a1e04
commit 7a35d4aeeb
11 changed files with 79 additions and 53 deletions

View File

@@ -333,8 +333,9 @@ export async function getSelectedSubscriptions(appContext: AppContext, account?:
* @param requestBody Optional request body to be used in PUT and POST requests. * @param requestBody Optional request body to be used in PUT and POST requests.
* @param ignoreErrors When this flag is set the method will not throw any runtime or service errors and will return the errors in errors array. * @param ignoreErrors When this flag is set the method will not throw any runtime or service errors and will return the errors in errors array.
* @param host Use this to override the host. The default host is https://management.azure.com * @param host Use this to override the host. The default host is https://management.azure.com
* @param requestHeaders Provide additional request headers
*/ */
export async function makeHttpRequest(account: azdata.Account, subscription: azureResource.AzureResourceSubscription, path: string, requestType: HttpRequestMethod, requestBody?: any, ignoreErrors: boolean = false, host: string = 'https://management.azure.com'): Promise<AzureRestResponse> { export async function makeHttpRequest(account: azdata.Account, subscription: azureResource.AzureResourceSubscription, path: string, requestType: HttpRequestMethod, requestBody?: any, ignoreErrors: boolean = false, host: string = 'https://management.azure.com', requestHeaders: { [key: string]: string } = {}): Promise<AzureRestResponse> {
const result: AzureRestResponse = { response: {}, errors: [] }; const result: AzureRestResponse = { response: {}, errors: [] };
if (!account?.properties?.tenants || !Array.isArray(account.properties.tenants)) { if (!account?.properties?.tenants || !Array.isArray(account.properties.tenants)) {
@@ -375,11 +376,14 @@ export async function makeHttpRequest(account: azdata.Account, subscription: azu
return result; return result;
} }
const reqHeaders = {
'Content-Type': 'application/json',
'Authorization': `Bearer ${securityToken.token}`,
...requestHeaders
};
const config: AxiosRequestConfig = { const config: AxiosRequestConfig = {
headers: { headers: reqHeaders,
'Content-Type': 'application/json',
'Authorization': `Bearer ${securityToken.token}`
},
validateStatus: () => true // Never throw validateStatus: () => true // Never throw
}; };

View File

@@ -271,8 +271,9 @@ declare module 'azurecore' {
* @param requestBody Optional request body to be used in PUT and POST requests. * @param requestBody Optional request body to be used in PUT and POST requests.
* @param ignoreErrors When this flag is set the method will not throw any runtime or service errors and will return the errors in errors array. * @param ignoreErrors When this flag is set the method will not throw any runtime or service errors and will return the errors in errors array.
* @param host Use this to override the host. The default host is https://management.azure.com * @param host Use this to override the host. The default host is https://management.azure.com
* @param requestHeaders Provide additional request headers
*/ */
makeAzureRestRequest(account: azdata.Account, subscription: azureResource.AzureResourceSubscription, path: string, requestType: HttpRequestMethod, requestBody?: any, ignoreErrors?: boolean, host?: string): Promise<AzureRestResponse>; makeAzureRestRequest(account: azdata.Account, subscription: azureResource.AzureResourceSubscription, path: string, requestType: HttpRequestMethod, requestBody?: any, ignoreErrors?: boolean, host?: string, requestHeaders?: { [key: string]: string }): Promise<AzureRestResponse>;
/** /**
* Converts a region value (@see AzureRegion) into the localized Display Name * Converts a region value (@see AzureRegion) into the localized Display Name
* @param region The region value * @param region The region value

View File

@@ -236,8 +236,9 @@ export async function activate(context: vscode.ExtensionContext): Promise<azurec
requestType: azurecore.HttpRequestMethod, requestType: azurecore.HttpRequestMethod,
requestBody: any, requestBody: any,
ignoreErrors: boolean, ignoreErrors: boolean,
host: string = 'https://management.azure.com'): Promise<azurecore.AzureRestResponse> { host: string = 'https://management.azure.com',
return azureResourceUtils.makeHttpRequest(account, subscription, path, requestType, requestBody, ignoreErrors, host); requestHeaders: { [key: string]: string } = {}): Promise<azurecore.AzureRestResponse> {
return azureResourceUtils.makeHttpRequest(account, subscription, path, requestType, requestBody, ignoreErrors, host, requestHeaders);
}, },
getRegionDisplayName: utils.getRegionDisplayName, getRegionDisplayName: utils.getRegionDisplayName,
runGraphQuery<T extends azureResource.AzureGraphResource>(account: azdata.Account, runGraphQuery<T extends azureResource.AzureGraphResource>(account: azdata.Account,

View File

@@ -8,6 +8,7 @@ import * as azdata from 'azdata';
import * as azurecore from 'azurecore'; import * as azurecore from 'azurecore';
import { azureResource } from 'azureResource'; import { azureResource } from 'azureResource';
import * as constants from '../constants/strings'; import * as constants from '../constants/strings';
import { getSessionIdHeader } from './utils';
async function getAzureCoreAPI(): Promise<azurecore.IExtension> { async function getAzureCoreAPI(): Promise<azurecore.IExtension> {
const api = (await vscode.extensions.getExtension(azurecore.extension.name)?.activate()) as azurecore.IExtension; const api = (await vscode.extensions.getExtension(azurecore.extension.name)?.activate()) as azurecore.IExtension;
@@ -131,10 +132,10 @@ export async function getBlobContainers(account: azdata.Account, subscription: S
return blobContainers!; return blobContainers!;
} }
export async function getSqlMigrationService(account: azdata.Account, subscription: Subscription, resourceGroupName: string, regionName: string, sqlMigrationServiceName: string): Promise<SqlMigrationService> { export async function getSqlMigrationService(account: azdata.Account, subscription: Subscription, resourceGroupName: string, regionName: string, sqlMigrationServiceName: string, sessionId: string): Promise<SqlMigrationService> {
const api = await getAzureCoreAPI(); const api = await getAzureCoreAPI();
const path = `/subscriptions/${subscription.id}/resourceGroups/${resourceGroupName}/providers/Microsoft.DataMigration/sqlMigrationServices/${sqlMigrationServiceName}?api-version=2020-09-01-preview`; const path = `/subscriptions/${subscription.id}/resourceGroups/${resourceGroupName}/providers/Microsoft.DataMigration/sqlMigrationServices/${sqlMigrationServiceName}?api-version=2020-09-01-preview`;
const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.GET, undefined, true); const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.GET, undefined, true, undefined, getSessionIdHeader(sessionId));
if (response.errors.length > 0) { if (response.errors.length > 0) {
throw new Error(response.errors.toString()); throw new Error(response.errors.toString());
} }
@@ -142,10 +143,10 @@ export async function getSqlMigrationService(account: azdata.Account, subscripti
return response.response.data; return response.response.data;
} }
export async function getSqlMigrationServices(account: azdata.Account, subscription: Subscription, regionName: string): Promise<SqlMigrationService[]> { export async function getSqlMigrationServices(account: azdata.Account, subscription: Subscription, sessionId: string): Promise<SqlMigrationService[]> {
const api = await getAzureCoreAPI(); const api = await getAzureCoreAPI();
const path = `/subscriptions/${subscription.id}/providers/Microsoft.DataMigration/sqlMigrationServices?api-version=2020-09-01-preview`; const path = `/subscriptions/${subscription.id}/providers/Microsoft.DataMigration/sqlMigrationServices?api-version=2020-09-01-preview`;
const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.GET, undefined, true); const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.GET, undefined, true, undefined, getSessionIdHeader(sessionId));
if (response.errors.length > 0) { if (response.errors.length > 0) {
throw new Error(response.errors.toString()); throw new Error(response.errors.toString());
} }
@@ -156,13 +157,13 @@ export async function getSqlMigrationServices(account: azdata.Account, subscript
return response.response.data.value; return response.response.data.value;
} }
export async function createSqlMigrationService(account: azdata.Account, subscription: Subscription, resourceGroupName: string, regionName: string, sqlMigrationServiceName: string): Promise<SqlMigrationService> { export async function createSqlMigrationService(account: azdata.Account, subscription: Subscription, resourceGroupName: string, regionName: string, sqlMigrationServiceName: string, sessionId: string): Promise<SqlMigrationService> {
const api = await getAzureCoreAPI(); const api = await getAzureCoreAPI();
const path = `/subscriptions/${subscription.id}/resourceGroups/${resourceGroupName}/providers/Microsoft.DataMigration/sqlMigrationServices/${sqlMigrationServiceName}?api-version=2020-09-01-preview`; const path = `/subscriptions/${subscription.id}/resourceGroups/${resourceGroupName}/providers/Microsoft.DataMigration/sqlMigrationServices/${sqlMigrationServiceName}?api-version=2020-09-01-preview`;
const requestBody = { const requestBody = {
'location': regionName 'location': regionName
}; };
const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.PUT, requestBody, true); const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.PUT, requestBody, true, undefined, getSessionIdHeader(sessionId));
if (response.errors.length > 0) { if (response.errors.length > 0) {
throw new Error(response.errors.toString()); throw new Error(response.errors.toString());
} }
@@ -170,7 +171,7 @@ export async function createSqlMigrationService(account: azdata.Account, subscri
const maxRetry = 5; const maxRetry = 5;
let i = 0; let i = 0;
for (i = 0; i < maxRetry; i++) { for (i = 0; i < maxRetry; i++) {
const asyncResponse = await api.makeAzureRestRequest(account, subscription, asyncUrl.replace('https://management.azure.com/', ''), azurecore.HttpRequestMethod.GET, undefined, true); const asyncResponse = await api.makeAzureRestRequest(account, subscription, asyncUrl.replace('https://management.azure.com/', ''), azurecore.HttpRequestMethod.GET, undefined, true, undefined, getSessionIdHeader(sessionId));
const creationStatus = asyncResponse.response.data.status; const creationStatus = asyncResponse.response.data.status;
if (creationStatus === 'Succeeded') { if (creationStatus === 'Succeeded') {
break; break;
@@ -185,10 +186,10 @@ export async function createSqlMigrationService(account: azdata.Account, subscri
return response.response.data; return response.response.data;
} }
export async function getSqlMigrationServiceAuthKeys(account: azdata.Account, subscription: Subscription, resourceGroupName: string, regionName: string, sqlMigrationServiceName: string): Promise<SqlMigrationServiceAuthenticationKeys> { export async function getSqlMigrationServiceAuthKeys(account: azdata.Account, subscription: Subscription, resourceGroupName: string, regionName: string, sqlMigrationServiceName: string, sessionId: string): Promise<SqlMigrationServiceAuthenticationKeys> {
const api = await getAzureCoreAPI(); const api = await getAzureCoreAPI();
const path = `/subscriptions/${subscription.id}/resourceGroups/${resourceGroupName}/providers/Microsoft.DataMigration/sqlMigrationServices/${sqlMigrationServiceName}/ListAuthKeys?api-version=2020-09-01-preview`; const path = `/subscriptions/${subscription.id}/resourceGroups/${resourceGroupName}/providers/Microsoft.DataMigration/sqlMigrationServices/${sqlMigrationServiceName}/ListAuthKeys?api-version=2020-09-01-preview`;
const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.POST, undefined, true); const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.POST, undefined, true, undefined, getSessionIdHeader(sessionId));
if (response.errors.length > 0) { if (response.errors.length > 0) {
throw new Error(response.errors.toString()); throw new Error(response.errors.toString());
} }
@@ -198,7 +199,7 @@ export async function getSqlMigrationServiceAuthKeys(account: azdata.Account, su
}; };
} }
export async function regenerateSqlMigrationServiceAuthKey(account: azdata.Account, subscription: Subscription, resourceGroupName: string, regionName: string, sqlMigrationServiceName: string, keyName: string): Promise<SqlMigrationServiceAuthenticationKeys> { export async function regenerateSqlMigrationServiceAuthKey(account: azdata.Account, subscription: Subscription, resourceGroupName: string, regionName: string, sqlMigrationServiceName: string, keyName: string, sessionId: string): Promise<SqlMigrationServiceAuthenticationKeys> {
const api = await getAzureCoreAPI(); const api = await getAzureCoreAPI();
const path = `/subscriptions/${subscription.id}/resourceGroups/${resourceGroupName}/providers/Microsoft.DataMigration/sqlMigrationServices/${sqlMigrationServiceName}/regenerateAuthKeys?api-version=2020-09-01-preview`; const path = `/subscriptions/${subscription.id}/resourceGroups/${resourceGroupName}/providers/Microsoft.DataMigration/sqlMigrationServices/${sqlMigrationServiceName}/regenerateAuthKeys?api-version=2020-09-01-preview`;
const requestBody = { const requestBody = {
@@ -206,7 +207,7 @@ export async function regenerateSqlMigrationServiceAuthKey(account: azdata.Accou
'keyName': keyName, 'keyName': keyName,
}; };
const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.POST, requestBody, true); const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.POST, requestBody, true, undefined, getSessionIdHeader(sessionId));
if (response.errors.length > 0) { if (response.errors.length > 0) {
throw new Error(response.errors.toString()); throw new Error(response.errors.toString());
} }
@@ -228,20 +229,20 @@ export async function getStorageAccountAccessKeys(account: azdata.Account, subsc
}; };
} }
export async function getSqlMigrationServiceMonitoringData(account: azdata.Account, subscription: Subscription, resourceGroupName: string, regionName: string, sqlMigrationService: string): Promise<IntegrationRuntimeMonitoringData> { export async function getSqlMigrationServiceMonitoringData(account: azdata.Account, subscription: Subscription, resourceGroupName: string, regionName: string, sqlMigrationService: string, sessionId: string): Promise<IntegrationRuntimeMonitoringData> {
const api = await getAzureCoreAPI(); const api = await getAzureCoreAPI();
const path = `/subscriptions/${subscription.id}/resourceGroups/${resourceGroupName}/providers/Microsoft.DataMigration/sqlMigrationServices/${sqlMigrationService}/monitoringData?api-version=2020-09-01-preview`; const path = `/subscriptions/${subscription.id}/resourceGroups/${resourceGroupName}/providers/Microsoft.DataMigration/sqlMigrationServices/${sqlMigrationService}/monitoringData?api-version=2020-09-01-preview`;
const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.GET, undefined, true); const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.GET, undefined, true, undefined, getSessionIdHeader(sessionId));
if (response.errors.length > 0) { if (response.errors.length > 0) {
throw new Error(response.errors.toString()); throw new Error(response.errors.toString());
} }
return response.response.data; return response.response.data;
} }
export async function startDatabaseMigration(account: azdata.Account, subscription: Subscription, regionName: string, targetServer: SqlManagedInstance | SqlVMServer, targetDatabaseName: string, requestBody: StartDatabaseMigrationRequest): Promise<StartDatabaseMigrationResponse> { export async function startDatabaseMigration(account: azdata.Account, subscription: Subscription, regionName: string, targetServer: SqlManagedInstance | SqlVMServer, targetDatabaseName: string, requestBody: StartDatabaseMigrationRequest, sessionId: string): Promise<StartDatabaseMigrationResponse> {
const api = await getAzureCoreAPI(); const api = await getAzureCoreAPI();
const path = `${targetServer.id}/providers/Microsoft.DataMigration/databaseMigrations/${targetDatabaseName}?api-version=2020-09-01-preview`; const path = `${targetServer.id}/providers/Microsoft.DataMigration/databaseMigrations/${targetDatabaseName}?api-version=2020-09-01-preview`;
const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.PUT, requestBody, true); const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.PUT, requestBody, true, undefined, getSessionIdHeader(sessionId));
if (response.errors.length > 0) { if (response.errors.length > 0) {
throw new Error(response.errors.toString()); throw new Error(response.errors.toString());
} }
@@ -253,10 +254,10 @@ export async function startDatabaseMigration(account: azdata.Account, subscripti
}; };
} }
export async function getDatabaseMigration(account: azdata.Account, subscription: Subscription, regionName: string, migrationId: string): Promise<DatabaseMigration> { export async function getDatabaseMigration(account: azdata.Account, subscription: Subscription, regionName: string, migrationId: string, sessionId: string): Promise<DatabaseMigration> {
const api = await getAzureCoreAPI(); const api = await getAzureCoreAPI();
const path = `${migrationId}?api-version=2020-09-01-preview`; const path = `${migrationId}?api-version=2020-09-01-preview`;
const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.GET, undefined, true); const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.GET, undefined, true, undefined, getSessionIdHeader(sessionId));
if (response.errors.length > 0) { if (response.errors.length > 0) {
if (response.response.status === 404 && response.response.data.error.code === 'ResourceDoesNotExist') { if (response.response.status === 404 && response.response.data.error.code === 'ResourceDoesNotExist') {
throw new Error(response.response.data.error.code); throw new Error(response.response.data.error.code);
@@ -266,49 +267,49 @@ export async function getDatabaseMigration(account: azdata.Account, subscription
return response.response.data; return response.response.data;
} }
export async function getMigrationStatus(account: azdata.Account, subscription: Subscription, migration: DatabaseMigration): Promise<DatabaseMigration> { export async function getMigrationStatus(account: azdata.Account, subscription: Subscription, migration: DatabaseMigration, sessionId: string): Promise<DatabaseMigration> {
const api = await getAzureCoreAPI(); const api = await getAzureCoreAPI();
const path = `${migration.id}?$expand=MigrationStatusDetails&api-version=2020-09-01-preview`; const path = `${migration.id}?$expand=MigrationStatusDetails&api-version=2020-09-01-preview`;
const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.GET, undefined, true); const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.GET, undefined, true, undefined, getSessionIdHeader(sessionId));
if (response.errors.length > 0) { if (response.errors.length > 0) {
throw new Error(response.errors.toString()); throw new Error(response.errors.toString());
} }
return response.response.data; return response.response.data;
} }
export async function getMigrationAsyncOperationDetails(account: azdata.Account, subscription: Subscription, url: string): Promise<AzureAsyncOperationResource> { export async function getMigrationAsyncOperationDetails(account: azdata.Account, subscription: Subscription, url: string, sessionId: string): Promise<AzureAsyncOperationResource> {
const api = await getAzureCoreAPI(); const api = await getAzureCoreAPI();
const response = await api.makeAzureRestRequest(account, subscription, url.replace('https://management.azure.com/', ''), azurecore.HttpRequestMethod.GET, undefined, true); const response = await api.makeAzureRestRequest(account, subscription, url.replace('https://management.azure.com/', ''), azurecore.HttpRequestMethod.GET, undefined, true, undefined, getSessionIdHeader(sessionId));
if (response.errors.length > 0) { if (response.errors.length > 0) {
throw new Error(response.errors.toString()); throw new Error(response.errors.toString());
} }
return response.response.data; return response.response.data;
} }
export async function listMigrationsBySqlMigrationService(account: azdata.Account, subscription: Subscription, sqlMigrationService: SqlMigrationService): Promise<DatabaseMigration[]> { export async function listMigrationsBySqlMigrationService(account: azdata.Account, subscription: Subscription, sqlMigrationService: SqlMigrationService, sessionId: string): Promise<DatabaseMigration[]> {
const api = await getAzureCoreAPI(); const api = await getAzureCoreAPI();
const path = `${sqlMigrationService.id}/listMigrations?$expand=MigrationStatusDetails&api-version=2020-09-01-preview`; const path = `${sqlMigrationService.id}/listMigrations?$expand=MigrationStatusDetails&api-version=2020-09-01-preview`;
const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.GET, undefined, true); const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.GET, undefined, true, undefined, getSessionIdHeader(sessionId));
if (response.errors.length > 0) { if (response.errors.length > 0) {
throw new Error(response.errors.toString()); throw new Error(response.errors.toString());
} }
return response.response.data.value; return response.response.data.value;
} }
export async function startMigrationCutover(account: azdata.Account, subscription: Subscription, migrationStatus: DatabaseMigration): Promise<any> { export async function startMigrationCutover(account: azdata.Account, subscription: Subscription, migrationStatus: DatabaseMigration, sessionId: string): Promise<any> {
const api = await getAzureCoreAPI(); const api = await getAzureCoreAPI();
const path = `${migrationStatus.id}/operations/${migrationStatus.properties.migrationOperationId}/cutover?api-version=2020-09-01-preview`; const path = `${migrationStatus.id}/operations/${migrationStatus.properties.migrationOperationId}/cutover?api-version=2020-09-01-preview`;
const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.POST, undefined, true); const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.POST, undefined, true, undefined, getSessionIdHeader(sessionId));
if (response.errors.length > 0) { if (response.errors.length > 0) {
throw new Error(response.errors.toString()); throw new Error(response.errors.toString());
} }
return response.response.data.value; return response.response.data.value;
} }
export async function stopMigration(account: azdata.Account, subscription: Subscription, migrationStatus: DatabaseMigration): Promise<void> { export async function stopMigration(account: azdata.Account, subscription: Subscription, migrationStatus: DatabaseMigration, sessionId: string): Promise<void> {
const api = await getAzureCoreAPI(); const api = await getAzureCoreAPI();
const path = `${migrationStatus.id}/operations/${migrationStatus.properties.migrationOperationId}/cancel?api-version=2020-09-01-preview`; const path = `${migrationStatus.id}/operations/${migrationStatus.properties.migrationOperationId}/cancel?api-version=2020-09-01-preview`;
const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.POST, undefined, true); const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.POST, undefined, true, undefined, getSessionIdHeader(sessionId));
if (response.errors.length > 0) { if (response.errors.length > 0) {
throw new Error(response.errors.toString()); throw new Error(response.errors.toString());
} }

View File

@@ -193,3 +193,9 @@ export function decorate(decorator: (fn: Function, key: string) => Function): Fu
descriptor[fnKey] = decorator(fn, key); descriptor[fnKey] = decorator(fn, key);
}; };
} }
export function getSessionIdHeader(sessionId: string): { [key: string]: string } {
return {
'SqlMigrationSessionId': sessionId
};
}

View File

@@ -90,7 +90,7 @@ export class CreateSqlMigrationServiceDialog {
try { try {
this._selectedResourceGroup = resourceGroup; this._selectedResourceGroup = resourceGroup;
this._createdMigrationService = await createSqlMigrationService(this._model._azureAccount, subscription, resourceGroup, location, serviceName!); this._createdMigrationService = await createSqlMigrationService(this._model._azureAccount, subscription, resourceGroup, location, serviceName!, this._model._sessionId);
if (this._createdMigrationService.error) { if (this._createdMigrationService.error) {
this.setDialogMessage(`${this._createdMigrationService.error.code} : ${this._createdMigrationService.error.message}`); this.setDialogMessage(`${this._createdMigrationService.error.code} : ${this._createdMigrationService.error.message}`);
this._statusLoadingComponent.loading = false; this._statusLoadingComponent.loading = false;
@@ -505,14 +505,14 @@ export class CreateSqlMigrationServiceDialog {
let migrationServiceStatus!: SqlMigrationService; let migrationServiceStatus!: SqlMigrationService;
for (let i = 0; i < maxRetries; i++) { for (let i = 0; i < maxRetries; i++) {
try { try {
migrationServiceStatus = await getSqlMigrationService(this._model._azureAccount, subscription, resourceGroup, location, this._createdMigrationService.name); migrationServiceStatus = await getSqlMigrationService(this._model._azureAccount, subscription, resourceGroup, location, this._createdMigrationService.name, this._model._sessionId);
break; break;
} catch (e) { } catch (e) {
console.log(e); console.log(e);
} }
await new Promise(r => setTimeout(r, 5000)); await new Promise(r => setTimeout(r, 5000));
} }
const migrationServiceMonitoringStatus = await getSqlMigrationServiceMonitoringData(this._model._azureAccount, subscription, resourceGroup, location, this._createdMigrationService!.name); const migrationServiceMonitoringStatus = await getSqlMigrationServiceMonitoringData(this._model._azureAccount, subscription, resourceGroup, location, this._createdMigrationService!.name, this._model._sessionId);
this.irNodes = migrationServiceMonitoringStatus.nodes.map((node) => { this.irNodes = migrationServiceMonitoringStatus.nodes.map((node) => {
return node.nodeName; return node.nodeName;
}); });
@@ -546,7 +546,7 @@ export class CreateSqlMigrationServiceDialog {
const subscription = this._model._targetSubscription; const subscription = this._model._targetSubscription;
const resourceGroup = (this.migrationServiceResourceGroupDropdown.value as azdata.CategoryValue).name; const resourceGroup = (this.migrationServiceResourceGroupDropdown.value as azdata.CategoryValue).name;
const location = this._model._targetServerInstance.location; const location = this._model._targetServerInstance.location;
const keys = await getSqlMigrationServiceAuthKeys(this._model._azureAccount, subscription, resourceGroup, location, this._createdMigrationService!.name); const keys = await getSqlMigrationServiceAuthKeys(this._model._azureAccount, subscription, resourceGroup, location, this._createdMigrationService!.name, this._model._sessionId);
this._copyKey1Button = this._view.modelBuilder.button().withProps({ this._copyKey1Button = this._view.modelBuilder.button().withProps({
title: constants.COPY_KEY1, title: constants.COPY_KEY1,

View File

@@ -27,13 +27,15 @@ export class MigrationCutoverDialogModel {
this.migrationOpStatus = (await getMigrationAsyncOperationDetails( this.migrationOpStatus = (await getMigrationAsyncOperationDetails(
this._migration.azureAccount, this._migration.azureAccount,
this._migration.subscription, this._migration.subscription,
this._migration.asyncUrl this._migration.asyncUrl,
this._migration.sessionId!
)); ));
} }
this.migrationStatus = (await getMigrationStatus( this.migrationStatus = (await getMigrationStatus(
this._migration.azureAccount, this._migration.azureAccount,
this._migration.subscription, this._migration.subscription,
this._migration.migrationContext this._migration.migrationContext,
this._migration.sessionId!,
)); ));
sendSqlMigrationActionEvent( sendSqlMigrationActionEvent(
@@ -55,7 +57,8 @@ export class MigrationCutoverDialogModel {
const cutover = await startMigrationCutover( const cutover = await startMigrationCutover(
this._migration.azureAccount, this._migration.azureAccount,
this._migration.subscription, this._migration.subscription,
this.migrationStatus this.migrationStatus,
this._migration.sessionId!
); );
sendSqlMigrationActionEvent( sendSqlMigrationActionEvent(
TelemetryViews.MigrationCutoverDialog, TelemetryViews.MigrationCutoverDialog,
@@ -81,7 +84,8 @@ export class MigrationCutoverDialogModel {
await stopMigration( await stopMigration(
this._migration.azureAccount, this._migration.azureAccount,
this._migration.subscription, this._migration.subscription,
this.migrationStatus this.migrationStatus,
this._migration.sessionId!
); );
sendSqlMigrationActionEvent( sendSqlMigrationActionEvent(
TelemetryViews.MigrationCutoverDialog, TelemetryViews.MigrationCutoverDialog,

View File

@@ -66,7 +66,8 @@ export class SqlMigrationServiceDetailsDialog {
migrationContext.subscription, migrationContext.subscription,
migrationContext.controller.properties.resourceGroup, migrationContext.controller.properties.resourceGroup,
migrationContext.controller.location, migrationContext.controller.location,
migrationContext.controller.name migrationContext.controller.name,
this.migrationContext.sessionId!
)); ));
const serviceNodeName = serviceNode.nodes?.map(node => node.nodeName).join(', ') const serviceNodeName = serviceNode.nodes?.map(node => node.nodeName).join(', ')
|| constants.SQL_MIGRATION_SERVICE_DETAILS_STATUS_UNAVAILABLE; || constants.SQL_MIGRATION_SERVICE_DETAILS_STATUS_UNAVAILABLE;
@@ -209,7 +210,8 @@ export class SqlMigrationServiceDetailsDialog {
migrationContext.controller.properties.resourceGroup, migrationContext.controller.properties.resourceGroup,
migrationContext.controller.location.toUpperCase(), migrationContext.controller.location.toUpperCase(),
migrationContext.controller.name, migrationContext.controller.name,
keyName); keyName,
migrationContext.sessionId!);
if (keys?.authKey1 && keyName === AUTH_KEY1) { if (keys?.authKey1 && keyName === AUTH_KEY1) {
await this._updateTableCell(this._migrationServiceAuthKeyTable, 0, 1, keys.authKey1, constants.SERVICE_KEY1_LABEL); await this._updateTableCell(this._migrationServiceAuthKeyTable, 0, 1, keys.authKey1, constants.SERVICE_KEY1_LABEL);
@@ -233,7 +235,8 @@ export class SqlMigrationServiceDetailsDialog {
migrationContext.subscription, migrationContext.subscription,
migrationContext.controller.properties.resourceGroup, migrationContext.controller.properties.resourceGroup,
migrationContext.controller.location.toUpperCase(), migrationContext.controller.location.toUpperCase(),
migrationContext.controller.name); migrationContext.controller.name,
migrationContext.sessionId!);
const copyKey1Button = view.modelBuilder const copyKey1Button = view.modelBuilder
.button() .button()

View File

@@ -31,7 +31,8 @@ export class MigrationLocalStorage {
migration.migrationContext = await getMigrationStatus( migration.migrationContext = await getMigrationStatus(
migration.azureAccount, migration.azureAccount,
migration.subscription, migration.subscription,
migration.migrationContext migration.migrationContext,
migration.sessionId!
); );
migration.migrationContext.properties.sourceDatabaseName = sourceDatabase; migration.migrationContext.properties.sourceDatabaseName = sourceDatabase;
migration.migrationContext.properties.backupConfiguration = backupConfiguration; migration.migrationContext.properties.backupConfiguration = backupConfiguration;
@@ -39,7 +40,8 @@ export class MigrationLocalStorage {
migration.asyncOperationResult = await getMigrationAsyncOperationDetails( migration.asyncOperationResult = await getMigrationAsyncOperationDetails(
migration.azureAccount, migration.azureAccount,
migration.subscription, migration.subscription,
migration.asyncUrl migration.asyncUrl,
migration.sessionId!
); );
} }
} }

View File

@@ -743,7 +743,7 @@ export class MigrationStateModel implements Model, vscode.Disposable {
public async getSqlMigrationServiceValues(subscription: azureResource.AzureResourceSubscription, managedInstance: SqlManagedInstance, resourceGroupName: string): Promise<azdata.CategoryValue[]> { public async getSqlMigrationServiceValues(subscription: azureResource.AzureResourceSubscription, managedInstance: SqlManagedInstance, resourceGroupName: string): Promise<azdata.CategoryValue[]> {
let sqlMigrationServiceValues: azdata.CategoryValue[] = []; let sqlMigrationServiceValues: azdata.CategoryValue[] = [];
try { try {
this._sqlMigrationServices = (await getSqlMigrationServices(this._azureAccount, subscription, managedInstance.location)).filter(sms => sms.location.toLowerCase() === this._targetServerInstance.location.toLowerCase() && sms.properties.resourceGroup.toLowerCase() === resourceGroupName?.toLowerCase()); this._sqlMigrationServices = (await getSqlMigrationServices(this._azureAccount, subscription, this._sessionId)).filter(sms => sms.location.toLowerCase() === this._targetServerInstance.location.toLowerCase() && sms.properties.resourceGroup.toLowerCase() === resourceGroupName?.toLowerCase());
this._sqlMigrationServices.forEach((sqlMigrationService) => { this._sqlMigrationServices.forEach((sqlMigrationService) => {
sqlMigrationServiceValues.push({ sqlMigrationServiceValues.push({
name: sqlMigrationService.id, name: sqlMigrationService.id,
@@ -839,7 +839,8 @@ export class MigrationStateModel implements Model, vscode.Disposable {
this._sqlMigrationService?.location!, this._sqlMigrationService?.location!,
this._targetServerInstance, this._targetServerInstance,
this._targetDatabaseNames[i], this._targetDatabaseNames[i],
requestBody requestBody,
this._sessionId
); );
response.databaseMigration.properties.sourceDatabaseName = this._migrationDbs[i]; response.databaseMigration.properties.sourceDatabaseName = this._migrationDbs[i];
response.databaseMigration.properties.backupConfiguration = requestBody.properties.backupConfiguration!; response.databaseMigration.properties.backupConfiguration = requestBody.properties.backupConfiguration!;

View File

@@ -463,21 +463,24 @@ export class IntergrationRuntimePage extends MigrationWizardPage {
this.migrationStateModel._targetSubscription, this.migrationStateModel._targetSubscription,
this.migrationStateModel._sqlMigrationService.properties.resourceGroup, this.migrationStateModel._sqlMigrationService.properties.resourceGroup,
this.migrationStateModel._sqlMigrationService.location, this.migrationStateModel._sqlMigrationService.location,
this.migrationStateModel._sqlMigrationService.name); this.migrationStateModel._sqlMigrationService.name,
this.migrationStateModel._sessionId);
this.migrationStateModel._sqlMigrationService = migrationService; this.migrationStateModel._sqlMigrationService = migrationService;
const migrationServiceMonitoringStatus = await getSqlMigrationServiceMonitoringData( const migrationServiceMonitoringStatus = await getSqlMigrationServiceMonitoringData(
this.migrationStateModel._azureAccount, this.migrationStateModel._azureAccount,
this.migrationStateModel._targetSubscription, this.migrationStateModel._targetSubscription,
this.migrationStateModel._sqlMigrationService.properties.resourceGroup, this.migrationStateModel._sqlMigrationService.properties.resourceGroup,
this.migrationStateModel._sqlMigrationService.location, this.migrationStateModel._sqlMigrationService.location,
this.migrationStateModel._sqlMigrationService!.name); this.migrationStateModel._sqlMigrationService!.name,
this.migrationStateModel._sessionId);
this.migrationStateModel._nodeNames = migrationServiceMonitoringStatus.nodes.map(node => node.nodeName); this.migrationStateModel._nodeNames = migrationServiceMonitoringStatus.nodes.map(node => node.nodeName);
const migrationServiceAuthKeys = await getSqlMigrationServiceAuthKeys( const migrationServiceAuthKeys = await getSqlMigrationServiceAuthKeys(
this.migrationStateModel._azureAccount, this.migrationStateModel._azureAccount,
this.migrationStateModel._targetSubscription, this.migrationStateModel._targetSubscription,
this.migrationStateModel._sqlMigrationService.properties.resourceGroup, this.migrationStateModel._sqlMigrationService.properties.resourceGroup,
this.migrationStateModel._sqlMigrationService.location, this.migrationStateModel._sqlMigrationService.location,
this.migrationStateModel._sqlMigrationService!.name this.migrationStateModel._sqlMigrationService!.name,
this.migrationStateModel._sessionId
); );
this.migrationStateModel._nodeNames = migrationServiceMonitoringStatus.nodes.map((node) => { this.migrationStateModel._nodeNames = migrationServiceMonitoringStatus.nodes.map((node) => {