summaryrefslogtreecommitdiffstats
path: root/config-model/src/main/java/com/yahoo/vespa/model/application/validation/CloudUserFilterValidator.java
diff options
context:
space:
mode:
Diffstat (limited to 'config-model/src/main/java/com/yahoo/vespa/model/application/validation/CloudUserFilterValidator.java')
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/CloudUserFilterValidator.java30
1 files changed, 12 insertions, 18 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/CloudUserFilterValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/CloudUserFilterValidator.java
index 935c3baddd2..0ed49bb96f1 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/CloudUserFilterValidator.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/CloudUserFilterValidator.java
@@ -1,33 +1,34 @@
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.model.application.validation;
-import com.yahoo.config.model.deploy.DeployState;
-import com.yahoo.vespa.model.VespaModel;
+import com.yahoo.vespa.model.application.validation.Validation.Context;
import com.yahoo.vespa.model.container.http.HttpFilterChain;
-import java.util.Comparator;
import java.util.TreeSet;
import java.util.logging.Level;
import java.util.stream.Collectors;
+import static java.util.Comparator.comparing;
+
/**
* Validates that only allowed-listed cloud applications can set up user-specified filter chains
*
* @author bjorncs
*/
-public class CloudUserFilterValidator extends Validator {
+public class CloudUserFilterValidator implements Validator {
@Override
- public void validate(VespaModel model, DeployState state) {
- if (!state.isHostedTenantApplication(model.getAdmin().getApplicationType())) return;
- if (state.getProperties().allowUserFilters()) return;
- var violations = new TreeSet<Violation>();
- for (var cluster : model.getContainerClusters().values()) {
+ public void validate(Context context) {
+ if (!context.deployState().isHostedTenantApplication(context.model().getAdmin().getApplicationType())) return;
+ if (context.deployState().getProperties().allowUserFilters()) return;
+ record Violation(String cluster, String chain) { }
+ var violations = new TreeSet<Violation>(comparing(Violation::chain).thenComparing(Violation::cluster));
+ for (var cluster : context.model().getContainerClusters().values()) {
if (cluster.getHttp() == null) continue;
for (var chain : cluster.getHttp().getFilterChains().allChains().allComponents()) {
if (chain.type() == HttpFilterChain.Type.USER) {
var msg = "Found filter chain violation - chain '%s' in cluster '%s'".formatted(cluster.name(), chain.id());
- state.getDeployLogger().log(Level.WARNING, msg);
+ context.deployState().getDeployLogger().log(Level.WARNING, msg);
violations.add(new Violation(cluster.name(), chain.id()));
}
}
@@ -37,14 +38,7 @@ public class CloudUserFilterValidator extends Validator {
.map(v -> "chain '%s' in cluster '%s'".formatted(v.chain(), v.cluster()))
.collect(Collectors.joining(", ", "[", "]"));
var msg = ("HTTP filter chains are currently not supported in Vespa Cloud (%s)").formatted(violationsStr);
- throw new IllegalArgumentException(msg);
- }
-
- private record Violation(String cluster, String chain) implements Comparable<Violation> {
- @Override
- public int compareTo(Violation other) {
- return Comparator.comparing(Violation::chain).thenComparing(Violation::cluster).compare(this, other);
- }
+ context.illegal(msg);
}
}