Skip to content
Merged
Show file tree
Hide file tree
Changes from 53 commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
e531cea
Impl
MicroFish91 Sep 19, 2023
e0b6080
Import type
MicroFish91 Sep 19, 2023
387bde6
Remove default resource verification
MicroFish91 Sep 19, 2023
e6e327e
Update setting utils
MicroFish91 Sep 19, 2023
d351562
Merge branch 'mwf/setting-utils' of https://github.com/microsoft/vsco…
MicroFish91 Sep 19, 2023
99701c9
Update
MicroFish91 Sep 20, 2023
ef76b24
Merge branch 'main' of https://github.com/microsoft/vscode-azureconta…
MicroFish91 Sep 20, 2023
2db14e8
Remove unused function
MicroFish91 Sep 20, 2023
ad4f149
Updates
MicroFish91 Sep 21, 2023
c2de90b
Update comment
MicroFish91 Sep 21, 2023
2bdb7ba
Merge branch 'main' of https://github.com/microsoft/vscode-azureconta…
MicroFish91 Sep 21, 2023
5e81121
Merge + Impl
MicroFish91 Sep 21, 2023
5bf556b
Merge with VI
MicroFish91 Sep 21, 2023
052fc86
More fixes
MicroFish91 Sep 21, 2023
1a0e6ea
Merge branch 'mwf/deployWorkspaceProject-V-I' of https://github.com/m…
MicroFish91 Sep 21, 2023
2240c45
merge with branch
MicroFish91 Sep 22, 2023
596f728
Merge with mwf/deployWorkspaceProject-VI
MicroFish91 Sep 22, 2023
880c04e
Impl
MicroFish91 Sep 22, 2023
f8a3c93
Update readme
MicroFish91 Sep 22, 2023
704fa03
Updates
MicroFish91 Sep 22, 2023
850b9a0
Wip...
MicroFish91 Sep 22, 2023
2b3ac2a
Merge with main
MicroFish91 Sep 22, 2023
5679eb4
Misc
MicroFish91 Sep 24, 2023
c73895d
Update readme
MicroFish91 Sep 25, 2023
a7c0215
Import type
MicroFish91 Sep 25, 2023
891df2c
Merge with main
MicroFish91 Sep 25, 2023
b2ea1d7
Remove settings
MicroFish91 Sep 25, 2023
54e66a4
Re-add settings
MicroFish91 Sep 25, 2023
59c7db9
Merge branch 'mwf/deployWorkspaceProject-VII' of https://github.com/m…
MicroFish91 Sep 25, 2023
ca2050b
Wip
MicroFish91 Sep 26, 2023
37b2b7f
Update shouldPrompt
MicroFish91 Sep 26, 2023
0b079a1
Merge branch 'mwf/deployWorkspaceProject-VI' of https://github.com/mi…
MicroFish91 Sep 26, 2023
591ac92
Merge branch 'mwf/deployWorkspaceProject-VII' of https://github.com/m…
MicroFish91 Sep 26, 2023
c101a8e
Impl
MicroFish91 Sep 26, 2023
d43bf5d
Misc
MicroFish91 Sep 26, 2023
6ffed27
Updates
MicroFish91 Sep 26, 2023
ba08d30
More updates
MicroFish91 Sep 26, 2023
f90aa07
Add typeof AcrBuildSupportedOS
MicroFish91 Sep 26, 2023
f051a0a
Merge branch 'mwf/deployWorkspaceProject-VI' of https://github.com/mi…
MicroFish91 Sep 26, 2023
52d1ad3
Merge with VII
MicroFish91 Sep 26, 2023
e87c41c
Remove
MicroFish91 Sep 26, 2023
252acde
Merge with main
MicroFish91 Sep 26, 2023
9d03ebf
Merge branch 'main' of https://github.com/microsoft/vscode-azureconta…
MicroFish91 Sep 26, 2023
18e49fb
Merge branch 'main' of https://github.com/microsoft/vscode-azureconta…
MicroFish91 Sep 26, 2023
4b9640a
Merge branch 'mwf/deployWorkspaceProject-VI' of https://github.com/mi…
MicroFish91 Sep 26, 2023
31c956f
Merge branch 'mwf/deployWorkspaceProject-VII' of https://github.com/m…
MicroFish91 Sep 26, 2023
f6cfbcb
Nit
MicroFish91 Sep 27, 2023
45f862c
Update comment
MicroFish91 Sep 28, 2023
6f866cf
Merge with main
MicroFish91 Sep 28, 2023
e75a78a
Updates
MicroFish91 Sep 28, 2023
093116f
Impl
MicroFish91 Sep 29, 2023
6810bea
Merge with activityUtils
MicroFish91 Sep 29, 2023
35cb047
Remove
MicroFish91 Sep 29, 2023
8af9b36
Feedback
MicroFish91 Oct 5, 2023
e9d0d99
Merge with main
MicroFish91 Oct 8, 2023
07cc7a1
Nits
MicroFish91 Oct 8, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 38 additions & 6 deletions src/commands/createContainerApp/ContainerAppCreateStep.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,21 @@

