Skip to content

Commit 43b2a74

Browse files
Merge branch 'endgame-202207.next' into develop.next
2 parents 9765b79 + fa227f6 commit 43b2a74

File tree

48 files changed

+272
-246
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+272
-246
lines changed

CHANGELOG.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
All notable changes to "Azure Toolkit for IntelliJ IDEA" will be documented in this file.
44

55
- [Change Log](#change-log)
6+
- [3.67.0](#3670)
67
- [3.66.0](#3660)
78
- [3.65.0](#3650)
89
- [3.64.0](#3640)
@@ -85,6 +86,24 @@ All notable changes to "Azure Toolkit for IntelliJ IDEA" will be documented in t
8586
- [3.0.7](#307)
8687
- [3.0.6](#306)
8788

89+
## 3.67.0
90+
### Added
91+
- New Azure service support: Azure Kubernetes service.
92+
- direct resource management in Azure Explorer.
93+
- connection to other K8s plugins.
94+
- Support for running or debugging local projects directly on Azure Virtual Machine by leveraging [`Run Targets`](https://www.jetbrains.com/help/idea/run-targets.html).
95+
96+
### Changed
97+
- Most Tool Windows will hide by default and show only when they are triggered by related actions.
98+
- An explicit search box is added on subscription dialog to filter subscriptions more conveniently.
99+
- support for toggling selection of subscriptions by `space` key even checkbox is not focused.
100+
- A loading spinner would show first when the feedback page is loading.
101+
- Entries of some common actions in `<Toolbar>/Tools/Azure` are also added into the gear actions group of Azure Explorer.
102+
103+
### Fixed
104+
- Error occurs if expand or download files/logs of a stopped function app.
105+
- Known CVE issues.
106+
88107
## 3.66.0
89108
### Added
90109
- New "Getting Started with Azure" experience.

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-applicationinsights/src/main/java/com/microsoft/azure/toolkit/intellij/applicationinsights/task/CreateApplicationInsightsResourceConnectionTask.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,19 @@
77
import com.microsoft.azure.toolkit.ide.guidance.ComponentContext;
88
import com.microsoft.azure.toolkit.ide.guidance.Task;
99
import com.microsoft.azure.toolkit.intellij.applicationinsights.connection.ApplicationInsightsResourceDefinition;
10-
import com.microsoft.azure.toolkit.intellij.connector.*;
10+
import com.microsoft.azure.toolkit.intellij.connector.Connection;
11+
import com.microsoft.azure.toolkit.intellij.connector.ConnectionManager;
12+
import com.microsoft.azure.toolkit.intellij.connector.ModuleResource;
13+
import com.microsoft.azure.toolkit.intellij.connector.Resource;
14+
import com.microsoft.azure.toolkit.intellij.connector.ResourceManager;
1115
import com.microsoft.azure.toolkit.lib.Azure;
1216
import com.microsoft.azure.toolkit.lib.applicationinsights.ApplicationInsight;
1317
import com.microsoft.azure.toolkit.lib.applicationinsights.AzureApplicationInsights;
1418
import com.microsoft.azure.toolkit.lib.common.messager.AzureMessager;
1519
import com.microsoft.azure.toolkit.lib.common.operation.AzureOperation;
1620

1721
import javax.annotation.Nonnull;
22+
import java.util.Objects;
1823

1924
// todo: add create resource connection task instead of ai only
2025
// todo: remove duplicate codes with connector dialog
@@ -54,7 +59,8 @@ public String getName() {
5459
}
5560

5661
private Resource<ApplicationInsight> getResource() {
57-
final String applicationInsightsId = (String) context.getParameter("applicationInsightsId");
62+
final String applicationInsightsId = (String) Objects.requireNonNull(context.getParameter("applicationInsightsId"),
63+
"`applicationInsightsId` should not be null to create a resource connection");
5864
final ApplicationInsight applicationInsight = Azure.az(AzureApplicationInsights.class).getById(applicationInsightsId);
5965
return ApplicationInsightsResourceDefinition.INSTANCE.define(applicationInsight);
6066
}

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-applicationinsights/src/main/java/com/microsoft/azure/toolkit/intellij/applicationinsights/task/CreateApplicationInsightsTask.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import com.microsoft.azure.toolkit.lib.resource.ResourceGroup;
1717

1818
import javax.annotation.Nonnull;
19+
import java.util.Objects;
1920
import java.util.Optional;
2021

2122
public class CreateApplicationInsightsTask implements Task {
@@ -35,18 +36,17 @@ public CreateApplicationInsightsTask(@Nonnull final ComponentContext context) {
3536
@Override
3637
@AzureOperation(name = "guidance.create_application_insights", type = AzureOperation.Type.SERVICE)
3738
public void execute() throws Exception {
38-
final String name = (String) context.getParameter(APPLICATION_INSIGHTS_NAME);
39-
final String subscriptionId = (String) context.getParameter(SUBSCRIPTION_ID);
40-
final String resourceGroupName = (String) context.getParameter(RESOURCE_GROUP);
41-
final Subscription subscription = Optional.ofNullable(subscriptionId)
39+
final String name = (String) Objects.requireNonNull(context.getParameter(APPLICATION_INSIGHTS_NAME),
40+
"`name` is required to create application insights");
41+
final Subscription subscription = Optional.ofNullable((String) context.getParameter(SUBSCRIPTION_ID))
4242
.map(id -> Azure.az(AzureAccount.class).account().getSubscription(id))
43-
.orElseGet(() -> Azure.az(AzureAccount.class).account().getSelectedSubscriptions().get(0));
44-
final ResourceGroup resourceGroup = Optional.ofNullable(resourceGroupName)
43+
.orElseThrow(() -> new AzureToolkitRuntimeException("Failed to get subscription to create application insight"));
44+
final ResourceGroup resourceGroup = Optional.ofNullable((String) context.getParameter(RESOURCE_GROUP))
4545
.map(rg -> Azure.az(AzureResources.class).groups(subscription.getId()).get(rg, rg))
4646
.orElseThrow(() -> new AzureToolkitRuntimeException("Failed to get resource group to create application insight"));
4747
final Region region = resourceGroup.getRegion();
4848
final ApplicationInsightDraft applicationInsightDraft = Azure.az(AzureApplicationInsights.class).applicationInsights(subscription.getId())
49-
.create(name, resourceGroupName);
49+
.create(name, resourceGroup.getName());
5050
applicationInsightDraft.setRegion(region);
5151
final ApplicationInsight result = applicationInsightDraft.commit();
5252
context.applyResult(RESOURCE_ID, result.getId());

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-applicationinsights/src/main/java/com/microsoft/azure/toolkit/intellij/applicationinsights/task/OpenLiveMetricsTask.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,13 @@ public OpenLiveMetricsTask(@Nonnull final ComponentContext context) {
2727
this.context = context;
2828
}
2929

30+
@Override
31+
public boolean isReady() {
32+
final String applicationInsightsId = (String) context.getParameter("applicationInsightsId");
33+
final String instrumentKey = (String) context.getParameter("instrumentKey");
34+
return !StringUtils.isAllBlank(applicationInsightsId, instrumentKey);
35+
}
36+
3037
@Override
3138
@AzureOperation(name = "guidance.open_live_metrics", type = AzureOperation.Type.SERVICE)
3239
public void execute() throws Exception {

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-appservice/src/main/java/com/microsoft/azure/toolkit/intellij/appservice/task/CreateFunctionAppTask.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,14 @@
88
import com.microsoft.azure.toolkit.lib.appservice.function.FunctionApp;
99
import com.microsoft.azure.toolkit.lib.appservice.model.Runtime;
1010
import com.microsoft.azure.toolkit.lib.auth.AzureAccount;
11+
import com.microsoft.azure.toolkit.lib.common.exception.AzureToolkitRuntimeException;
1112
import com.microsoft.azure.toolkit.lib.common.model.Subscription;
1213
import com.microsoft.azure.toolkit.lib.common.operation.AzureOperation;
1314
import com.microsoft.azure.toolkit.lib.common.utils.Utils;
1415
import com.microsoft.azure.toolkit.lib.legacy.function.FunctionAppService;
1516

1617
import javax.annotation.Nonnull;
18+
import java.util.Objects;
1719
import java.util.Optional;
1820

1921
import static com.microsoft.azure.toolkit.lib.appservice.task.CreateOrUpdateFunctionAppTask.APPINSIGHTS_INSTRUMENTATION_KEY;
@@ -34,10 +36,10 @@ public CreateFunctionAppTask(@Nonnull final ComponentContext context) {
3436
@Override
3537
@AzureOperation(name = "guidance.create_function_app", type = AzureOperation.Type.SERVICE)
3638
public void execute() throws Exception {
37-
final String name = (String) context.getParameter(FUNCTION_APP_NAME);
39+
final String name = (String) Objects.requireNonNull(context.getParameter(FUNCTION_APP_NAME), "`name` is required to create function app");
3840
final Subscription subscription = Optional.ofNullable((String) context.getParameter(SignInTask.SUBSCRIPTION_ID))
3941
.map(id -> Azure.az(AzureAccount.class).account().getSubscription(id))
40-
.orElseGet(() -> Azure.az(AzureAccount.class).account().getSelectedSubscriptions().get(0));
42+
.orElseThrow(() -> new AzureToolkitRuntimeException("Failed to get subscription to create function app"));
4143
final FunctionAppConfig functionAppConfig = FunctionAppConfig.getFunctionAppDefaultConfig(name);
4244
functionAppConfig.setName(name);
4345
functionAppConfig.setSubscription(subscription);

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-appservice/src/main/java/com/microsoft/azure/toolkit/intellij/appservice/task/CreateWebAppTask.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,19 @@
88
import com.microsoft.azure.toolkit.lib.appservice.model.Runtime;
99
import com.microsoft.azure.toolkit.lib.appservice.webapp.WebApp;
1010
import com.microsoft.azure.toolkit.lib.auth.AzureAccount;
11+
import com.microsoft.azure.toolkit.lib.common.exception.AzureToolkitRuntimeException;
1112
import com.microsoft.azure.toolkit.lib.common.model.Subscription;
1213
import com.microsoft.azure.toolkit.lib.common.operation.AzureOperation;
1314
import com.microsoft.azure.toolkit.lib.common.utils.Utils;
1415
import com.microsoft.azure.toolkit.lib.legacy.webapp.WebAppService;
1516

1617
import javax.annotation.Nonnull;
18+
import java.util.Objects;
1719
import java.util.Optional;
1820

1921
public class CreateWebAppTask implements Task {
2022
public static final String WEBAPP_NAME = "webAppName";
2123
public static final String WEBAPP_ID = "webappId";
22-
23-
public static final String RESOURCE_ID = "webappId";
2424
public static final String DEFAULT_WEB_APP_NAME = "defaultWebAppName";
2525
public static final String RESOURCE_GROUP = "resourceGroup";
2626
private final ComponentContext context;
@@ -39,17 +39,16 @@ public String getName() {
3939
@Override
4040
@AzureOperation(name = "guidance.create_webapp", type = AzureOperation.Type.SERVICE)
4141
public void execute() throws Exception {
42-
final String name = (String) context.getParameter(WEBAPP_NAME);
42+
final String name = (String) Objects.requireNonNull(context.getParameter(WEBAPP_NAME), "`name` is required to create web app");
4343
final Subscription subscription = Optional.ofNullable((String) context.getParameter(SignInTask.SUBSCRIPTION_ID))
4444
.map(id -> Azure.az(AzureAccount.class).account().getSubscription(id))
45-
.orElseGet(() -> Azure.az(AzureAccount.class).account().getSelectedSubscriptions().get(0));
45+
.orElseThrow(() -> new AzureToolkitRuntimeException("Failed to get subscription to create web app"));
4646
final WebAppConfig webAppConfig = WebAppConfig.getWebAppDefaultConfig(name);
4747
webAppConfig.setName(name);
4848
webAppConfig.setSubscription(subscription);
4949
webAppConfig.setRuntime(Runtime.LINUX_JAVA11);
5050
final WebApp webApp = WebAppService.getInstance().createWebApp(webAppConfig);
5151
context.applyResult(WEBAPP_ID, webApp.getId());
52-
context.applyResult(RESOURCE_ID, webApp.getId());
5352
context.applyResult(RESOURCE_GROUP, webApp.getResourceGroupName());
5453
}
5554

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-appservice/src/main/java/com/microsoft/azure/toolkit/intellij/legacy/function/runner/FunctionRunConfigurationProducer.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ public ConfigurationFactory getConfigurationFactory() {
4242

4343
@Override
4444
@ExceptionNotification
45-
@AzureOperation(name = "function.setup_run_configuration", type = AzureOperation.Type.ACTION)
4645
protected boolean setupConfigurationFromContext(AzureRunConfigurationBase runConfigurationBase, ConfigurationContext context, Ref ref) {
4746
if (!(runConfigurationBase instanceof FunctionRunConfiguration || runConfigurationBase instanceof FunctionDeployConfiguration)) {
4847
return false;

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-appservice/src/main/java/com/microsoft/azure/toolkit/intellij/legacy/function/wizard/module/FunctionsModuleBuilder.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,6 @@ public ModuleWizardStep[] createFinishingSteps(@NotNull final WizardContext wiza
108108

109109
@Override
110110
@ExceptionNotification
111-
@AzureOperation(name = "function.setup_function_root_module", type = AzureOperation.Type.ACTION)
112111
public void setupRootModel(@NotNull final ModifiableRootModel rootModel) throws ConfigurationException {
113112
final VirtualFile root = createAndGetContentEntry();
114113
rootModel.addContentEntry(root);

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-appservice/src/main/java/com/microsoft/azure/toolkit/lib/legacy/function/FunctionAppService.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,15 @@
1919
import com.microsoft.azure.toolkit.lib.appservice.model.PricingTier;
2020
import com.microsoft.azure.toolkit.lib.appservice.plan.AppServicePlanDraft;
2121
import com.microsoft.azure.toolkit.lib.auth.AzureAccount;
22+
import com.microsoft.azure.toolkit.lib.common.bundle.AzureString;
2223
import com.microsoft.azure.toolkit.lib.common.messager.AzureMessager;
2324
import com.microsoft.azure.toolkit.lib.common.model.Region;
2425
import com.microsoft.azure.toolkit.lib.common.operation.OperationContext;
2526
import com.microsoft.azure.toolkit.lib.resource.AzureResources;
2627
import com.microsoft.azure.toolkit.lib.resource.ResourceGroup;
2728
import com.microsoft.azure.toolkit.lib.resource.ResourceGroupConfig;
2829
import org.apache.commons.lang3.StringUtils;
30+
import org.apache.commons.lang3.exception.ExceptionUtils;
2931
import org.zeroturnaround.zip.ZipUtil;
3032

3133
import javax.annotation.Nonnull;
@@ -34,6 +36,7 @@
3436
import java.io.IOException;
3537
import java.nio.file.Files;
3638
import java.util.Map;
39+
import java.util.Objects;
3740

3841
import static com.microsoft.azure.toolkit.intellij.common.AzureBundle.message;
3942

@@ -165,7 +168,14 @@ private ApplicationInsight getOrCreateApplicationInsights(final FunctionAppConfi
165168
final String resourceGroup = config.getResourceGroup().getName();
166169
final String name = config.getMonitorConfig().getApplicationInsightsConfig().getName();
167170
final Region region = config.getRegion();
168-
return new GetOrCreateApplicationInsightsTask(subscriptionId, resourceGroup, region, name).execute();
171+
try {
172+
return new GetOrCreateApplicationInsightsTask(subscriptionId, resourceGroup, region, name).execute();
173+
} catch (final Throwable e) {
174+
final Throwable rootCause = ExceptionUtils.getRootCause(e);
175+
AzureMessager.getMessager().warning(AzureString.format("Failed to get/create application insights %s, caused by %s", name,
176+
StringUtils.firstNonBlank(rootCause.getMessage(), rootCause.getClass().getSimpleName())));
177+
return null;
178+
}
169179
}
170180

171181
public void deployFunctionApp(final FunctionApp functionApp, final File stagingFolder) throws IOException {
@@ -176,15 +186,15 @@ public void deployFunctionApp(final FunctionApp functionApp, final File stagingF
176186
if (!StringUtils.equalsIgnoreCase(functionApp.getStatus(), RUNNING)) {
177187
functionApp.start();
178188
}
179-
final String resourceUrl = String.format(PORTAL_URL_PATTERN, Azure.az(AzureAccount.class).account().getPortalUrl(), functionApp.id());
189+
final String resourceUrl = String.format(PORTAL_URL_PATTERN, Azure.az(AzureAccount.class).account().getPortalUrl(), functionApp.getId());
180190
AzureMessager.getMessager().info(String.format(DEPLOY_FINISH, resourceUrl));
181191
}
182192

183193
private FunctionDeployType getDeployType(final FunctionApp functionApp) {
184-
if (functionApp.getRuntime().getOperatingSystem() == OperatingSystem.WINDOWS) {
194+
if (Objects.requireNonNull(functionApp.getRuntime()).getOperatingSystem() == OperatingSystem.WINDOWS) {
185195
return FunctionDeployType.RUN_FROM_ZIP;
186196
}
187-
final PricingTier pricingTier = functionApp.getAppServicePlan().getPricingTier();
197+
final PricingTier pricingTier = Objects.requireNonNull(functionApp.getAppServicePlan()).getPricingTier();
188198
return StringUtils.equalsAnyIgnoreCase(pricingTier.getTier(), "Dynamic", "ElasticPremium") ?
189199
FunctionDeployType.RUN_FROM_BLOB : FunctionDeployType.RUN_FROM_ZIP;
190200
}

PluginsAndFeatures/azure-toolkit-for-intellij/azure-intellij-plugin-containerservice/src/main/java/com/microsoft/azure/toolkit/intellij/containerservice/creation/KubernetesCreationDialog.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -263,12 +263,12 @@ private AzureValidationInfo validateKubernetesClusterName() {
263263
private AzureValidationInfo validateDnsNamePrefix() {
264264
final String name = txtDnsPrefix.getValue();
265265
if (StringUtils.isEmpty(name)) {
266-
return AzureValidationInfo.error(AzureMessageBundle.message("kubernetes.cluster.dnsNamePrefix.validate.empty").toString(), txtName);
266+
return AzureValidationInfo.error(AzureMessageBundle.message("kubernetes.cluster.dnsNamePrefix.validate.empty").toString(), txtDnsPrefix);
267267
}
268268
if (!DNS_NAME_PREFIX_PATTERN.matcher(name).matches()) {
269-
return AzureValidationInfo.error(AzureMessageBundle.message("kubernetes.cluster.dnsNamePrefix.validate.invalid").toString(), txtName);
269+
return AzureValidationInfo.error(AzureMessageBundle.message("kubernetes.cluster.dnsNamePrefix.validate.invalid").toString(), txtDnsPrefix);
270270
}
271-
return AzureValidationInfo.success(txtName);
271+
return AzureValidationInfo.success(txtDnsPrefix);
272272
}
273273

274274
// CHECKSTYLE IGNORE check FOR NEXT 1 LINES

0 commit comments

Comments
 (0)