Skip to content

Commit e12a4ec

Browse files
authored
Add deleteEnvironmentVariable command (#798)
1 parent c2f8d84 commit e12a4ec

File tree

9 files changed

+127
-139
lines changed

9 files changed

+127
-139
lines changed

package.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,12 @@
225225
"title": "%containerApps.editEnvironmentVariables%",
226226
"category": "Azure Container Apps"
227227
},
228+
{
229+
"command": "containerApps.deleteEnvironmentVariable",
230+
"title": "%containerApps.deleteEnvironmentVariable.title%",
231+
"shortTitle": "%containerApps.deleteEnvironmentVariable.shortTitle%",
232+
"category": "Azure Container Apps"
233+
},
228234
{
229235
"command": "containerApps.editScaleRange",
230236
"title": "%containerApps.editScaleRange%",
@@ -505,6 +511,11 @@
505511
"when": "view =~ /(azureResourceGroups|azureFocusView)/ && viewItem =~ /environmentVariableItem/i",
506512
"group": "1@1"
507513
},
514+
{
515+
"command": "containerApps.deleteEnvironmentVariable",
516+
"when": "view =~ /(azureResourceGroups|azureFocusView)/ && viewItem =~ /environmentVariableItem/i",
517+
"group": "1@2"
518+
},
508519
{
509520
"command": "containerApps.editScaleRange",
510521
"when": "view =~ /(azureResourceGroups|azureFocusView)/ && viewItem =~ /scaleItem/i",

package.nls.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
"containerApps.editEnvironmentVariableName.title": "Edit Environment Variable Name...",
1717
"containerApps.editEnvironmentVariableName.shortTitle": "Edit Name...",
1818
"containerApps.editEnvironmentVariables": "Edit Environment Variables (.env)...",
19+
"containerApps.deleteEnvironmentVariable.title": "Delete Environment Variable...",
20+
"containerApps.deleteEnvironmentVariable.shortTitle": "Delete...",
1921
"containerApps.deployImageApi": "Deploy Image to Container App (API)...",
2022
"containerApps.deployWorkspaceProject": "Deploy Project from Workspace...",
2123
"containerApps.deployWorkspaceProjectApi": "Deploy Project from Workspace (API)...",
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.md in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
import { type EnvironmentVar } from "@azure/arm-appcontainers";
7+
import { type SetTelemetryProps } from "../../../telemetry/SetTelemetryProps";
8+
import { type ContainerUpdateTelemetryProps as TelemetryProps } from "../../../telemetry/commandTelemetryProps";
9+
import { type EnvironmentVariablesBaseContext } from "../EnvironmentVariablesContext";
10+
11+
export interface EnvironmentVariableDeleteBaseContext extends EnvironmentVariablesBaseContext {
12+
// Require the environment variable upfront so we can delete
13+
environmentVariable: EnvironmentVar;
14+
}
15+
16+
export type EnvironmentVariableDeleteContext = EnvironmentVariableDeleteBaseContext & SetTelemetryProps<TelemetryProps>;
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
import { type Container } from "@azure/arm-appcontainers";
7+
import { type Progress } from "vscode";
8+
import { type ContainerAppItem } from "../../../tree/ContainerAppItem";
9+
import { type RevisionsItemModel } from "../../../tree/revisionManagement/RevisionItem";
10+
import { localize } from "../../../utils/localize";
11+
import { RevisionDraftUpdateBaseStep } from "../../revisionDraft/RevisionDraftUpdateBaseStep";
12+
import { type EnvironmentVariableDeleteContext } from "./EnvironmentVariableDeleteContext";
13+
14+
export class EnvironmentVariableDeleteDraftStep<T extends EnvironmentVariableDeleteContext> extends RevisionDraftUpdateBaseStep<T> {
15+
public priority: number = 590;
16+
17+
constructor(baseItem: ContainerAppItem | RevisionsItemModel) {
18+
super(baseItem);
19+
}
20+
21+
public async execute(context: T, progress: Progress<{ message?: string | undefined; increment?: number | undefined }>): Promise<void> {
22+
progress.report({ message: localize('deletingEnv', 'Deleting environment variable (draft)...') });
23+
this.revisionDraftTemplate.containers ??= [];
24+
25+
const container: Container = this.revisionDraftTemplate.containers[context.containersIdx] ?? {};
26+
container.env = container.env?.filter(env => env.name !== context.environmentVariable.name) ?? [];
27+
28+
await this.updateRevisionDraftWithTemplate(context);
29+
}
30+
31+
public shouldExecute(context: T): boolean {
32+
return !!context.environmentVariable;
33+
}
34+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.md in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
import { type Revision } from "@azure/arm-appcontainers";
7+
import { AzureWizard, createSubscriptionContext, DeleteConfirmationStep, type IActionContext, type ISubscriptionContext } from "@microsoft/vscode-azext-utils";
8+
import { type ContainerAppModel } from "../../../tree/ContainerAppItem";
9+
import { type EnvironmentVariableItem } from "../../../tree/containers/EnvironmentVariableItem";
10+
import { createActivityContext } from "../../../utils/activityUtils";
11+
import { getManagedEnvironmentFromContainerApp } from "../../../utils/getResourceUtils";
12+
import { getVerifyProvidersStep } from "../../../utils/getVerifyProvidersStep";
13+
import { localize } from "../../../utils/localize";
14+
import { pickEnvironmentVariable } from "../../../utils/pickItem/pickEnvironmentVariables";
15+
import { getParentResourceFromItem, isTemplateItemEditable, TemplateItemNotEditableError } from "../../../utils/revisionDraftUtils";
16+
import { RevisionDraftDeployPromptStep } from "../../revisionDraft/RevisionDraftDeployPromptStep";
17+
import { type EnvironmentVariableDeleteContext } from "./EnvironmentVariableDeleteContext";
18+
import { EnvironmentVariableDeleteDraftStep } from "./EnvironmentVariableDeleteDraftStep";
19+
20+
export async function deleteEnvironmentVariable(context: IActionContext, node?: EnvironmentVariableItem): Promise<void> {
21+
const item: EnvironmentVariableItem = node ?? await pickEnvironmentVariable(context, { autoSelectDraft: true });
22+
const { subscription, containerApp } = item;
23+
24+
if (!isTemplateItemEditable(item)) {
25+
throw new TemplateItemNotEditableError(item);
26+
}
27+
28+
const subscriptionContext: ISubscriptionContext = createSubscriptionContext(subscription);
29+
const parentResource: ContainerAppModel | Revision = getParentResourceFromItem(item);
30+
31+
const wizardContext: EnvironmentVariableDeleteContext = {
32+
...context,
33+
...subscriptionContext,
34+
...await createActivityContext(),
35+
subscription,
36+
managedEnvironment: await getManagedEnvironmentFromContainerApp({ ...context, ...subscriptionContext }, containerApp),
37+
containerApp,
38+
containersIdx: item.containersIdx,
39+
environmentVariable: item.envVariable,
40+
};
41+
wizardContext.telemetry.properties.revisionMode = containerApp.revisionsMode;
42+
43+
const confirmMessage: string = localize('confirmDeleteEnv', 'Are you sure you want to delete environment variable "{0}" locally?\n\nThis change will not be reflected in your container app until you deploy changes.', item.envVariable.name);
44+
const wizard: AzureWizard<EnvironmentVariableDeleteContext> = new AzureWizard(wizardContext, {
45+
title: localize('deleteEnvironmentVariable', 'Delete environment variable "{0}" from "{1}" (draft)', item.envVariable.name, parentResource.name),
46+
promptSteps: [
47+
new DeleteConfirmationStep(confirmMessage),
48+
new RevisionDraftDeployPromptStep(),
49+
],
50+
executeSteps: [
51+
getVerifyProvidersStep<EnvironmentVariableDeleteContext>(),
52+
new EnvironmentVariableDeleteDraftStep(item),
53+
],
54+
});
55+
56+
await wizard.prompt();
57+
await wizard.execute();
58+
}

src/commands/environmentVariables/editEnvironmentVariable/editEnvironmentVariableName.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { getVerifyProvidersStep } from "../../../utils/getVerifyProvidersStep";
1313
import { localize } from "../../../utils/localize";
1414
import { pickEnvironmentVariable } from "../../../utils/pickItem/pickEnvironmentVariables";
1515
import { getParentResourceFromItem, isTemplateItemEditable, TemplateItemNotEditableError } from "../../../utils/revisionDraftUtils";
16+
import { RevisionDraftDeployPromptStep } from "../../revisionDraft/RevisionDraftDeployPromptStep";
1617
import { EnvironmentVariableNameStep } from "../addEnvironmentVariable/EnvironmentVariableNameStep";
1718
import { type EnvironmentVariableEditContext } from "./EnvironmentVariableEditContext";
1819
import { EnvironmentVariableEditDraftStep } from "./EnvironmentVariableEditDraftStep";
@@ -44,6 +45,7 @@ export async function editEnvironmentVariableName(context: IActionContext, node?
4445
title: localize('editEnvironmentVariableTitle', 'Edit environment variable name in "{0}" (draft)', parentResource.name),
4546
promptSteps: [
4647
new EnvironmentVariableNameStep(item),
48+
new RevisionDraftDeployPromptStep(),
4749
],
4850
executeSteps: [
4951
getVerifyProvidersStep<EnvironmentVariableEditContext>(),

src/commands/environmentVariables/editEnvironmentVariables/editEnvironmentVariables.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { localize } from "../../../utils/localize";
1414
import { pickEnvironmentVariables } from "../../../utils/pickItem/pickEnvironmentVariables";
1515
import { getParentResourceFromItem, isTemplateItemEditable, TemplateItemNotEditableError } from "../../../utils/revisionDraftUtils";
1616
import { EnvFileListStep } from "../../image/imageSource/EnvFileListStep";
17+
import { RevisionDraftDeployPromptStep } from "../../revisionDraft/RevisionDraftDeployPromptStep";
1718
import { type EnvironmentVariablesEditContext } from "./EnvironmentVariablesEditContext";
1819
import { EnvironmentVariablesEditDraftStep } from "./EnvironmentVariablesEditDraftStep";
1920

@@ -43,6 +44,7 @@ export async function editEnvironmentVariables(context: IActionContext, node?: E
4344
title: localize('editEnvironmentVariables', 'Edit environment variables for "{0}" (draft)', parentResource.name),
4445
promptSteps: [
4546
new EnvFileListStep({ suppressSkipPick: true }),
47+
new RevisionDraftDeployPromptStep(),
4648
],
4749
executeSteps: [
4850
getVerifyProvidersStep<EnvironmentVariablesEditContext>(),

src/commands/image/imageSource/EnvironmentVariablesListStep.ts

Lines changed: 0 additions & 139 deletions
This file was deleted.

src/commands/registerCommands.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { editContainer } from './editContainer/editContainer';
1515
import { editContainerImage } from './editContainer/editContainerImage/editContainerImage';
1616
import { editContainerApp } from './editContainerApp';
1717
import { addEnvironmentVariable } from './environmentVariables/addEnvironmentVariable/addEnvironmentVariable';
18+
import { deleteEnvironmentVariable } from './environmentVariables/deleteEnvironmentVariable/deleteEnvironmentVariable';
1819
import { editEnvironmentVariableName } from './environmentVariables/editEnvironmentVariable/editEnvironmentVariableName';
1920
import { editEnvironmentVariables } from './environmentVariables/editEnvironmentVariables/editEnvironmentVariables';
2021
import { connectToGitHub } from './gitHub/connectToGitHub/connectToGitHub';
@@ -75,6 +76,7 @@ export function registerCommands(): void {
7576
registerCommandWithTreeNodeUnwrapping('containerApps.addEnvironmentVariable', addEnvironmentVariable);
7677
registerCommandWithTreeNodeUnwrapping('containerApps.editEnvironmentVariableName', editEnvironmentVariableName);
7778
registerCommandWithTreeNodeUnwrapping('containerApps.editEnvironmentVariables', editEnvironmentVariables);
79+
registerCommandWithTreeNodeUnwrapping('containerApps.deleteEnvironmentVariable', deleteEnvironmentVariable);
7880

7981
// deploy
8082
registerCommandWithTreeNodeUnwrapping('containerApps.deployImageApi', deployImageApi);

0 commit comments

Comments
 (0)