Skip to content

Commit

Permalink
Merge branch 'main' into sorgh/8329
Browse files Browse the repository at this point in the history
  • Loading branch information
hatpick committed Jul 12, 2021
2 parents 4f2e570 + 7340f23 commit fa6deba
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 0 deletions.
9 changes: 9 additions & 0 deletions extensions/azurePublishNew/src/node/availableResources.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ import {
import { getWebAppProvisionService, WebAppResourceConfig, webAppResourceDefinition } from './azureResources/webApp';
import { AzureResourceTypes } from './constants';
import { ProvisioningConfig } from './provisioning';
import { getResourceGroupProvisionService, ResourceGroupResourceConfig } from './azureResources/resourceGroup';

export const availableResources: ResourceDefinition[] = [
appRegistrationDefinition,
Expand All @@ -66,6 +67,7 @@ export const availableResources: ResourceDefinition[] = [

export const getProvisionServices = (config: ProvisionServiceConfig): Record<string, ResourceProvisionService> => {
return {
resourceGroup: getResourceGroupProvisionService(config),
appRegistration: getAppRegistrationProvisionService(config),
webApp: getWebAppProvisionService(config),
servicePlan: getAppServiceProvisionService(config),
Expand Down Expand Up @@ -110,6 +112,13 @@ export const getResourceDependencies = (key: string) => {
};

export const provisionConfigToResourceConfigMap = {
resourceGroup: (config: ProvisioningConfig): ResourceGroupResourceConfig => {
return {
key: 'resourceGroup',
name: config.resourceGroup,
location: config.location,
};
},
appRegistration: (config: ProvisioningConfig): AppRegistrationResourceConfig => {
return {
key: 'appRegistration',
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.

import { TokenCredentials } from '@azure/ms-rest-js';
import { ResourceManagementClient } from '@azure/arm-resources';

import {
ProvisionMethod,
ProvisionServiceConfig,
ProvisionWorkingSet,
ResourceConfig,
ResourceProvisionService,
} from '../types';
import {
createCustomizeError,
ProvisionErrors,
stringifyError,
} from '../../../../azurePublish/src/node/utils/errorHandler';

export type ResourceGroupResourceConfig = ResourceConfig & {
key: 'resourceGroup';
name: string;
location: string;
};

const resourceGroupProvisionMethod = (provisionConfig: ProvisionServiceConfig): ProvisionMethod => {
const tokenCredentials = new TokenCredentials(provisionConfig.accessToken);
const resourceManagementClient = new ResourceManagementClient(tokenCredentials, provisionConfig.subscriptionId);

return async (config: ResourceGroupResourceConfig, workingSet: ProvisionWorkingSet): Promise<ProvisionWorkingSet> => {
try {
const resourceGroupResult = await resourceManagementClient.resourceGroups.createOrUpdate(config.name, {
location: config.location,
});
return {
...workingSet,
resourceGroup: { name: config.name, location: resourceGroupResult.location },
};
} catch (err) {
throw createCustomizeError(ProvisionErrors.CREATE_RESOURCEGROUP_ERROR, stringifyError(err));
}
};
};

export const getResourceGroupProvisionService = (config: ProvisionServiceConfig): ResourceProvisionService => {
return {
getDependencies: () => [],
getRecommendationForProject: (project) => 'required',
provision: resourceGroupProvisionMethod(config),
canPollStatus: false,
};
};

0 comments on commit fa6deba

Please sign in to comment.