From d1d6b229cee4763d9927f8c889ea946dde337fb3 Mon Sep 17 00:00:00 2001 From: Raymond Truong Date: Fri, 11 Mar 2022 09:53:50 -0800 Subject: [PATCH] [SQL Migration] Add more help text to database backup page (#18671) * Add help text for backups with checksums and Azure storage accounts with private endpoints * Update help text wording --- .../sql-migration/src/constants/strings.ts | 2 ++ .../src/wizard/databaseBackupPage.ts | 30 +++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/extensions/sql-migration/src/constants/strings.ts b/extensions/sql-migration/src/constants/strings.ts index 282b2fd261..abc6cc667d 100644 --- a/extensions/sql-migration/src/constants/strings.ts +++ b/extensions/sql-migration/src/constants/strings.ts @@ -295,6 +295,7 @@ export function ACCOUNT_ACCESS_ERROR(account: AzureAccount, error: Error) { // database backup page export const DATABASE_BACKUP_PAGE_TITLE = localize('sql.migration.database.page.title', "Database backup"); export const DATABASE_BACKUP_PAGE_DESCRIPTION = localize('sql.migration.database.page.description', "Select the location of the database backups to use during migration."); +export const DATABASE_BACKUP_CHECKSUM_INFO_TEXT = localize('sql.migration.database.checksum.info.text', "Ensure that your backups were taken with the WITH CHECKSUM option."); export const DATABASE_BACKUP_NC_NETWORK_SHARE_RADIO_LABEL = localize('sql.migration.nc.network.share.radio.label', "My database backups are on a network share"); export const DATABASE_BACKUP_NC_BLOB_STORAGE_RADIO_LABEL = localize('sql.migration.nc.blob.storage.radio.label', "My database backups are in an Azure Storage Blob Container"); export const DATABASE_BACKUP_NETWORK_SHARE_HEADER_TEXT = localize('sql.migration.network.share.header.text', "Network share details"); @@ -309,6 +310,7 @@ export const DATABASE_BACKUP_NETWORK_SHARE_PASSWORD_LABEL = localize('sql.migrat export const DATABASE_BACKUP_NETWORK_SHARE_PASSWORD_PLACEHOLDER = localize('sql.migration.network.share.password.placeholder', "Enter password."); export const DATABASE_BACKUP_NETWORK_SHARE_AZURE_ACCOUNT_HEADER = localize('sql.migration.network.share.azure.header', "Storage account details"); export const DATABASE_BACKUP_NETWORK_SHARE_AZURE_ACCOUNT_HELP = localize('sql.migration.network.share.azure.help', "Provide the Azure Storage account where the backups will be uploaded to."); +export const DATABASE_BACKUP_PRIVATE_ENDPOINT_INFO_TEXT = localize('sql.migration.database.private.endpoint.info.text', "Ensure that the Azure Storage account does not use a private endpoint."); export const DUPLICATE_NAME_ERROR = localize('sql.migration.unique.name', "Select a unique name for this target database"); export function DATABASE_ALREADY_EXISTS_MI(dbName: string, targetName: string): string { return localize('sql.migration.database.already.exists', "Database '{0}' already exists on the target managed instance '{1}'.", dbName, targetName); diff --git a/extensions/sql-migration/src/wizard/databaseBackupPage.ts b/extensions/sql-migration/src/wizard/databaseBackupPage.ts index 7d0160e208..44d621e984 100644 --- a/extensions/sql-migration/src/wizard/databaseBackupPage.ts +++ b/extensions/sql-migration/src/wizard/databaseBackupPage.ts @@ -123,6 +123,15 @@ export class DatabaseBackupPage extends MigrationWizardPage { } }).component(); + const backupChecksumInfoBox = this._view.modelBuilder.infoBox().withProps({ + text: constants.DATABASE_BACKUP_CHECKSUM_INFO_TEXT, + style: 'information', + width: WIZARD_INPUT_COMPONENT_WIDTH, + CSSStyles: { + ...styles.BODY_CSS + } + }).component(); + this._networkShareButton = this._view.modelBuilder.radioButton() .withProps({ name: buttonGroup, @@ -160,6 +169,7 @@ export class DatabaseBackupPage extends MigrationWizardPage { const flexContainer = this._view.modelBuilder.flexContainer().withItems( [ selectLocationText, + backupChecksumInfoBox, this._networkShareButton, this._blobContainerButton ] @@ -457,6 +467,15 @@ export class DatabaseBackupPage extends MigrationWizardPage { } }).component(); + const azureStoragePrivateEndpointInfoBox = this._view.modelBuilder.infoBox().withProps({ + text: constants.DATABASE_BACKUP_PRIVATE_ENDPOINT_INFO_TEXT, + style: 'information', + width: WIZARD_INPUT_COMPONENT_WIDTH, + CSSStyles: { + ...styles.BODY_CSS + } + }).component(); + this._networkShareTargetDatabaseNamesTable = this._view.modelBuilder.declarativeTable().withProps({ columns: [ { @@ -560,6 +579,7 @@ export class DatabaseBackupPage extends MigrationWizardPage { this._blobTableContainer = this._view.modelBuilder.flexContainer().withItems([ blobTableText, allFieldsRequiredLabel, + azureStoragePrivateEndpointInfoBox, this._blobContainerTargetDatabaseNamesTable ]).withProps({ CSSStyles: { @@ -601,6 +621,15 @@ export class DatabaseBackupPage extends MigrationWizardPage { } }).component(); + const azureStoragePrivateEndpointInfoBox = this._view.modelBuilder.infoBox().withProps({ + text: constants.DATABASE_BACKUP_PRIVATE_ENDPOINT_INFO_TEXT, + style: 'information', + width: WIZARD_INPUT_COMPONENT_WIDTH, + CSSStyles: { + ...styles.BODY_CSS + } + }).component(); + const subscriptionLabel = this._view.modelBuilder.text() .withProps({ value: constants.SUBSCRIPTION, @@ -728,6 +757,7 @@ export class DatabaseBackupPage extends MigrationWizardPage { }).withItems([ azureAccountHeader, azureAccountHelpText, + azureStoragePrivateEndpointInfoBox, subscriptionLabel, this._networkShareContainerSubscription, locationLabel,