Skip to content

Commit 35a2105

Browse files
nturinskiNathan TurinskiCopilot
authored
Support DTS consumption plan and remove preview flag (#4951)
* Support DTS consumption plan and remove preview flag - Add DurableTaskSchedulerSku enum (Consumption/Dedicated) - Add SKU prompt step to scheduler creation wizard (defaults to Consumption) - Pass SKU to createScheduler client method - Remove enablePreviewFeatures setting and all preview flag checks - Remove Preview label from DTS storage type picker Closes #4881 * Update src/commands/durableTaskScheduler/createScheduler.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Nathan Turinski <naturins@microsoft.comm> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent 8c0b214 commit 35a2105

File tree

5 files changed

+37
-29
lines changed

5 files changed

+37
-29
lines changed

package.json

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -894,7 +894,7 @@
894894
},
895895
{
896896
"command": "azureFunctions.durableTaskScheduler.createScheduler",
897-
"when": "view =~ /(azureResourceGroups|azureFocusView)/ && viewItem =~ /DurableTaskScheduler/i && viewItem =~ /azureResourceTypeGroup/i && config.azureFunctions.durableTaskScheduler.enablePreviewFeatures == true",
897+
"when": "view =~ /(azureResourceGroups|azureFocusView)/ && viewItem =~ /DurableTaskScheduler/i && viewItem =~ /azureResourceTypeGroup/i",
898898
"group": "1@1"
899899
},
900900
{
@@ -1007,8 +1007,7 @@
10071007
"when": "never"
10081008
},
10091009
{
1010-
"command": "azureFunctions.durableTaskScheduler.createScheduler",
1011-
"when": "config.azureFunctions.durableTaskScheduler.enablePreviewFeatures == true"
1010+
"command": "azureFunctions.durableTaskScheduler.createScheduler"
10121011
},
10131012
{
10141013
"command": "azureFunctions.durableTaskScheduler.createTaskHub",
@@ -1161,11 +1160,6 @@
11611160
{
11621161
"title": "Durable Task Scheduler",
11631162
"properties": {
1164-
"azureFunctions.durableTaskScheduler.enablePreviewFeatures": {
1165-
"type": "boolean",
1166-
"default": false,
1167-
"description": "%azureFunctions.durableTaskScheduler.enablePreviewFeatures%"
1168-
},
11691163
"azureFunctions.durableTaskScheduler.emulatorRegistry": {
11701164
"type": "string",
11711165
"description": "%azureFunctions.durableTaskScheduler.emulatorRegistry%",

package.nls.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,6 @@
135135
"azureFunctions.durableTaskScheduler.openTaskHubDashboard": "Open in Dashboard",
136136
"azureFunctions.durableTaskScheduler.startEmulator": "Start Durable Task Emulator",
137137
"azureFunctions.durableTaskScheduler.stopEmulator": "Stop Emulator",
138-
"azureFunctions.durableTaskScheduler.enablePreviewFeatures": "Enable Durable Task Scheduler preview features",
139138
"azureFunctions.durableTaskScheduler.emulatorRegistry": "The registry of the Durable Task Scheduler emulator image.",
140139
"azureFunctions.durableTaskScheduler.emulatorImage": "The name of the Durable Task Scheduler emulator image.",
141140
"azureFunctions.durableTaskScheduler.emulatorTag": "The tag of the Durable Task Scheduler emulator image.",

src/commands/createFunction/durableSteps/DurableStorageTypePromptStep.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import { AzureWizardPromptStep, openUrl, type IAzureQuickPickItem, type IWizardOptions } from "@microsoft/vscode-azext-utils";
77
import { DurableBackend } from "../../../constants";
8-
import { defaultDescription, previewDescription } from "../../../constants-nls";
8+
import { defaultDescription } from "../../../constants-nls";
99
import { localize } from "../../../localize";
1010
import { type IFunctionWizardContext } from "../IFunctionWizardContext";
1111
import { DurableProjectConfigureStep } from "./DurableProjectConfigureStep";
@@ -17,7 +17,7 @@ export class DurableStorageTypeListStep<T extends IFunctionWizardContext> extend
1717
const placeHolder: string = localize('chooseDurableStorageType', 'Choose a durable storage type.');
1818
const picks: IAzureQuickPickItem<DurableBackend | undefined>[] = [
1919
{ label: 'Azure Storage', description: defaultDescription, data: DurableBackend.Storage },
20-
{ label: 'Durable Task Scheduler', description: previewDescription, data: DurableBackend.DTS },
20+
{ label: 'Durable Task Scheduler', data: DurableBackend.DTS },
2121
{ label: 'MSSQL', data: DurableBackend.SQL },
2222
{ label: durableStorageInfo, data: undefined }
2323
];

src/commands/durableTaskScheduler/createScheduler.ts

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,22 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { type AzExtClientContext, createAzureClient, type ILocationWizardContext, type IResourceGroupWizardContext, LocationListStep, parseClientContext, ResourceGroupCreateStep, ResourceGroupListStep, VerifyProvidersStep } from "@microsoft/vscode-azext-azureutils";
7-
import { AzureWizard, AzureWizardExecuteStep, AzureWizardPromptStep, createSubscriptionContext, type ExecuteActivityContext, type IActionContext, type ISubscriptionActionContext, subscriptionExperience } from "@microsoft/vscode-azext-utils";
7+
import { AzureWizard, AzureWizardExecuteStep, AzureWizardPromptStep, createSubscriptionContext, type ExecuteActivityContext, type IAzureQuickPickItem, type IActionContext, type ISubscriptionActionContext, subscriptionExperience } from "@microsoft/vscode-azext-utils";
88
import { type AzureSubscription } from "@microsoft/vscode-azureresources-api";
99
import { DurableTaskProvider, DurableTaskSchedulersResourceType } from "../../constants";
10+
import { defaultDescription } from "../../constants-nls";
1011
import { ext } from '../../extensionVariables';
1112
import { localize } from '../../localize';
12-
import { type DurableTaskSchedulerClient } from "../../tree/durableTaskScheduler/DurableTaskSchedulerClient";
13+
import { DurableTaskSchedulerSku, type DurableTaskSchedulerClient } from "../../tree/durableTaskScheduler/DurableTaskSchedulerClient";
1314
import { type DurableTaskSchedulerDataBranchProvider } from "../../tree/durableTaskScheduler/DurableTaskSchedulerDataBranchProvider";
1415
import { createActivityContext } from "../../utils/activityUtils";
1516
import { withCancellation } from "../../utils/cancellation";
16-
import { workspace, type Progress } from "vscode";
17+
import { type Progress } from "vscode";
1718
import { type ResourceManagementClient } from '@azure/arm-resources';
1819

1920
interface ICreateSchedulerContext extends ISubscriptionActionContext, ILocationWizardContext, IResourceGroupWizardContext, ExecuteActivityContext {
2021
subscription?: AzureSubscription;
22+
schedulerSku?: DurableTaskSchedulerSku;
2123
schedulerName?: string;
2224
}
2325

@@ -33,6 +35,22 @@ class SchedulerNamingStep extends AzureWizardPromptStep<ICreateSchedulerContext>
3335
}
3436
}
3537

38+
class SchedulerSkuStep extends AzureWizardPromptStep<ICreateSchedulerContext> {
39+
async prompt(wizardContext: ICreateSchedulerContext): Promise<void> {
40+
const picks: IAzureQuickPickItem<DurableTaskSchedulerSku>[] = [
41+
{ label: localize('dtsSkuConsumption', 'Consumption'), description: defaultDescription, data: DurableTaskSchedulerSku.Consumption },
42+
{ label: localize('dtsSkuDedicated', 'Dedicated'), data: DurableTaskSchedulerSku.Dedicated },
43+
];
44+
wizardContext.schedulerSku = (await wizardContext.ui.showQuickPick(picks, {
45+
placeHolder: localize('schedulerSkuPrompt', 'Select a plan for the scheduler'),
46+
})).data;
47+
}
48+
49+
shouldPrompt(wizardContext: ICreateSchedulerContext): boolean {
50+
return !wizardContext.schedulerSku;
51+
}
52+
}
53+
3654
class SchedulerCreationStep extends AzureWizardExecuteStep<ICreateSchedulerContext> {
3755
priority: number = 1;
3856

@@ -47,7 +65,8 @@ class SchedulerCreationStep extends AzureWizardExecuteStep<ICreateSchedulerConte
4765
wizardContext.subscription as AzureSubscription,
4866
wizardContext.resourceGroup?.name as string,
4967
location.name,
50-
wizardContext.schedulerName as string
68+
wizardContext.schedulerName as string,
69+
wizardContext.schedulerSku
5170
);
5271

5372
const status = await withCancellation(token => response.status.waitForCompletion(token), 1000 * 60 * 30);
@@ -72,12 +91,6 @@ export async function createResourcesClient(context: AzExtClientContext): Promis
7291
}
7392
}
7493

