From 0e9d956ee5feb2f4fa1262315b78df4d1b7ecf12 Mon Sep 17 00:00:00 2001 From: Aasim Khan Date: Thu, 29 Jul 2021 10:14:15 -0700 Subject: [PATCH] Adding support for multi cloud in azure rest api calls (#16454) --- .../src/account-provider/providerSettings.ts | 33 ++++++++++++++++++- .../azurecore/src/azureResource/utils.ts | 4 +-- extensions/azurecore/src/azurecore.d.ts | 10 ++++++ src/sql/azdata.proposed.d.ts | 6 +++- .../workbench/api/common/sqlExtHostTypes.ts | 3 +- 5 files changed, 51 insertions(+), 5 deletions(-) diff --git a/extensions/azurecore/src/account-provider/providerSettings.ts b/extensions/azurecore/src/account-provider/providerSettings.ts index 11164cdab7..0ed13f84b7 100644 --- a/extensions/azurecore/src/account-provider/providerSettings.ts +++ b/extensions/azurecore/src/account-provider/providerSettings.ts @@ -18,7 +18,8 @@ const enum SettingIds { ossrdbms = 'ossrdbms', vault = 'vault', ado = 'ado', - ala = 'ala' + ala = 'ala', + storage = 'storage' } const publicAzureSettings: ProviderSettings = { @@ -74,6 +75,12 @@ const publicAzureSettings: ProviderSettings = { endpoint: 'https://api.loganalytics.io', azureResourceId: AzureResource.AzureLogAnalytics, }, + azureStorageResource: { + id: SettingIds.storage, + endpoint: '', + endpointSuffix: '.core.windows.net', + azureResourceId: AzureResource.AzureStorage + }, redirectUri: 'https://vscode-redirect.azurewebsites.net/', scopes: [ 'openid', 'email', 'profile', 'offline_access', @@ -128,6 +135,12 @@ const usGovAzureSettings: ProviderSettings = { endpoint: 'https://api.loganalytics.us', azureResourceId: AzureResource.AzureLogAnalytics, }, + azureStorageResource: { + id: SettingIds.storage, + endpoint: '', + endpointSuffix: '.core.usgovcloudapi.net', + azureResourceId: AzureResource.AzureStorage + }, redirectUri: 'https://vscode-redirect.azurewebsites.net/', scopes: [ 'openid', 'email', 'profile', 'offline_access', @@ -181,6 +194,12 @@ const usNatAzureSettings: ProviderSettings = { endpoint: 'https://api.loganalytics.azure.eaglex.ic.gov', azureResourceId: AzureResource.AzureLogAnalytics, }, + azureStorageResource: { + id: SettingIds.storage, + endpoint: '', + endpointSuffix: '.core.eaglex.ic.gov', + azureResourceId: AzureResource.AzureStorage + }, redirectUri: 'https://vscode-redirect.azurewebsites.net/', scopes: [ 'openid', 'email', 'profile', 'offline_access', @@ -220,6 +239,12 @@ const germanyAzureSettings: ProviderSettings = { endpoint: 'https://vault.microsoftazure.de', azureResourceId: AzureResource.AzureKeyVault }, + azureStorageResource: { + id: SettingIds.storage, + endpoint: '', + endpointSuffix: '.core.cloudapi.de', + azureResourceId: AzureResource.AzureStorage + }, redirectUri: 'https://vscode-redirect.azurewebsites.net/', scopes: [ 'openid', 'email', 'profile', 'offline_access', @@ -273,6 +298,12 @@ const chinaAzureSettings: ProviderSettings = { endpoint: 'https://api.loganalytics.azure.cn', azureResourceId: AzureResource.AzureLogAnalytics, }, + azureStorageResource: { + id: SettingIds.storage, + endpoint: '', + endpointSuffix: '.core.chinacloudapi.cn', + azureResourceId: AzureResource.AzureStorage + }, redirectUri: 'https://vscode-redirect.azurewebsites.net/', scopes: [ 'openid', 'email', 'profile', 'offline_access', diff --git a/extensions/azurecore/src/azureResource/utils.ts b/extensions/azurecore/src/azureResource/utils.ts index 3d64187794..0de5010748 100644 --- a/extensions/azurecore/src/azureResource/utils.ts +++ b/extensions/azurecore/src/azureResource/utils.ts @@ -396,7 +396,7 @@ export async function makeHttpRequest(account: azdata.Account, subscription: azu if (host) { requestUrl = `${host}${path}`; } else { - requestUrl = `https://management.azure.com${path}`; + requestUrl = `${account.properties.providerSettings.settings.armResource.endpoint}${path}`; } let response; @@ -494,7 +494,7 @@ export async function getBlobs(account: azdata.Account, subscription: azureResou try { const sharedKeyCredential = new StorageSharedKeyCredential(storageAccount.name, storageKeys.keyName1); const blobServiceClient = new BlobServiceClient( - `https://${storageAccount.name}.blob.core.windows.net`, + `https://${storageAccount.name}.blob${account.properties.providerSettings.settings.azureStorageResource.endpointSuffix}`, sharedKeyCredential ); const containerClient = blobServiceClient.getContainerClient(containerName); diff --git a/extensions/azurecore/src/azurecore.d.ts b/extensions/azurecore/src/azurecore.d.ts index 03a27ebb53..ec6c5bea0f 100644 --- a/extensions/azurecore/src/azurecore.d.ts +++ b/extensions/azurecore/src/azurecore.d.ts @@ -123,6 +123,11 @@ declare module 'azurecore' { */ azureLogAnalyticsResource?: Resource; + /** + * Information that describes the Azure Storage resourceI + */ + azureStorageResource?: Resource; + /** * A list of tenant IDs to authenticate against. If defined, then these IDs will be used * instead of querying the tenants endpoint of the armResource @@ -160,6 +165,11 @@ declare module 'azurecore' { */ endpoint: string; + /** + * Endpoint suffix used to access the resource + */ + endpointSuffix?: string; + /** * Resource ID for azdata */ diff --git a/src/sql/azdata.proposed.d.ts b/src/sql/azdata.proposed.d.ts index 9d0dc85894..b91a240da5 100644 --- a/src/sql/azdata.proposed.d.ts +++ b/src/sql/azdata.proposed.d.ts @@ -857,7 +857,11 @@ declare module 'azdata' { /** * Azure Log Analytics */ - AzureLogAnalytics = 8 + AzureLogAnalytics = 8, + /** + * Azure Storage + */ + AzureStorage = 9 } export interface ButtonProperties { diff --git a/src/sql/workbench/api/common/sqlExtHostTypes.ts b/src/sql/workbench/api/common/sqlExtHostTypes.ts index 7a56f1ba3b..274ff83a7e 100644 --- a/src/sql/workbench/api/common/sqlExtHostTypes.ts +++ b/src/sql/workbench/api/common/sqlExtHostTypes.ts @@ -437,7 +437,8 @@ export enum AzureResource { MicrosoftResourceManagement = 5, AzureDevOps = 6, MsGraph = 7, - AzureLogAnalytics = 8 + AzureLogAnalytics = 8, + AzureStorage = 9 } export class TreeItem extends vsExtTypes.TreeItem {