import { ContainerAppsAPIClient, Ingress, KnownActiveRevisionsMode } from "@azure/arm-appcontainers";
import { LocationListStep } from "@microsoft/vscode-azext-azureutils";
import { AzureWizardExecuteStep, nonNullProp, nonNullValueAndProp } from "@microsoft/vscode-azext-utils";
import { GenericTreeItem, nonNullProp, nonNullValueAndProp } from "@microsoft/vscode-azext-utils";
import { Progress } from "vscode";
import { containerAppsWebProvider } from "../../constants";
import { activityFailContext, activityFailIcon, activitySuccessContext, activitySuccessIcon, containerAppsWebProvider } from "../../constants";
import { ContainerAppItem } from "../../tree/ContainerAppItem";
import { ExecuteActivityOutput, ExecuteActivityOutputStepBase } from "../../utils/activity/ExecuteActivityOutputStepBase";
import { createActivityChildContext } from "../../utils/activity/activityUtils";
import { createContainerAppsAPIClient } from "../../utils/azureClients";
import { localize } from "../../utils/localize";
import { getContainerNameForImage } from "../deployImage/imageSource/containerRegistry/getContainerNameForImage";
import { ICreateContainerAppContext } from "./ICreateContainerAppContext";

export class ContainerAppCreateStep extends AzureWizardExecuteStep<ICreateContainerAppContext> {
export class ContainerAppCreateStep extends ExecuteActivityOutputStepBase<ICreateContainerAppContext> {
public priority: number = 750;

public async execute(context: ICreateContainerAppContext, progress: Progress<{ message?: string | undefined; increment?: number | undefined }>): Promise<void> {
protected async executeCore(context: ICreateContainerAppContext, progress: Progress<{ message?: string | undefined; increment?: number | undefined }>): Promise<void> {
const appClient: ContainerAppsAPIClient = await createContainerAppsAPIClient(context);

const resourceGroupName: string = context.newResourceGroupName || nonNullValueAndProp(context.resourceGroup, 'name');
Expand Down Expand Up @@ -58,9 +60,39 @@ export class ContainerAppCreateStep extends AzureWizardExecuteStep<ICreateContai
]
}
}));

if (!context.activityChildren) {
context.activityResult = {
id: nonNullValueAndProp(context.containerApp, 'id'),
name: containerAppName,
type: containerAppsWebProvider
};
}
}

public shouldExecute(context: ICreateContainerAppContext): boolean {
return !context.containerApp;
}

protected initSuccessOutput(context: ICreateContainerAppContext): ExecuteActivityOutput {
return {
item: new GenericTreeItem(undefined, {
contextValue: createActivityChildContext(['containerAppCreateStep', activitySuccessContext]),
label: localize('createContainerApp', 'Create container app "{0}"', context.newContainerAppName),
iconPath: activitySuccessIcon
}),
output: localize('createContainerAppSuccess', 'Created container app "{0}".', context.newContainerAppName)
};
}

public shouldExecute(): boolean {
return true;
protected initFailOutput(context: ICreateContainerAppContext): ExecuteActivityOutput {
return {
item: new GenericTreeItem(undefined, {
contextValue: createActivityChildContext(['containerAppCreateStep', activityFailContext]),
label: localize('createContainerApp', 'Create container app "{0}"', context.newContainerAppName),
iconPath: activityFailIcon
}),
output: localize('createContainerAppFail', 'Failed to create container app "{0}".', context.newContainerAppName)
};
}
}
2 changes: 1 addition & 1 deletion src/commands/createContainerApp/createContainerApp.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { webProvider } from "../../constants";
import { ext } from "../../extensionVariables";
import { ContainerAppItem } from "../../tree/ContainerAppItem";
import type { ManagedEnvironmentItem } from "../../tree/ManagedEnvironmentItem";
import { createActivityContext } from "../../utils/activityUtils";
import { createActivityContext } from "../../utils/activity/activityUtils";
import { localize } from "../../utils/localize";
import { pickEnvironment } from "../../utils/pickItem/pickEnvironment";
import { ImageSourceListStep } from "../deployImage/imageSource/ImageSourceListStep";
Expand Down
50 changes: 36 additions & 14 deletions src/commands/createManagedEnvironment/LogAnalyticsCreateStep.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,32 +4,54 @@
*--------------------------------------------------------------------------------------------*/

