diff options
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.java | 30 |
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); } } |