mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-17 02:51:36 -05:00
Adding get Migration Controller API to azure core. (#13991)
* - Adding null checks for onValueChanged - Adding new event for radiobuttons onDIdChangeCheckedState * Adding get MigrationController API to azure core. * string templating fixed typings * Fixed typing and sorting logic * Made the undefined check logic concise.
This commit is contained in:
@@ -83,5 +83,7 @@ declare module 'azureResource' {
|
|||||||
export interface BlobContainer extends AzureResource { }
|
export interface BlobContainer extends AzureResource { }
|
||||||
|
|
||||||
export interface FileShare extends AzureResource { }
|
export interface FileShare extends AzureResource { }
|
||||||
|
|
||||||
|
export interface MigrationController extends AzureResource { }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import { ResourceGraphClient } from '@azure/arm-resourcegraph';
|
|||||||
import { TokenCredentials } from '@azure/ms-rest-js';
|
import { TokenCredentials } from '@azure/ms-rest-js';
|
||||||
import axios, { AxiosRequestConfig } from 'axios';
|
import axios, { AxiosRequestConfig } from 'axios';
|
||||||
import * as azdata from 'azdata';
|
import * as azdata from 'azdata';
|
||||||
import { HttpGetRequestResult, GetResourceGroupsResult, GetSubscriptionsResult, ResourceQueryResult, GetBlobContainersResult, GetFileSharesResult } from 'azurecore';
|
import { HttpGetRequestResult, GetResourceGroupsResult, GetSubscriptionsResult, ResourceQueryResult, GetBlobContainersResult, GetFileSharesResult, GetMigrationControllersResult } from 'azurecore';
|
||||||
import { azureResource } from 'azureResource';
|
import { azureResource } from 'azureResource';
|
||||||
import { EOL } from 'os';
|
import { EOL } from 'os';
|
||||||
import * as nls from 'vscode-nls';
|
import * as nls from 'vscode-nls';
|
||||||
@@ -369,7 +369,7 @@ export async function getBlobContainers(account: azdata.Account, subscription: a
|
|||||||
`/blobServices/default/containers?api-version=2019-06-01`;
|
`/blobServices/default/containers?api-version=2019-06-01`;
|
||||||
const response = await makeHttpGetRequest(account, subscription, ignoreErrors, apiEndpoint);
|
const response = await makeHttpGetRequest(account, subscription, ignoreErrors, apiEndpoint);
|
||||||
return {
|
return {
|
||||||
blobContainers: response.response.data.value,
|
blobContainers: response?.response?.data?.value ?? [],
|
||||||
errors: response.errors ? response.errors : []
|
errors: response.errors ? response.errors : []
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -382,7 +382,19 @@ export async function getFileShares(account: azdata.Account, subscription: azure
|
|||||||
`/fileServices/default/shares?api-version=2019-06-01`;
|
`/fileServices/default/shares?api-version=2019-06-01`;
|
||||||
const response = await makeHttpGetRequest(account, subscription, ignoreErrors, apiEndpoint);
|
const response = await makeHttpGetRequest(account, subscription, ignoreErrors, apiEndpoint);
|
||||||
return {
|
return {
|
||||||
fileShares: response.response.data.value,
|
fileShares: response?.response?.data?.value ?? [],
|
||||||
|
errors: response.errors ? response.errors : []
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function getMigrationControllers(account: azdata.Account, subscription: azureResource.AzureResourceSubscription, resourceGroupName: string, regionName: string, ignoreErrors: boolean): Promise<GetMigrationControllersResult> {
|
||||||
|
const apiEndpoint = `https://${regionName}.management.azure.com` +
|
||||||
|
`/subscriptions/${subscription.id}` +
|
||||||
|
`/resourceGroups/${resourceGroupName}` +
|
||||||
|
`/providers/Microsoft.DataMigration/Controllers/default/shares?api-version=2020-09-01-preview`;
|
||||||
|
const response = await makeHttpGetRequest(account, subscription, ignoreErrors, apiEndpoint);
|
||||||
|
return {
|
||||||
|
controllers: response?.response?.data?.value ?? [],
|
||||||
errors: response.errors ? response.errors : []
|
errors: response.errors ? response.errors : []
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
13
extensions/azurecore/src/azurecore.d.ts
vendored
13
extensions/azurecore/src/azurecore.d.ts
vendored
@@ -75,6 +75,8 @@ declare module 'azurecore' {
|
|||||||
getStorageAccounts(account: azdata.Account, subscriptions: azureResource.AzureResourceSubscription[], ignoreErrors?: boolean): Promise<GetStorageAccountResult>;
|
getStorageAccounts(account: azdata.Account, subscriptions: azureResource.AzureResourceSubscription[], ignoreErrors?: boolean): Promise<GetStorageAccountResult>;
|
||||||
getBlobContainers(account: azdata.Account, subscription: azureResource.AzureResourceSubscription, storageAccount: azureResource.AzureGraphResource, ignoreErrors?: boolean): Promise<GetBlobContainersResult>;
|
getBlobContainers(account: azdata.Account, subscription: azureResource.AzureResourceSubscription, storageAccount: azureResource.AzureGraphResource, ignoreErrors?: boolean): Promise<GetBlobContainersResult>;
|
||||||
getFileShares(account: azdata.Account, subscription: azureResource.AzureResourceSubscription, storageAccount: azureResource.AzureGraphResource, ignoreErrors?: boolean): Promise<GetFileSharesResult>;
|
getFileShares(account: azdata.Account, subscription: azureResource.AzureResourceSubscription, storageAccount: azureResource.AzureGraphResource, ignoreErrors?: boolean): Promise<GetFileSharesResult>;
|
||||||
|
getMigrationControllers(account: azdata.Account, subscription: azureResource.AzureResourceSubscription, resourceGroupName: string, regionName: string, ignoreErrors?: boolean): Promise<GetMigrationControllersResult>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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
|
||||||
@@ -88,11 +90,12 @@ declare module 'azurecore' {
|
|||||||
export type GetSubscriptionsResult = { subscriptions: azureResource.AzureResourceSubscription[], errors: Error[] };
|
export type GetSubscriptionsResult = { subscriptions: azureResource.AzureResourceSubscription[], errors: Error[] };
|
||||||
export type GetResourceGroupsResult = { resourceGroups: azureResource.AzureResourceResourceGroup[], errors: Error[] };
|
export type GetResourceGroupsResult = { resourceGroups: azureResource.AzureResourceResourceGroup[], errors: Error[] };
|
||||||
export type GetSqlManagedInstancesResult = { resources: azureResource.AzureGraphResource[], errors: Error[] };
|
export type GetSqlManagedInstancesResult = { resources: azureResource.AzureGraphResource[], errors: Error[] };
|
||||||
export type GetSqlServersResult = {resources: azureResource.AzureGraphResource[], errors: Error[]};
|
export type GetSqlServersResult = { resources: azureResource.AzureGraphResource[], errors: Error[] };
|
||||||
export type GetSqlVMServersResult = {resources: azureResource.AzureGraphResource[], errors: Error[]};
|
export type GetSqlVMServersResult = { resources: azureResource.AzureGraphResource[], errors: Error[] };
|
||||||
export type GetStorageAccountResult = {resources: azureResource.AzureGraphResource[], errors: Error[]};
|
export type GetStorageAccountResult = { resources: azureResource.AzureGraphResource[], errors: Error[] };
|
||||||
export type GetBlobContainersResult = {blobContainers: azureResource.BlobContainer[] | undefined, errors: Error[]};
|
export type GetBlobContainersResult = { blobContainers: azureResource.BlobContainer[], errors: Error[] };
|
||||||
export type GetFileSharesResult = {fileShares: azureResource.FileShare[] | undefined, errors: Error[]};
|
export type GetFileSharesResult = { fileShares: azureResource.FileShare[], errors: Error[] };
|
||||||
|
export type GetMigrationControllersResult = { controllers: azureResource.MigrationController[], errors: Error[] };
|
||||||
|
|
||||||
export type ResourceQueryResult<T extends azureResource.AzureGraphResource> = { resources: T[], errors: Error[] };
|
export type ResourceQueryResult<T extends azureResource.AzureGraphResource> = { resources: T[], errors: Error[] };
|
||||||
export type HttpGetRequestResult = { response: any, errors: Error[] };
|
export type HttpGetRequestResult = { response: any, errors: Error[] };
|
||||||
|
|||||||
@@ -196,6 +196,13 @@ export async function activate(context: vscode.ExtensionContext): Promise<azurec
|
|||||||
ignoreErrors: boolean): Promise<azurecore.GetFileSharesResult> {
|
ignoreErrors: boolean): Promise<azurecore.GetFileSharesResult> {
|
||||||
return azureResourceUtils.getFileShares(account, subscription, storageAccount, ignoreErrors);
|
return azureResourceUtils.getFileShares(account, subscription, storageAccount, ignoreErrors);
|
||||||
},
|
},
|
||||||
|
getMigrationControllers(account: azdata.Account,
|
||||||
|
subscription: azureResource.AzureResourceSubscription,
|
||||||
|
resourceGroupName: string,
|
||||||
|
regionName: string,
|
||||||
|
ignoreErrors: boolean): Promise<azurecore.GetMigrationControllersResult> {
|
||||||
|
return azureResourceUtils.getMigrationControllers(account, subscription, resourceGroupName, regionName, ignoreErrors);
|
||||||
|
},
|
||||||
getRegionDisplayName: utils.getRegionDisplayName,
|
getRegionDisplayName: utils.getRegionDisplayName,
|
||||||
runGraphQuery<T extends azureResource.AzureGraphResource>(account: azdata.Account,
|
runGraphQuery<T extends azureResource.AzureGraphResource>(account: azdata.Account,
|
||||||
subscriptions: azureResource.AzureResourceSubscription[],
|
subscriptions: azureResource.AzureResourceSubscription[],
|
||||||
|
|||||||
@@ -8,6 +8,9 @@ import * as azurecore from 'azurecore';
|
|||||||
import { azureResource } from 'azureResource';
|
import { azureResource } from 'azureResource';
|
||||||
|
|
||||||
export class AzurecoreApiStub implements azurecore.IExtension {
|
export class AzurecoreApiStub implements azurecore.IExtension {
|
||||||
|
getMigrationControllers(_account: azdata.Account, _subscription: azureResource.AzureResourceSubscription, _resourceGroupName: string, _regionName: string, _ignoreErrors?: boolean): Promise<azurecore.GetMigrationControllersResult> {
|
||||||
|
throw new Error('Method not implemented.');
|
||||||
|
}
|
||||||
getFileShares(_account: azdata.Account, _subscription: azureResource.AzureResourceSubscription, _storageAccount: azureResource.AzureGraphResource, _ignoreErrors?: boolean): Promise<azurecore.GetFileSharesResult> {
|
getFileShares(_account: azdata.Account, _subscription: azureResource.AzureResourceSubscription, _storageAccount: azureResource.AzureGraphResource, _ignoreErrors?: boolean): Promise<azurecore.GetFileSharesResult> {
|
||||||
throw new Error('Method not implemented.');
|
throw new Error('Method not implemented.');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,20 +21,19 @@ export async function getSubscriptions(account: azdata.Account): Promise<Subscri
|
|||||||
const api = await getAzureCoreAPI();
|
const api = await getAzureCoreAPI();
|
||||||
const subscriptions = await api.getSubscriptions(account, false);
|
const subscriptions = await api.getSubscriptions(account, false);
|
||||||
let listOfSubscriptions = subscriptions.subscriptions;
|
let listOfSubscriptions = subscriptions.subscriptions;
|
||||||
listOfSubscriptions.sort((a, b) => {
|
sortResourceArrayByName(listOfSubscriptions);
|
||||||
if (a.name < b.name) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (a.name > b.name) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
});
|
|
||||||
return subscriptions.subscriptions;
|
return subscriptions.subscriptions;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type AzureProduct = azureResource.AzureGraphResource;
|
export type AzureProduct = azureResource.AzureGraphResource;
|
||||||
|
|
||||||
|
export async function getResourceGroups(account: azdata.Account, subscription: Subscription): Promise<azureResource.AzureResourceResourceGroup[]> {
|
||||||
|
const api = await getAzureCoreAPI();
|
||||||
|
const result = await api.getResourceGroups(account, subscription, false);
|
||||||
|
sortResourceArrayByName(result.resourceGroups);
|
||||||
|
return result.resourceGroups;
|
||||||
|
}
|
||||||
|
|
||||||
export type SqlManagedInstance = AzureProduct;
|
export type SqlManagedInstance = AzureProduct;
|
||||||
export async function getAvailableManagedInstanceProducts(account: azdata.Account, subscription: Subscription): Promise<SqlManagedInstance[]> {
|
export async function getAvailableManagedInstanceProducts(account: azdata.Account, subscription: Subscription): Promise<SqlManagedInstance[]> {
|
||||||
const api = await getAzureCoreAPI();
|
const api = await getAzureCoreAPI();
|
||||||
@@ -71,7 +70,7 @@ export async function getFileShares(account: azdata.Account, subscription: Subsc
|
|||||||
const api = await getAzureCoreAPI();
|
const api = await getAzureCoreAPI();
|
||||||
let result = await api.getFileShares(account, subscription, storageAccount, true);
|
let result = await api.getFileShares(account, subscription, storageAccount, true);
|
||||||
let fileShares = result.fileShares;
|
let fileShares = result.fileShares;
|
||||||
sortResourceArrayByName(fileShares!);
|
sortResourceArrayByName(fileShares);
|
||||||
return fileShares!;
|
return fileShares!;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -79,19 +78,28 @@ export async function getBlobContainers(account: azdata.Account, subscription: S
|
|||||||
const api = await getAzureCoreAPI();
|
const api = await getAzureCoreAPI();
|
||||||
let result = await api.getBlobContainers(account, subscription, storageAccount, true);
|
let result = await api.getBlobContainers(account, subscription, storageAccount, true);
|
||||||
let blobContainers = result.blobContainers;
|
let blobContainers = result.blobContainers;
|
||||||
sortResourceArrayByName(blobContainers!);
|
sortResourceArrayByName(blobContainers);
|
||||||
return blobContainers!;
|
return blobContainers!;
|
||||||
}
|
}
|
||||||
|
|
||||||
function sortResourceArrayByName(resourceArray: AzureProduct[] | azureResource.FileShare[] | azureResource.BlobContainer[] | undefined): void {
|
export async function getMigrationControllers(account: azdata.Account, subscription: Subscription, resourceGroupName: string, regionName: string): Promise<azureResource.MigrationController[]> {
|
||||||
|
const api = await getAzureCoreAPI();
|
||||||
|
let result = await api.getMigrationControllers(account, subscription, resourceGroupName, regionName, true);
|
||||||
|
let controllers = result.controllers;
|
||||||
|
sortResourceArrayByName(controllers);
|
||||||
|
return controllers!;
|
||||||
|
}
|
||||||
|
|
||||||
|
type SortableAzureResources = AzureProduct | azureResource.FileShare | azureResource.BlobContainer | azureResource.MigrationController | azureResource.AzureResourceSubscription;
|
||||||
|
function sortResourceArrayByName(resourceArray: SortableAzureResources[]): void {
|
||||||
if (!resourceArray) {
|
if (!resourceArray) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
resourceArray.sort((a: AzureProduct | azureResource.BlobContainer | azureResource.FileShare, b: AzureProduct | azureResource.BlobContainer | azureResource.FileShare) => {
|
resourceArray.sort((a: SortableAzureResources, b: SortableAzureResources) => {
|
||||||
if (a.name! < b.name!) {
|
if (a.name.toLowerCase() < b.name.toLowerCase()) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (a.name! > b.name!) {
|
if (a.name.toLowerCase() > b.name.toLowerCase()) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user