import { LocationListStep } from "@microsoft/vscode-azext-azureutils";
import { AzureWizardExecuteStep } from "@microsoft/vscode-azext-utils";
import { GenericTreeItem } from "@microsoft/vscode-azext-utils";
import { Progress } from "vscode";
import { ext } from "../../extensionVariables";
import { activityFailContext, activityFailIcon, activitySuccessContext, activitySuccessIcon } from "../../constants";
import { ExecuteActivityOutput, ExecuteActivityOutputStepBase } from "../../utils/activity/ExecuteActivityOutputStepBase";
import { createActivityChildContext } from "../../utils/activity/activityUtils";
import { createOperationalInsightsManagementClient } from "../../utils/azureClients";
import { localize } from "../../utils/localize";
import { nonNullProp, nonNullValue } from "../../utils/nonNull";
import { nonNullProp } from "../../utils/nonNull";
import { IManagedEnvironmentContext } from "./IManagedEnvironmentContext";

export class LogAnalyticsCreateStep extends AzureWizardExecuteStep<IManagedEnvironmentContext> {
export class LogAnalyticsCreateStep extends ExecuteActivityOutputStepBase<IManagedEnvironmentContext> {
public priority: number = 220;

public async execute(context: IManagedEnvironmentContext, progress: Progress<{ message?: string | undefined; increment?: number | undefined }>): Promise<void> {
protected async executeCore(context: IManagedEnvironmentContext, progress: Progress<{ message?: string | undefined; increment?: number | undefined }>): Promise<void> {
const opClient = await createOperationalInsightsManagementClient(context);
const rg = nonNullValue(context.resourceGroup);
const creatingLaw: string = localize('creatingLogAnalyticsWorkspace', 'Creating new Log Analytics workspace...');
progress.report({ message: creatingLaw });
ext.outputChannel.appendLog(creatingLaw);
context.logAnalyticsWorkspace = await opClient.workspaces.beginCreateOrUpdateAndWait(
nonNullProp(rg, 'name'), nonNullProp(context, 'newManagedEnvironmentName'), { location: (await LocationListStep.getLocation(context)).name });
const resourceGroup = nonNullProp(context, 'resourceGroup');
const workspaceName = nonNullProp(context, 'newManagedEnvironmentName');

const creating: string = localize('creatingLogAnalyticsWorkspace', 'Creating log analytics workspace...');
progress.report({ message: creating });

const createdLaw: string = localize('createdLogAnalyticWorkspace', 'Successfully created new log analytic workspace.');
ext.outputChannel.appendLog(createdLaw);
void progress.report({ message: createdLaw });
context.logAnalyticsWorkspace = await opClient.workspaces.beginCreateOrUpdateAndWait(
nonNullProp(resourceGroup, 'name'), workspaceName, { location: (await LocationListStep.getLocation(context)).name });
}

public shouldExecute(context: IManagedEnvironmentContext): boolean {
return !context.logAnalyticsWorkspace;
}

protected initSuccessOutput(context: IManagedEnvironmentContext): ExecuteActivityOutput {
return {
item: new GenericTreeItem(undefined, {
contextValue: createActivityChildContext(['logAnalyticsCreateStep', activitySuccessContext]),
label: localize('createWorkspace', 'Create log analytics workspace "{0}"', context.newManagedEnvironmentName),
iconPath: activitySuccessIcon
}),
output: localize('createLogAnalyticsWorkspaceSuccess', 'Created log analytics workspace "{0}".', context.newManagedEnvironmentName)
};
}

protected initFailOutput(context: IManagedEnvironmentContext): ExecuteActivityOutput {
return {
item: new GenericTreeItem(undefined, {
contextValue: createActivityChildContext(['logAnalyticsCreateStep', activityFailContext]),
label: localize('createWorkspace', 'Create log analytics workspace "{0}"', context.newManagedEnvironmentName),
iconPath: activityFailIcon
}),
output: localize('createLogAnalyticsWorkspaceFail', 'Failed to create log analytics workspace "{0}".', context.newManagedEnvironmentName)
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,56 +5,79 @@

import { ContainerAppsAPIClient } from "@azure/arm-appcontainers";
import { getResourceGroupFromId, LocationListStep } from "@microsoft/vscode-azext-azureutils";
import { AzureWizardExecuteStep } from "@microsoft/vscode-azext-utils";
import { GenericTreeItem } from "@microsoft/vscode-azext-utils";
import { Progress } from "vscode";
import { managedEnvironmentsAppProvider } from "../../constants";
import { ext } from "../../extensionVariables";
import { activityFailContext, activityFailIcon, activitySuccessContext, activitySuccessIcon, managedEnvironmentsAppProvider } from "../../constants";
import { createActivityChildContext } from "../../utils/activity/activityUtils";
import { ExecuteActivityOutput, ExecuteActivityOutputStepBase } from "../../utils/activity/ExecuteActivityOutputStepBase";
import { createContainerAppsAPIClient, createOperationalInsightsManagementClient } from '../../utils/azureClients';
import { localize } from "../../utils/localize";
import { nonNullProp, nonNullValueAndProp } from "../../utils/nonNull";
import { IManagedEnvironmentContext } from "./IManagedEnvironmentContext";

export class ManagedEnvironmentCreateStep extends AzureWizardExecuteStep<IManagedEnvironmentContext> {
export class ManagedEnvironmentCreateStep extends ExecuteActivityOutputStepBase<IManagedEnvironmentContext> {
public priority: number = 250;

public async execute(context: IManagedEnvironmentContext, progress: Progress<{ message?: string | undefined; increment?: number | undefined }>): Promise<void> {
protected async executeCore(context: IManagedEnvironmentContext, progress: Progress<{ message?: string | undefined; increment?: number | undefined }>): Promise<void> {
const client: ContainerAppsAPIClient = await createContainerAppsAPIClient(context);
const opClient = await createOperationalInsightsManagementClient(context);
const rgName = nonNullValueAndProp(context.resourceGroup, 'name');

const resourceGroupName = nonNullValueAndProp(context.resourceGroup, 'name');
const managedEnvironmentName = nonNullProp(context, 'newManagedEnvironmentName');
const logAnalyticsWorkspace = nonNullProp(context, 'logAnalyticsWorkspace');

const creatingKuEnv: string = localize('creatingManagedEnvironment', 'Creating new Container Apps environment "{0}"...', context.newManagedEnvironmentName);
progress.report({ message: creatingKuEnv });
ext.outputChannel.appendLog(creatingKuEnv);
const creating: string = localize('creatingManagedEnvironment', 'Creating environment...');
progress.report({ message: creating });

const sharedKeys = await opClient.sharedKeysOperations.getSharedKeys(
getResourceGroupFromId(nonNullProp(logAnalyticsWorkspace, 'id')),
nonNullProp(logAnalyticsWorkspace, 'name'));

context.managedEnvironment = await client.managedEnvironments.beginCreateOrUpdateAndWait(rgName, nonNullProp(context, 'newManagedEnvironmentName'),
context.managedEnvironment = await client.managedEnvironments.beginCreateOrUpdateAndWait(resourceGroupName, managedEnvironmentName,
{
location: (await LocationListStep.getLocation(context)).name,
appLogsConfiguration: {
"destination": "log-analytics",
"logAnalyticsConfiguration": {
"customerId": nonNullProp(context, 'logAnalyticsWorkspace').customerId,
"customerId": logAnalyticsWorkspace.customerId,
"sharedKey": sharedKeys.primarySharedKey
}
}
}
);

context.activityResult = {
id: nonNullProp(context.managedEnvironment, 'id'),
name: nonNullProp(context, 'newManagedEnvironmentName'),
type: managedEnvironmentsAppProvider
if (!context.activityChildren) {
context.activityResult = {
id: nonNullProp(context.managedEnvironment, 'id'),
name: managedEnvironmentName,
type: managedEnvironmentsAppProvider
};
}

const createdKuEnv: string = localize('createKuEnv', 'Successfully created new Container Apps environment "{0}".', context.newManagedEnvironmentName);
ext.outputChannel.appendLog(createdKuEnv);
}

public shouldExecute(context: IManagedEnvironmentContext): boolean {
return !context.managedEnvironment;
}

protected initSuccessOutput(context: IManagedEnvironmentContext): ExecuteActivityOutput {
return {
item: new GenericTreeItem(undefined, {
contextValue: createActivityChildContext(['managedEnvironmentCreateStep', activitySuccessContext]),
label: localize('createManagedEnvironment', 'Create container apps environment "{0}"', context.newManagedEnvironmentName),
iconPath: activitySuccessIcon
}),
output: localize('createdManagedEnvironmentSuccess', 'Created container apps environment "{0}".', context.newManagedEnvironmentName)
};
}

protected initFailOutput(context: IManagedEnvironmentContext): ExecuteActivityOutput {
return {
item: new GenericTreeItem(undefined, {
contextValue: createActivityChildContext(['managedEnvironmentCreateStep', activityFailContext]),
label: localize('createManagedEnvironment', 'Create container apps environment "{0}"', context.newManagedEnvironmentName),
iconPath: activityFailIcon
}),
output: localize('createdManagedEnvironmentFail', 'Failed to create container apps environment "{0}".', context.newManagedEnvironmentName)
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { AzureWizard, AzureWizardExecuteStep, AzureWizardPromptStep, IActionCont
import { AzureSubscription } from "@microsoft/vscode-azureresources-api";
import { appProvider, managedEnvironmentsId, operationalInsightsProvider } from "../../constants";
import { ext } from "../../extensionVariables";
import { createActivityContext } from "../../utils/activityUtils";
import { createActivityContext } from "../../utils/activity/activityUtils";
import { localize } from "../../utils/localize";
import { IManagedEnvironmentContext } from "./IManagedEnvironmentContext";
import { LogAnalyticsCreateStep } from "./LogAnalyticsCreateStep";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { AzureWizard, createSubscriptionContext, IActionContext } from "@microso
import { ext } from "../../extensionVariables";
import { ContainerAppItem } from "../../tree/ContainerAppItem";
import type { ManagedEnvironmentItem } from "../../tree/ManagedEnvironmentItem";
import { createActivityContext } from "../../utils/activityUtils";
import { createActivityContext } from "../../utils/activity/activityUtils";
import { localize } from "../../utils/localize";
import { pickEnvironment } from "../../utils/pickItem/pickEnvironment";
import { DeleteAllContainerAppsStep } from "../deleteContainerApp/DeleteAllContainerAppsStep";
Expand Down
33 changes: 29 additions & 4 deletions src/commands/deployImage/ContainerAppUpdateStep.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,22 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/

import { AzureWizardExecuteStep, nonNullProp } from "@microsoft/vscode-azext-utils";
import type { Progress } from "vscode";
import { GenericTreeItem, nonNullProp } from "@microsoft/vscode-azext-utils";
import { type Progress } from "vscode";
import { activityFailContext, activityFailIcon, activitySuccessContext, activitySuccessIcon } from "../../constants";
import { ext } from "../../extensionVariables";
import { ContainerAppModel, getContainerEnvelopeWithSecrets } from "../../tree/ContainerAppItem";
import { ExecuteActivityOutput, ExecuteActivityOutputStepBase } from "../../utils/activity/ExecuteActivityOutputStepBase";
import { createActivityChildContext } from "../../utils/activity/activityUtils";
import { localize } from "../../utils/localize";
import { updateContainerApp } from "../../utils/updateContainerApp";
import type { IDeployImageContext } from "./deployImage";
import { getContainerNameForImage } from "./imageSource/containerRegistry/getContainerNameForImage";

export class ContainerAppUpdateStep extends AzureWizardExecuteStep<IDeployImageContext> {
export class ContainerAppUpdateStep extends ExecuteActivityOutputStepBase<IDeployImageContext> {
public priority: number = 480;

public async execute(context: IDeployImageContext, progress: Progress<{ message?: string | undefined; increment?: number | undefined }>): Promise<void> {
protected async executeCore(context: IDeployImageContext, progress: Progress<{ message?: string | undefined; increment?: number | undefined }>): Promise<void> {
const containerApp: ContainerAppModel = nonNullProp(context, 'containerApp');
const containerAppEnvelope = await getContainerEnvelopeWithSecrets(context, context.subscription, containerApp);

Expand Down Expand Up @@ -44,4 +47,26 @@ export class ContainerAppUpdateStep extends AzureWizardExecuteStep<IDeployImageC
public shouldExecute(context: IDeployImageContext): boolean {
return !!context.containerApp;
}

protected initSuccessOutput(context: IDeployImageContext): ExecuteActivityOutput {
return {
item: new GenericTreeItem(undefined, {
contextValue: createActivityChildContext(['containerAppUpdateStep', activitySuccessContext]),
label: localize('updateContainerAppLabel', 'Update container app "{0}"', context.containerApp?.name),
iconPath: activitySuccessIcon
}),
output: localize('updateContainerAppSuccess', 'Updated container app "{0}".', context.containerApp?.name)
};
}

protected initFailOutput(context: IDeployImageContext): ExecuteActivityOutput {
return {
item: new GenericTreeItem(undefined, {
contextValue: createActivityChildContext(['containerAppUpdateStep', activityFailContext]),
label: localize('updateContainerAppLabel', 'Update container app "{0}"', context.containerApp?.name),
iconPath: activityFailIcon
}),
output: localize('updateContainerAppFail', 'Failed to update container app "{0}".', context.containerApp?.name)
};
}
}
Loading