Revert "Added Accounts and Database Backup Page to Migration wizard (#13548)" (#13742)

This reverts commit e169005571.
This commit is contained in:
Charles Gagnon
2020-12-09 16:28:43 -08:00
committed by GitHub
parent e7884b8b61
commit 147ee53e35
15 changed files with 23 additions and 1354 deletions

View File

@@ -6,7 +6,6 @@
declare module 'azureResource' {
import { TreeDataProvider } from 'vscode';
import { DataProvider, Account, TreeItem } from 'azdata';
import { FileShareItem, ListContainerItem } from '@azure/arm-storage/esm/models';
export namespace azureResource {
export const enum AzureResourceType {
@@ -19,8 +18,7 @@ declare module 'azureResource' {
kustoClusters = 'microsoft.kusto/clusters',
azureArcPostgresServer = 'microsoft.azuredata/postgresinstances',
postgresServer = 'microsoft.dbforpostgresql/servers',
azureArcService = 'microsoft.azuredata/datacontrollers',
storageAccount = 'microsoft.storage/storageaccounts',
azureArcService = 'microsoft.azuredata/datacontrollers'
}
export interface IAzureResourceProvider extends DataProvider {
@@ -77,10 +75,7 @@ declare module 'azureResource' {
fullName: string;
defaultDatabaseName: string;
}
export interface BlobContainer extends ListContainerItem {
}
export interface FileShare extends FileShareItem {
}
}
}

View File

@@ -5,18 +5,14 @@
import { ResourceGraphClient } from '@azure/arm-resourcegraph';
import { TokenCredentials } from '@azure/ms-rest-js';
import axios, { AxiosRequestConfig } from 'axios';
import * as azdata from 'azdata';
import { HttpGetRequestResult, GetResourceGroupsResult, GetSubscriptionsResult, ResourceQueryResult, GetBlobContainersResult, GetFileSharesResult } from 'azurecore';
import { GetResourceGroupsResult, GetSubscriptionsResult, ResourceQueryResult } from 'azurecore';
import { azureResource } from 'azureResource';
import { EOL } from 'os';
import * as nls from 'vscode-nls';
import { AppContext } from '../appContext';
import { invalidAzureAccount, invalidTenant, unableToFetchTokenError } from '../localizedConstants';
import { AzureResourceServiceNames } from './constants';
import { IAzureResourceSubscriptionFilterService, IAzureResourceSubscriptionService } from './interfaces';
import { AzureResourceGroupService } from './providers/resourceGroup/resourceGroupService';
import { StorageManagementClient } from '@azure/arm-storage';
const localize = nls.loadMessageBundle();
@@ -110,7 +106,7 @@ export function equals(one: any, other: any): boolean {
export async function getResourceGroups(appContext: AppContext, account?: azdata.Account, subscription?: azureResource.AzureResourceSubscription, ignoreErrors: boolean = false): Promise<GetResourceGroupsResult> {
const result: GetResourceGroupsResult = { resourceGroups: [], errors: [] };
if (!account?.properties?.tenants || !Array.isArray(account.properties.tenants) || !subscription) {
const error = new Error(invalidAzureAccount);
const error = new Error(localize('azure.accounts.getResourceGroups.invalidParamsError', "Invalid account or subscription"));
if (!ignoreErrors) {
throw error;
}
@@ -150,7 +146,7 @@ export async function runResourceQuery<T extends azureResource.AzureGraphResourc
query: string): Promise<ResourceQueryResult<T>> {
const result: ResourceQueryResult<T> = { resources: [], errors: [] };
if (!account?.properties?.tenants || !Array.isArray(account.properties.tenants)) {
const error = new Error(invalidAzureAccount);
const error = new Error(localize('azure.accounts.runResourceQuery.errors.invalidAccount', "Invalid account"));
if (!ignoreErrors) {
throw error;
}
@@ -161,7 +157,7 @@ export async function runResourceQuery<T extends azureResource.AzureGraphResourc
// Check our subscriptions to ensure we have valid ones
subscriptions.forEach(subscription => {
if (!subscription.tenant) {
const error = new Error(invalidTenant);
const error = new Error(localize('azure.accounts.runResourceQuery.errors.noTenantSpecifiedForSubscription', "Invalid tenant for subscription"));
if (!ignoreErrors) {
throw error;
}
@@ -192,7 +188,7 @@ export async function runResourceQuery<T extends azureResource.AzureGraphResourc
resourceClient = new ResourceGraphClient(credential, { baseUri: account.properties.providerSettings.settings.armResource.endpoint });
} catch (err) {
console.error(err);
const error = new Error(unableToFetchTokenError(tenant.id));
const error = new Error(localize('azure.accounts.runResourceQuery.errors.unableToFetchToken', "Unable to get token for tenant {0}", tenant.id));
result.errors.push(error);
continue;
}
@@ -231,7 +227,7 @@ export async function runResourceQuery<T extends azureResource.AzureGraphResourc
export async function getSubscriptions(appContext: AppContext, account?: azdata.Account, ignoreErrors: boolean = false): Promise<GetSubscriptionsResult> {
const result: GetSubscriptionsResult = { subscriptions: [], errors: [] };
if (!account?.properties?.tenants || !Array.isArray(account.properties.tenants)) {
const error = new Error(invalidAzureAccount);
const error = new Error(localize('azure.accounts.getSubscriptions.invalidParamsError', "Invalid account"));
if (!ignoreErrors) {
throw error;
}
@@ -265,7 +261,7 @@ export async function getSubscriptions(appContext: AppContext, account?: azdata.
export async function getSelectedSubscriptions(appContext: AppContext, account?: azdata.Account, ignoreErrors: boolean = false): Promise<GetSubscriptionsResult> {
const result: GetSubscriptionsResult = { subscriptions: [], errors: [] };
if (!account?.properties?.tenants || !Array.isArray(account.properties.tenants)) {
const error = new Error(invalidAzureAccount);
const error = new Error(localize('azure.accounts.getSelectedSubscriptions.invalidParamsError', "Invalid account"));
if (!ignoreErrors) {
throw error;
}
@@ -288,189 +284,3 @@ export async function getSelectedSubscriptions(appContext: AppContext, account?:
}
return result;
}
/**
* makes a GET request to Azure REST apis. Currently, it only supports GET ARM queries.
*/
export async function makeHttpGetRequest(account: azdata.Account, subscription: azureResource.AzureResourceSubscription, ignoreErrors: boolean = false, url: string): Promise<HttpGetRequestResult> {
const result: HttpGetRequestResult = { response: {}, errors: [] };
if (!account?.properties?.tenants || !Array.isArray(account.properties.tenants)) {
const error = new Error(invalidAzureAccount);
if (!ignoreErrors) {
throw error;
}
result.errors.push(error);
}
if (!subscription.tenant) {
const error = new Error(invalidTenant);
if (!ignoreErrors) {
throw error;
}
result.errors.push(error);
}
if (result.errors.length > 0) {
return result;
}
let securityToken: { token: string, tokenType?: string };
try {
securityToken = await azdata.accounts.getAccountSecurityToken(
account,
subscription.tenant!,
azdata.AzureResource.ResourceManagement
);
} catch (err) {
console.error(err);
const error = new Error(unableToFetchTokenError(subscription.tenant));
if (!ignoreErrors) {
throw error;
}
result.errors.push(error);
}
if (result.errors.length > 0) {
return result;
}
const config: AxiosRequestConfig = {
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${securityToken.token}`
},
validateStatus: () => true // Never throw
};
const response = await axios.get(url, config);
if (response.status !== 200) {
let errorMessage: string[] = [];
errorMessage.push(response.status.toString());
errorMessage.push(response.statusText);
if (response.data && response.data.error) {
errorMessage.push(`${response.data.error.code} : ${response.data.error.message}`);
}
const error = new Error(errorMessage.join(EOL));
if (!ignoreErrors) {
throw error;
}
result.errors.push(error);
}
result.response = response;
return result;
}
export async function getBlobContainers(account: azdata.Account, subscription: azureResource.AzureResourceSubscription, storageAccounts: azureResource.AzureGraphResource, ignoreErrors: boolean): Promise<GetBlobContainersResult> {
let result: GetBlobContainersResult = { blobContainer: undefined, errors: [] };
if (!account?.properties?.tenants || !Array.isArray(account.properties.tenants)) {
const error = new Error(invalidAzureAccount);
if (!ignoreErrors) {
throw error;
}
result.errors.push(error);
}
if (!subscription.tenant) {
const error = new Error(invalidTenant);
if (!ignoreErrors) {
throw error;
}
result.errors.push(error);
}
if (result.errors.length > 0) {
return result;
}
let securityToken: { token: string, tokenType?: string };
let credential: TokenCredentials;
try {
securityToken = await azdata.accounts.getAccountSecurityToken(
account,
subscription.tenant!,
azdata.AzureResource.ResourceManagement
);
const token = securityToken.token;
const tokenType = securityToken.tokenType;
credential = new TokenCredentials(token, tokenType);
} catch (err) {
console.error(err);
const error = new Error(unableToFetchTokenError(subscription.tenant));
if (!ignoreErrors) {
throw error;
}
result.errors.push(error);
}
try {
const client = new StorageManagementClient(<any>credential, subscription.id);
result.blobContainer = await client.blobContainers.list(storageAccounts.resourceGroup, storageAccounts.name);
} catch (err) {
console.error(err);
if (!ignoreErrors) {
throw err;
}
result.errors.push(err);
}
return result;
}
export async function getFileShares(account: azdata.Account, subscription: azureResource.AzureResourceSubscription, storageAccounts: azureResource.AzureGraphResource, ignoreErrors: boolean): Promise<GetFileSharesResult> {
let result: GetFileSharesResult = { fileShares: undefined, errors: [] };
if (!account?.properties?.tenants || !Array.isArray(account.properties.tenants)) {
const error = new Error(invalidAzureAccount);
if (!ignoreErrors) {
throw error;
}
result.errors.push(error);
}
if (!subscription.tenant) {
const error = new Error(invalidTenant);
if (!ignoreErrors) {
throw error;
}
result.errors.push(error);
}
if (result.errors.length > 0) {
return result;
}
let securityToken: { token: string, tokenType?: string };
let credential: TokenCredentials;
try {
securityToken = await azdata.accounts.getAccountSecurityToken(
account,
subscription.tenant!,
azdata.AzureResource.ResourceManagement
);
const token = securityToken.token;
const tokenType = securityToken.tokenType;
credential = new TokenCredentials(token, tokenType);
} catch (err) {
console.error(err);
const error = new Error(unableToFetchTokenError(subscription.tenant));
if (!ignoreErrors) {
throw error;
}
result.errors.push(error);
}
try {
const client = new StorageManagementClient(<any>credential, subscription.id);
result.fileShares = await client.fileShares.list(storageAccounts.resourceGroup, storageAccounts.name);
} catch (err) {
console.error(err);
if (!ignoreErrors) {
throw err;
}
result.errors.push(err);
}
return result;
}