From c2320831f77a9dcb0cfc7cb8481313220e58378e Mon Sep 17 00:00:00 2001 From: Charles Gagnon Date: Fri, 4 Sep 2020 13:08:10 -0700 Subject: [PATCH] Add subscription ID to all graph query items (#12133) * Add subscription ID to all graph query items * fix machine-learning --- .../src/azureResource/azure-resource.d.ts | 1 + .../providers/database/databaseService.ts | 1 + .../databaseServer/databaseServerService.ts | 1 + .../providers/kusto/kustoService.ts | 4 ++- .../postgresServerService.ts | 1 + .../postgresServer/postgresServerService.ts | 1 + .../resourceGroup/resourceGroupService.ts | 4 ++- .../providers/resourceTreeDataProviderBase.ts | 1 + .../sqlinstance/sqlInstanceService.ts | 1 + .../sqlinstanceArc/sqlInstanceArcService.ts | 1 + .../services/subscriptionService.ts | 1 + .../database/databaseTreeDataProvider.test.ts | 11 +++++--- .../databaseServerTreeDataProvider.test.ts | 11 +++++--- .../azureResource/resourceService.test.ts | 4 ++- .../azureResource/resourceTreeNode.test.ts | 4 ++- .../tree/accountTreeNode.test.ts | 8 ++++-- .../tree/subscriptionTreeNode.test.ts | 4 ++- .../azureModelRegistryService.ts | 7 +++-- .../azureModelRegistryService.test.ts | 8 ++++-- .../models/ModelManagementController.test.ts | 11 ++++---- .../views/models/azureModelsComponent.test.ts | 8 ++++-- .../test/views/models/predictWizard.test.ts | 11 ++++---- .../views/models/registerModelWizard.test.ts | 11 ++++---- .../src/typings/azure-resource.d.ts | 28 ------------------- .../machine-learning/src/views/interfaces.ts | 2 +- .../models/azureResourceFilterComponent.ts | 2 +- .../views/models/modelManagementController.ts | 2 +- .../src/views/models/modelViewBase.ts | 2 +- 28 files changed, 80 insertions(+), 71 deletions(-) delete mode 100644 extensions/machine-learning/src/typings/azure-resource.d.ts diff --git a/extensions/azurecore/src/azureResource/azure-resource.d.ts b/extensions/azurecore/src/azureResource/azure-resource.d.ts index f50e4698e1..f6d6fa01c6 100644 --- a/extensions/azurecore/src/azureResource/azure-resource.d.ts +++ b/extensions/azurecore/src/azureResource/azure-resource.d.ts @@ -24,6 +24,7 @@ declare module 'azureResource' { export interface AzureResource { name: string; id: string; + subscriptionId: string; tenant?: string; } diff --git a/extensions/azurecore/src/azureResource/providers/database/databaseService.ts b/extensions/azurecore/src/azureResource/providers/database/databaseService.ts index 6501faca90..40be39ccc3 100644 --- a/extensions/azurecore/src/azureResource/providers/database/databaseService.ts +++ b/extensions/azurecore/src/azureResource/providers/database/databaseService.ts @@ -51,6 +51,7 @@ export class AzureResourceDatabaseService implements IAzureResourceService subscriptions.push({ id: sub.subscriptionId, name: sub.displayName, + subscriptionId: sub.subscriptionId, tenant: tenantId })); diff --git a/extensions/azurecore/src/test/azureResource/providers/database/databaseTreeDataProvider.test.ts b/extensions/azurecore/src/test/azureResource/providers/database/databaseTreeDataProvider.test.ts index d08112c2f9..be1e6018f4 100644 --- a/extensions/azurecore/src/test/azureResource/providers/database/databaseTreeDataProvider.test.ts +++ b/extensions/azurecore/src/test/azureResource/providers/database/databaseTreeDataProvider.test.ts @@ -42,11 +42,12 @@ const mockAccount: AzureAccount = { }; const mockTenantId: string = 'mock_tenant'; - +const mockSubscriptionId = 'mock_subscription'; const mockSubscription: azureResource.AzureResourceSubscription = { - id: 'mock_subscription', + id: mockSubscriptionId, name: 'mock subscription', + subscriptionId: mockSubscriptionId, tenant: mockTenantId }; @@ -75,14 +76,16 @@ const mockDatabases: azureResource.AzureResourceDatabase[] = [ id: 'mock-id-1', serverName: 'mock database server 1', serverFullName: 'mock database server full name 1', - loginName: 'mock login' + loginName: 'mock login', + subscriptionId: 'mock_subscription' }, { name: 'mock database 2', id: 'mock-id-2', serverName: 'mock database server 2', serverFullName: 'mock database server full name 2', - loginName: 'mock login' + loginName: 'mock login', + subscriptionId: 'mock_subscription' } ]; diff --git a/extensions/azurecore/src/test/azureResource/providers/databaseServer/databaseServerTreeDataProvider.test.ts b/extensions/azurecore/src/test/azureResource/providers/databaseServer/databaseServerTreeDataProvider.test.ts index 310f6145ae..bb7cd218be 100644 --- a/extensions/azurecore/src/test/azureResource/providers/databaseServer/databaseServerTreeDataProvider.test.ts +++ b/extensions/azurecore/src/test/azureResource/providers/databaseServer/databaseServerTreeDataProvider.test.ts @@ -42,10 +42,11 @@ const mockAccount: AzureAccount = { }; const mockTenantId: string = 'mock_tenant'; - +const mockSubscriptionId = 'mock_subscription'; const mockSubscription: azureResource.AzureResourceSubscription = { - id: 'mock_subscription', + id: mockSubscriptionId, name: 'mock subscription', + subscriptionId: mockSubscriptionId, tenant: mockTenantId }; @@ -74,14 +75,16 @@ const mockDatabaseServers: azureResource.AzureResourceDatabaseServer[] = [ id: 'mock-id-1', fullName: 'mock database server full name 1', loginName: 'mock login', - defaultDatabaseName: 'master' + defaultDatabaseName: 'master', + subscriptionId: 'mock_subscription' }, { name: 'mock database server 2', id: 'mock-id-2', fullName: 'mock database server full name 2', loginName: 'mock login', - defaultDatabaseName: 'master' + defaultDatabaseName: 'master', + subscriptionId: 'mock_subscription' } ]; diff --git a/extensions/azurecore/src/test/azureResource/resourceService.test.ts b/extensions/azurecore/src/test/azureResource/resourceService.test.ts index e56eb9c01f..e979a05735 100644 --- a/extensions/azurecore/src/test/azureResource/resourceService.test.ts +++ b/extensions/azurecore/src/test/azureResource/resourceService.test.ts @@ -34,10 +34,12 @@ const mockAccount: AzureAccount = { }; const mockTenantId: string = 'mock_tenant'; +const mockSubscriptionId ='mock_subscription'; const mockSubscription: azureResource.AzureResourceSubscription = { - id: 'mock_subscription', + id: mockSubscriptionId, name: 'mock subscription', + subscriptionId: mockSubscriptionId, tenant: mockTenantId }; diff --git a/extensions/azurecore/src/test/azureResource/resourceTreeNode.test.ts b/extensions/azurecore/src/test/azureResource/resourceTreeNode.test.ts index 4f07e3dde5..8d4b257074 100644 --- a/extensions/azurecore/src/test/azureResource/resourceTreeNode.test.ts +++ b/extensions/azurecore/src/test/azureResource/resourceTreeNode.test.ts @@ -37,10 +37,12 @@ const mockAccount: AzureAccount = { }; const mockTenantId: string = 'mock_tenant'; +const mockSubscriptionId = 'mock_subscription'; const mockSubscription: azureResource.AzureResourceSubscription = { - id: 'mock_subscription', + id: mockSubscriptionId, name: 'mock subscription', + subscriptionId: mockSubscriptionId, tenant: mockTenantId }; diff --git a/extensions/azurecore/src/test/azureResource/tree/accountTreeNode.test.ts b/extensions/azurecore/src/test/azureResource/tree/accountTreeNode.test.ts index 19a29a5049..444863a11c 100644 --- a/extensions/azurecore/src/test/azureResource/tree/accountTreeNode.test.ts +++ b/extensions/azurecore/src/test/azureResource/tree/accountTreeNode.test.ts @@ -59,15 +59,19 @@ const mockAccount: azdata.Account = { isStale: false }; +const mock_subscription_id_1 = 'mock_subscription_1'; const mockSubscription1: azureResource.AzureResourceSubscription = { - id: 'mock_subscription_1', + id: mock_subscription_id_1, name: 'mock subscription 1', + subscriptionId: mock_subscription_id_1, tenant: mockTenantId }; +const mock_subscription_id_2 = 'mock_subscription_2'; const mockSubscription2: azureResource.AzureResourceSubscription = { - id: 'mock_subscription_2', + id: mock_subscription_id_2, name: 'mock subscription 2', + subscriptionId: mock_subscription_id_2, tenant: mockTenantId }; diff --git a/extensions/azurecore/src/test/azureResource/tree/subscriptionTreeNode.test.ts b/extensions/azurecore/src/test/azureResource/tree/subscriptionTreeNode.test.ts index 068e1ae1c6..0550c079e2 100644 --- a/extensions/azurecore/src/test/azureResource/tree/subscriptionTreeNode.test.ts +++ b/extensions/azurecore/src/test/azureResource/tree/subscriptionTreeNode.test.ts @@ -44,10 +44,12 @@ const mockAccount: azdata.Account = { }; const mockTenantId: string = 'mock_tenant'; +const mockSubscriptionId: string = 'mock_subscription'; const mockSubscription: azureResource.AzureResourceSubscription = { - id: 'mock_subscription', + id: mockSubscriptionId, name: 'mock subscription', + subscriptionId: mockSubscriptionId, tenant: mockTenantId }; diff --git a/extensions/machine-learning/src/modelManagement/azureModelRegistryService.ts b/extensions/machine-learning/src/modelManagement/azureModelRegistryService.ts index d34b04237d..c3ad9614aa 100644 --- a/extensions/machine-learning/src/modelManagement/azureModelRegistryService.ts +++ b/extensions/machine-learning/src/modelManagement/azureModelRegistryService.ts @@ -5,9 +5,10 @@ import * as azdata from 'azdata'; import * as vscode from 'vscode'; +import * as azurecore from 'azurecore'; import { ApiWrapper } from '../common/apiWrapper'; import * as constants from '../common/constants'; -import { azureResource } from '../typings/azure-resource'; +import { azureResource } from 'azureResource'; import { AzureMachineLearningWorkspaces } from '@azure/arm-machinelearningservices'; import { TokenCredentials } from '@azure/ms-rest-js'; import { WorkspaceModels } from './workspacesModels'; @@ -52,7 +53,7 @@ export class AzureModelRegistryService { * @param account azure account */ public async getSubscriptions(account: azdata.Account | undefined): Promise { - const data: azureResource.GetSubscriptionsResult = await (await this._apiWrapper.getAzurecoreApi()).getSubscriptions(account, true); + const data: azurecore.GetSubscriptionsResult = await (await this._apiWrapper.getAzurecoreApi()).getSubscriptions(account, true); return data?.subscriptions; } @@ -64,7 +65,7 @@ export class AzureModelRegistryService { public async getGroups( account: azdata.Account | undefined, subscription: azureResource.AzureResourceSubscription | undefined): Promise { - const data: azureResource.GetResourceGroupsResult = await (await this._apiWrapper.getAzurecoreApi()).getResourceGroups(account, subscription, true); + const data: azurecore.GetResourceGroupsResult = await (await this._apiWrapper.getAzurecoreApi()).getResourceGroups(account, subscription, true); return data?.resourceGroups; } diff --git a/extensions/machine-learning/src/test/modelManagement/azureModelRegistryService.test.ts b/extensions/machine-learning/src/test/modelManagement/azureModelRegistryService.test.ts index a32e30702e..234ced72f2 100644 --- a/extensions/machine-learning/src/test/modelManagement/azureModelRegistryService.test.ts +++ b/extensions/machine-learning/src/test/modelManagement/azureModelRegistryService.test.ts @@ -11,7 +11,7 @@ import * as should from 'should'; import { AzureModelRegistryService } from '../../modelManagement/azureModelRegistryService'; import { Config } from '../../configurations/config'; import { HttpClient } from '../../common/httpClient'; -import { azureResource } from '../../typings/azure-resource'; +import { azureResource } from 'azureResource'; import * as utils from '../utils'; import { Workspace, WorkspacesListByResourceGroupResponse } from '@azure/arm-machinelearningservices/esm/models'; @@ -81,13 +81,15 @@ function createContext(): TestContext { subscriptions: [ { name: 's1', - id: 's1' + id: 's1', + subscriptionId: 's1' } ], groups: [ { name: 'g1', - id: 'g1' + id: 'g1', + subscriptionId: 's1' } ], workspaces: [{ diff --git a/extensions/machine-learning/src/test/views/models/ModelManagementController.test.ts b/extensions/machine-learning/src/test/views/models/ModelManagementController.test.ts index 598b2c365a..1f98d4ca72 100644 --- a/extensions/machine-learning/src/test/views/models/ModelManagementController.test.ts +++ b/extensions/machine-learning/src/test/views/models/ModelManagementController.test.ts @@ -8,10 +8,9 @@ import * as should from 'should'; import * as TypeMoq from 'typemoq'; import 'mocha'; import { createContext } from './utils'; -import { ImportedModel, ModelParameters } from '../../../modelManagement/interfaces'; -import { azureResource } from '../../../typings/azure-resource'; +import { ImportedModel, ModelParameters, WorkspaceModel } from '../../../modelManagement/interfaces'; +import { azureResource } from 'azureResource'; import { Workspace } from '@azure/arm-machinelearningservices/esm/models'; -import { WorkspaceModel } from '../../../modelManagement/interfaces'; import { ModelManagementController } from '../../../views/models/modelManagementController'; import { DatabaseTable, TableColumn } from '../../../prediction/interfaces'; import { DeleteModelEventName, UpdateModelEventName } from '../../../views/models/modelViewBase'; @@ -36,13 +35,15 @@ const accounts: azdata.Account[] = [ const subscriptions: azureResource.AzureResourceSubscription[] = [ { name: 'subscription', - id: '2' + id: '2', + subscriptionId: 'subscription' } ]; const groups: azureResource.AzureResourceResourceGroup[] = [ { name: 'group', - id: '3' + id: '3', + subscriptionId: 's1' } ]; const workspaces: Workspace[] = [ diff --git a/extensions/machine-learning/src/test/views/models/azureModelsComponent.test.ts b/extensions/machine-learning/src/test/views/models/azureModelsComponent.test.ts index 73a4d22e68..f7d986059a 100644 --- a/extensions/machine-learning/src/test/views/models/azureModelsComponent.test.ts +++ b/extensions/machine-learning/src/test/views/models/azureModelsComponent.test.ts @@ -9,7 +9,7 @@ import 'mocha'; import { createContext, ParentDialog } from './utils'; import { AzureModelsComponent } from '../../../views/models/azureModelsComponent'; import { ListAccountsEventName, ListSubscriptionsEventName, ListGroupsEventName, ListWorkspacesEventName, ListAzureModelsEventName } from '../../../views/models/modelViewBase'; -import { azureResource } from '../../../typings/azure-resource'; +import { azureResource } from 'azureResource'; import { Workspace } from '@azure/arm-machinelearningservices/esm/models'; import { ViewBase } from '../../../views/viewBase'; import { WorkspaceModel } from '../../../modelManagement/interfaces'; @@ -50,13 +50,15 @@ describe('Azure Models Component', () => { let subscriptions: azureResource.AzureResourceSubscription[] = [ { name: 'subscription', - id: '2' + id: '2', + subscriptionId: 'subscription' } ]; let groups: azureResource.AzureResourceResourceGroup[] = [ { name: 'group', - id: '3' + id: '3', + subscriptionId: 's1' } ]; let workspaces: Workspace[] = [ diff --git a/extensions/machine-learning/src/test/views/models/predictWizard.test.ts b/extensions/machine-learning/src/test/views/models/predictWizard.test.ts index 2bfcd14956..bd025eee34 100644 --- a/extensions/machine-learning/src/test/views/models/predictWizard.test.ts +++ b/extensions/machine-learning/src/test/views/models/predictWizard.test.ts @@ -12,11 +12,10 @@ import { ListAzureModelsEventName, ListDatabaseNamesEventName, ListTableNamesEventName, ListColumnNamesEventName, LoadModelParametersEventName, DownloadAzureModelEventName, DownloadRegisteredModelEventName, ModelSourceType, VerifyImportTableEventName } from '../../../views/models/modelViewBase'; -import { ImportedModel, ModelParameters } from '../../../modelManagement/interfaces'; -import { azureResource } from '../../../typings/azure-resource'; +import { ImportedModel, ModelParameters, WorkspaceModel } from '../../../modelManagement/interfaces'; +import { azureResource } from 'azureResource'; import { Workspace } from '@azure/arm-machinelearningservices/esm/models'; import { ViewBase } from '../../../views/viewBase'; -import { WorkspaceModel } from '../../../modelManagement/interfaces'; import { PredictWizard } from '../../../views/models/prediction/predictWizard'; import { DatabaseTable, TableColumn } from '../../../prediction/interfaces'; @@ -59,13 +58,15 @@ describe('Predict Wizard', () => { let subscriptions: azureResource.AzureResourceSubscription[] = [ { name: 'subscription', - id: '2' + id: '2', + subscriptionId: 'subscription' } ]; let groups: azureResource.AzureResourceResourceGroup[] = [ { name: 'group', - id: '3' + id: '3', + subscriptionId: 's1' } ]; let workspaces: Workspace[] = [ diff --git a/extensions/machine-learning/src/test/views/models/registerModelWizard.test.ts b/extensions/machine-learning/src/test/views/models/registerModelWizard.test.ts index c4a4a5d0ff..1b47a58987 100644 --- a/extensions/machine-learning/src/test/views/models/registerModelWizard.test.ts +++ b/extensions/machine-learning/src/test/views/models/registerModelWizard.test.ts @@ -8,11 +8,10 @@ import * as should from 'should'; import 'mocha'; import { createContext } from './utils'; import { ListModelsEventName, ListAccountsEventName, ListSubscriptionsEventName, ListGroupsEventName, ListWorkspacesEventName, ListAzureModelsEventName, ModelSourceType, ListDatabaseNamesEventName, ListTableNamesEventName, VerifyImportTableEventName } from '../../../views/models/modelViewBase'; -import { ImportedModel } from '../../../modelManagement/interfaces'; -import { azureResource } from '../../../typings/azure-resource'; +import { ImportedModel, WorkspaceModel } from '../../../modelManagement/interfaces'; +import { azureResource } from 'azureResource'; import { Workspace } from '@azure/arm-machinelearningservices/esm/models'; import { ViewBase } from '../../../views/viewBase'; -import { WorkspaceModel } from '../../../modelManagement/interfaces'; import { ImportModelWizard } from '../../../views/models/manageModels/importModelWizard'; import { DatabaseTable } from '../../../prediction/interfaces'; @@ -35,13 +34,15 @@ let accounts: azdata.Account[] = [ let subscriptions: azureResource.AzureResourceSubscription[] = [ { name: 'subscription', - id: '2' + id: '2', + subscriptionId: 'subscription' } ]; let groups: azureResource.AzureResourceResourceGroup[] = [ { name: 'group', - id: '3' + id: '3', + subscriptionId: 's1' } ]; let workspaces: Workspace[] = [ diff --git a/extensions/machine-learning/src/typings/azure-resource.d.ts b/extensions/machine-learning/src/typings/azure-resource.d.ts deleted file mode 100644 index 2626f67367..0000000000 --- a/extensions/machine-learning/src/typings/azure-resource.d.ts +++ /dev/null @@ -1,28 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the Source EULA. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { Account } from 'azdata'; -import * as msRest from '@azure/ms-rest-js'; - -export namespace azureResource { - - export interface AzureResource { - name: string; - id: string; - } - - export interface AzureResourceSubscription extends AzureResource { - } - - export interface AzureResourceResourceGroup extends AzureResource { - } - - export interface IAzureResourceService { - getResources(subscription: AzureResourceSubscription, credential: msRest.ServiceClientCredentials): Promise; - } - - export type GetSubscriptionsResult = { subscriptions: AzureResourceSubscription[], errors: Error[] }; - export type GetResourceGroupsResult = { resourceGroups: AzureResourceResourceGroup[], errors: Error[] }; -} diff --git a/extensions/machine-learning/src/views/interfaces.ts b/extensions/machine-learning/src/views/interfaces.ts index 5c54a57d8b..a1fb8f8261 100644 --- a/extensions/machine-learning/src/views/interfaces.ts +++ b/extensions/machine-learning/src/views/interfaces.ts @@ -3,7 +3,7 @@ * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import * as azdata from 'azdata'; -import { azureResource } from '../typings/azure-resource'; +import { azureResource } from 'azureResource'; import { Workspace } from '@azure/arm-machinelearningservices/esm/models'; import { WorkspaceModel } from '../modelManagement/interfaces'; diff --git a/extensions/machine-learning/src/views/models/azureResourceFilterComponent.ts b/extensions/machine-learning/src/views/models/azureResourceFilterComponent.ts index b8b83d5008..43ffab4209 100644 --- a/extensions/machine-learning/src/views/models/azureResourceFilterComponent.ts +++ b/extensions/machine-learning/src/views/models/azureResourceFilterComponent.ts @@ -7,7 +7,7 @@ import * as vscode from 'vscode'; import * as azdata from 'azdata'; import { ModelViewBase } from './modelViewBase'; import { ApiWrapper } from '../../common/apiWrapper'; -import { azureResource } from '../../typings/azure-resource'; +import { azureResource } from 'azureResource'; import { Workspace } from '@azure/arm-machinelearningservices/esm/models'; import * as constants from '../../common/constants'; import { AzureWorkspaceResource, IDataComponent } from '../interfaces'; diff --git a/extensions/machine-learning/src/views/models/modelManagementController.ts b/extensions/machine-learning/src/views/models/modelManagementController.ts index ce3a72613e..f0aa6c5934 100644 --- a/extensions/machine-learning/src/views/models/modelManagementController.ts +++ b/extensions/machine-learning/src/views/models/modelManagementController.ts @@ -5,7 +5,7 @@ import * as azdata from 'azdata'; -import { azureResource } from '../../typings/azure-resource'; +import { azureResource } from 'azureResource'; import { ApiWrapper } from '../../common/apiWrapper'; import { AzureModelRegistryService } from '../../modelManagement/azureModelRegistryService'; import { Workspace } from '@azure/arm-machinelearningservices/esm/models'; diff --git a/extensions/machine-learning/src/views/models/modelViewBase.ts b/extensions/machine-learning/src/views/models/modelViewBase.ts index 0330d41925..cc91716eca 100644 --- a/extensions/machine-learning/src/views/models/modelViewBase.ts +++ b/extensions/machine-learning/src/views/models/modelViewBase.ts @@ -5,7 +5,7 @@ import * as azdata from 'azdata'; -import { azureResource } from '../../typings/azure-resource'; +import { azureResource } from 'azureResource'; import { ApiWrapper } from '../../common/apiWrapper'; import { ViewBase } from '../viewBase'; import { ImportedModel, WorkspaceModel, ImportedModelDetails, ModelParameters } from '../../modelManagement/interfaces';