mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-17 01:25:36 -05:00
Renaming controller to migration service and other bug fixes/ validations. (#14751)
* - Added coming soon message for learn more. - Potential fix for learn more message * Renaming of controller to sqlMigrationService * Surfacing some errors -Azure account is stale error -Migration Service creation error. * Adding refresh azure token validation. * Fixing some errors pointed during PR -Fixing property names -Fixing count * Fixing migration status - Adding special error handling for resource not found error - Deleting unfound migrations from local cache - Using prefetched migration status for view all Misc fixes: - Using SQL server version name instead of number - Fixing Icons on sku recommendation page - Fixing table column width in cutover dialog - Adding spinner button to refresh. * Fixing all strings in migration service page and dialog * fixed a string error in create service dialog
This commit is contained in:
@@ -86,10 +86,10 @@ export async function getBlobContainers(account: azdata.Account, subscription: S
|
||||
return blobContainers!;
|
||||
}
|
||||
|
||||
export async function getMigrationController(account: azdata.Account, subscription: Subscription, resourceGroupName: string, regionName: string, controllerName: string): Promise<SqlMigrationController> {
|
||||
export async function getSqlMigrationService(account: azdata.Account, subscription: Subscription, resourceGroupName: string, regionName: string, sqlMigrationServiceName: string): Promise<SqlMigrationService> {
|
||||
const api = await getAzureCoreAPI();
|
||||
const host = `https://${regionName}.management.azure.com`;
|
||||
const path = `/subscriptions/${subscription.id}/resourceGroups/${resourceGroupName}/providers/Microsoft.DataMigration/Controllers/${controllerName}?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, host);
|
||||
if (response.errors.length > 0) {
|
||||
throw new Error(response.errors.toString());
|
||||
@@ -97,10 +97,10 @@ export async function getMigrationController(account: azdata.Account, subscripti
|
||||
return response.response.data;
|
||||
}
|
||||
|
||||
export async function getMigrationControllers(account: azdata.Account, subscription: Subscription, resourceGroupName: string, regionName: string): Promise<SqlMigrationController[]> {
|
||||
export async function getSqlMigrationServices(account: azdata.Account, subscription: Subscription, regionName: string): Promise<SqlMigrationService[]> {
|
||||
const api = await getAzureCoreAPI();
|
||||
const host = `https://${regionName}.management.azure.com`;
|
||||
const path = `/subscriptions/${subscription.id}/providers/Microsoft.DataMigration/Controllers?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, host);
|
||||
if (response.errors.length > 0) {
|
||||
throw new Error(response.errors.toString());
|
||||
@@ -109,10 +109,10 @@ export async function getMigrationControllers(account: azdata.Account, subscript
|
||||
return response.response.data.value;
|
||||
}
|
||||
|
||||
export async function createMigrationController(account: azdata.Account, subscription: Subscription, resourceGroupName: string, regionName: string, controllerName: string): Promise<SqlMigrationController> {
|
||||
export async function createSqlMigrationService(account: azdata.Account, subscription: Subscription, resourceGroupName: string, regionName: string, sqlMigrationServiceName: string): Promise<SqlMigrationService> {
|
||||
const api = await getAzureCoreAPI();
|
||||
const host = `https://${regionName}.management.azure.com`;
|
||||
const path = `/subscriptions/${subscription.id}/resourceGroups/${resourceGroupName}/providers/Microsoft.DataMigration/Controllers/${controllerName}?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 = {
|
||||
'location': regionName
|
||||
};
|
||||
@@ -123,10 +123,10 @@ export async function createMigrationController(account: azdata.Account, subscri
|
||||
return response.response.data;
|
||||
}
|
||||
|
||||
export async function getMigrationControllerAuthKeys(account: azdata.Account, subscription: Subscription, resourceGroupName: string, regionName: string, controllerName: string): Promise<GetMigrationControllerAuthKeysResult> {
|
||||
export async function getSqlMigrationServiceAuthKeys(account: azdata.Account, subscription: Subscription, resourceGroupName: string, regionName: string, sqlMigrationServiceName: string): Promise<SqlMigrationServiceAuthenticationKeys> {
|
||||
const api = await getAzureCoreAPI();
|
||||
const host = `https://${regionName}.management.azure.com`;
|
||||
const path = `/subscriptions/${subscription.id}/resourceGroups/${resourceGroupName}/providers/Microsoft.DataMigration/Controllers/${controllerName}/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, host);
|
||||
if (response.errors.length > 0) {
|
||||
throw new Error(response.errors.toString());
|
||||
@@ -150,10 +150,10 @@ export async function getStorageAccountAccessKeys(account: azdata.Account, subsc
|
||||
};
|
||||
}
|
||||
|
||||
export async function getMigrationControllerMonitoringData(account: azdata.Account, subscription: Subscription, resourceGroupName: string, regionName: string, controllerName: string): Promise<GetMigrationControllerMonitoringData> {
|
||||
export async function getSqlMigrationServiceMonitoringData(account: azdata.Account, subscription: Subscription, resourceGroupName: string, regionName: string, sqlMigrationService: string): Promise<IntegrationRuntimeMonitoringData> {
|
||||
const api = await getAzureCoreAPI();
|
||||
const host = `https://${regionName}.management.azure.com`;
|
||||
const path = `/subscriptions/${subscription.id}/resourceGroups/${resourceGroupName}/providers/Microsoft.DataMigration/Controllers/${controllerName}/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, host);
|
||||
if (response.errors.length > 0) {
|
||||
throw new Error(response.errors.toString());
|
||||
@@ -182,6 +182,9 @@ export async function getDatabaseMigration(account: azdata.Account, subscription
|
||||
const path = `${migrationId}?api-version=2020-09-01-preview`;
|
||||
const response = await api.makeAzureRestRequest(account, subscription, path, azurecore.HttpRequestMethod.GET, undefined, true, host);
|
||||
if (response.errors.length > 0) {
|
||||
if (response.response.status === 404 && response.response.data.error.code === 'ResourceDoesNotExist') {
|
||||
throw new Error(response.response.data.error.code);
|
||||
}
|
||||
throw new Error(response.errors.toString());
|
||||
}
|
||||
return response.response.data;
|
||||
@@ -198,10 +201,10 @@ export async function getMigrationStatus(account: azdata.Account, subscription:
|
||||
return response.response.data;
|
||||
}
|
||||
|
||||
export async function listMigrationsByController(account: azdata.Account, subscription: Subscription, controller: SqlMigrationController): Promise<DatabaseMigration[]> {
|
||||
export async function listMigrationsBySqlMigrationService(account: azdata.Account, subscription: Subscription, sqlMigrationService: SqlMigrationService): Promise<DatabaseMigration[]> {
|
||||
const api = await getAzureCoreAPI();
|
||||
const host = `https://eastus2euap.management.azure.com`;
|
||||
const path = `${controller.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, host);
|
||||
if (response.errors.length > 0) {
|
||||
throw new Error(response.errors.toString());
|
||||
@@ -233,7 +236,7 @@ export async function stopMigration(account: azdata.Account, subscription: Subsc
|
||||
/**
|
||||
* For now only east us euap is supported. Actual API calls will be added in the public release.
|
||||
*/
|
||||
export function getMigrationControllerRegions(): azdata.CategoryValue[] {
|
||||
export function getSqlMigrationServiceRegions(): azdata.CategoryValue[] {
|
||||
return [
|
||||
{
|
||||
displayName: loc.EASTUS2EUAP,
|
||||
@@ -242,7 +245,7 @@ export function getMigrationControllerRegions(): azdata.CategoryValue[] {
|
||||
];
|
||||
}
|
||||
|
||||
type SortableAzureResources = AzureProduct | azureResource.FileShare | azureResource.BlobContainer | azureResource.AzureResourceSubscription | SqlMigrationController;
|
||||
type SortableAzureResources = AzureProduct | azureResource.FileShare | azureResource.BlobContainer | azureResource.AzureResourceSubscription | SqlMigrationService;
|
||||
function sortResourceArrayByName(resourceArray: SortableAzureResources[]): void {
|
||||
if (!resourceArray) {
|
||||
return;
|
||||
@@ -258,7 +261,7 @@ function sortResourceArrayByName(resourceArray: SortableAzureResources[]): void
|
||||
});
|
||||
}
|
||||
|
||||
export interface MigrationControllerProperties {
|
||||
export interface SqlMigrationServiceProperties {
|
||||
name: string;
|
||||
subscriptionId: string;
|
||||
resourceGroup: string;
|
||||
@@ -268,8 +271,8 @@ export interface MigrationControllerProperties {
|
||||
isProvisioned?: boolean;
|
||||
}
|
||||
|
||||
export interface SqlMigrationController {
|
||||
properties: MigrationControllerProperties;
|
||||
export interface SqlMigrationService {
|
||||
properties: SqlMigrationServiceProperties;
|
||||
location: string;
|
||||
id: string;
|
||||
name: string;
|
||||
@@ -279,7 +282,7 @@ export interface SqlMigrationController {
|
||||
}
|
||||
}
|
||||
|
||||
export interface GetMigrationControllerAuthKeysResult {
|
||||
export interface SqlMigrationServiceAuthenticationKeys {
|
||||
authKey1: string,
|
||||
authKey2: string
|
||||
}
|
||||
@@ -289,12 +292,12 @@ export interface GetStorageAccountAccessKeysResult {
|
||||
keyName2: string
|
||||
}
|
||||
|
||||
export interface GetMigrationControllerMonitoringData {
|
||||
export interface IntegrationRuntimeMonitoringData {
|
||||
name: string,
|
||||
nodes: MigrationControllerNode[];
|
||||
nodes: IntegrationRuntimeNode[];
|
||||
}
|
||||
|
||||
export interface MigrationControllerNode {
|
||||
export interface IntegrationRuntimeNode {
|
||||
availableMemoryInMB: number,
|
||||
concurrentJobsLimit: number
|
||||
concurrentJobsRunning: number,
|
||||
@@ -307,27 +310,32 @@ export interface MigrationControllerNode {
|
||||
export interface StartDatabaseMigrationRequest {
|
||||
location: string,
|
||||
properties: {
|
||||
SourceDatabaseName: string,
|
||||
MigrationController: string,
|
||||
BackupConfiguration: {
|
||||
TargetLocation: {
|
||||
StorageAccountResourceId: string,
|
||||
AccountKey: string,
|
||||
sourceDatabaseName: string,
|
||||
migrationService: string,
|
||||
backupConfiguration: {
|
||||
targetLocation: {
|
||||
storageAccountResourceId: string,
|
||||
accountKey: string,
|
||||
}
|
||||
SourceLocation: {
|
||||
FileShare: {
|
||||
Path: string,
|
||||
Username: string,
|
||||
Password: string,
|
||||
sourceLocation: {
|
||||
fileShare?: {
|
||||
path: string,
|
||||
username: string,
|
||||
password: string,
|
||||
},
|
||||
azureBlob?: {
|
||||
storageAccountResourceId: string,
|
||||
accountKey: string,
|
||||
blobContainerName: string
|
||||
}
|
||||
},
|
||||
},
|
||||
SourceSqlConnection: {
|
||||
DataSource: string,
|
||||
Username: string,
|
||||
Password: string
|
||||
sourceSqlConnection: {
|
||||
dataSource: string,
|
||||
username: string,
|
||||
password: string
|
||||
},
|
||||
Scope: string
|
||||
scope: string
|
||||
}
|
||||
}
|
||||
|
||||
@@ -347,10 +355,12 @@ export interface DatabaseMigrationProperties {
|
||||
provisioningState: string;
|
||||
migrationStatus: string;
|
||||
migrationStatusDetails?: MigrationStatusDetails;
|
||||
startedOn: string;
|
||||
endedOn: string;
|
||||
sourceSqlConnection: SqlConnectionInfo;
|
||||
sourceDatabaseName: string;
|
||||
targetDatabaseCollation: string;
|
||||
migrationController: string;
|
||||
migrationService: string;
|
||||
migrationOperationId: string;
|
||||
backupConfiguration: BackupConfiguration;
|
||||
autoCutoverConfiguration: AutoCutoverConfiguration;
|
||||
|
||||
@@ -21,3 +21,22 @@ export function deepClone<T>(obj: T): T {
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
export function getSqlServerName(majorVersion: number): string | undefined {
|
||||
switch (majorVersion) {
|
||||
case 10:
|
||||
return 'SQL Server 2008';
|
||||
case 11:
|
||||
return 'SQL Server 2012';
|
||||
case 12:
|
||||
return 'SQL Server 2014';
|
||||
case 13:
|
||||
return 'SQL Server 2016';
|
||||
case 14:
|
||||
return 'SQL Server 2017';
|
||||
case 15:
|
||||
return 'SQL Server 2019';
|
||||
default:
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user