75-
export function isDtsPreviewFeaturesEnabled(): boolean {
76-
const configuration = workspace.getConfiguration('azureFunctions');
77-
78-
return configuration.get<boolean>('durableTaskScheduler.enablePreviewFeatures') === true;
79-
}
80-
8194
export async function isDtsProviderRegistered(context: AzExtClientContext): Promise<boolean> {
8295
const resourcesClient = await createResourcesClient(context);
8396

@@ -99,10 +112,6 @@ export function createSchedulerCommandFactory(dataBranchProvider: DurableTaskSch
99112
...await createActivityContext()
100113
};
101114

102-
if (!isDtsPreviewFeaturesEnabled()) {
103-
throw new Error(localize('dtsPreviewFeaturesNotEnabled', 'Durable Task Scheduler preview features have not been enabled in settings.'));
104-
}
105-
106115
if (!await isDtsProviderRegistered(wizardContext)) {
107116
await actionContext.ui.showWarningMessage(
108117
localize('dtsProviderNotRegistered', 'The Durable Task Scheduler provider ({0}) is not registered for the subscription ({1}).', DurableTaskProvider, subscription.subscriptionId),
@@ -115,6 +124,7 @@ export function createSchedulerCommandFactory(dataBranchProvider: DurableTaskSch
115124

116125
const promptSteps: AzureWizardPromptStep<ICreateSchedulerContext>[] = [
117126
new SchedulerNamingStep(),
127+
new SchedulerSkuStep(),
118128
new ResourceGroupListStep()
119129
];
120130

src/tree/durableTaskScheduler/DurableTaskSchedulerClient.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,13 @@ export interface DurableTaskSchedulerCreateResponse {
6565
status: DurableTaskStatus;
6666
}
6767

68+
export enum DurableTaskSchedulerSku {
69+
Consumption = 'Consumption',
70+
Dedicated = 'Dedicated',
71+
}
72+
6873
export interface DurableTaskSchedulerClient {
69-
createScheduler(subscription: AzureSubscription, resourceGroupName: string, location: string, schedulerName: string): Promise<DurableTaskSchedulerCreateResponse>;
74+
createScheduler(subscription: AzureSubscription, resourceGroupName: string, location: string, schedulerName: string, sku?: DurableTaskSchedulerSku): Promise<DurableTaskSchedulerCreateResponse>;
7075
createTaskHub(subscription: AzureSubscription, resourceGroupName: string, schedulerName: string, taskHubName: string): Promise<DurableTaskHubResource>;
7176

7277
deleteScheduler(subscription: AzureSubscription, resourceGroupName: string, schedulerName: string): Promise<DurableTaskStatus>;
@@ -81,16 +86,16 @@ export interface DurableTaskSchedulerClient {
8186
}
8287

8388
export class HttpDurableTaskSchedulerClient implements DurableTaskSchedulerClient {
84-
async createScheduler(subscription: AzureSubscription, resourceGroupName: string, location: string, schedulerName: string): Promise<DurableTaskSchedulerCreateResponse> {
89+
async createScheduler(subscription: AzureSubscription, resourceGroupName: string, location: string, schedulerName: string, sku: DurableTaskSchedulerSku = DurableTaskSchedulerSku.Consumption): Promise<DurableTaskSchedulerCreateResponse> {
8590
const taskHubsUrl = HttpDurableTaskSchedulerClient.getBaseUrl(subscription, resourceGroupName, schedulerName);
8691

8792
const request: DurableTaskSchedulerCreateRequest = {
8893
location,
8994
properties: {
9095
ipAllowlist: ['0.0.0.0/0'],
9196
sku: {
92-
name: 'Dedicated',
93-
capacity: 1
97+
name: sku,
98+
capacity: sku === DurableTaskSchedulerSku.Dedicated ? 1 : 0
9499
}
95100
},
96101
tags: {

0 commit comments

Comments
 (0)