aboutsummaryrefslogtreecommitdiffstats
path: root/config-model/src/main/java/com/yahoo
diff options
context:
space:
mode:
authorHarald Musum <musum@yahooinc.com>2024-01-18 15:25:39 +0100
committerHarald Musum <musum@yahooinc.com>2024-01-18 15:25:39 +0100
commita9d8a7104c55bfd5b26529f2f3a4ee4c1a840ce3 (patch)
tree4ffb6210f19f5d8bb9a26655011ad32b99df0fc4 /config-model/src/main/java/com/yahoo
parentab54f9c7cbd1bc3c1434717b875e1dfeb7b27dc4 (diff)
Support minimum-required-vespa-version attribute
If attribute is set and the running Vespa version is lower than the specified version deployment will fail with invalid application package error
Diffstat (limited to 'config-model/src/main/java/com/yahoo')
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/VespaDomBuilder.java15
1 files changed, 15 insertions, 0 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/VespaDomBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/VespaDomBuilder.java
index 1a5041f44ac..973ebc8c602 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/VespaDomBuilder.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/VespaDomBuilder.java
@@ -2,6 +2,7 @@
package com.yahoo.vespa.model.builder.xml.dom;
import ai.vespa.validation.Validation;
+import com.yahoo.component.Version;
import com.yahoo.config.model.ApplicationConfigProducerRoot;
import com.yahoo.config.model.ConfigModelRepo;
import com.yahoo.config.model.builder.xml.XmlHelper;
@@ -62,6 +63,8 @@ public class VespaDomBuilder extends VespaModelBuilder {
return new DomRootBuilder(name).
build(deployState, parent, XmlHelper.getDocument(deployState.getApplicationPackage().getServices(), "services.xml")
.getDocumentElement());
+ } catch (IllegalArgumentException e) {
+ throw e;
} catch (Exception e) {
throw new IllegalArgumentException(e);
}
@@ -204,6 +207,7 @@ public class VespaDomBuilder extends VespaModelBuilder {
@Override
protected ApplicationConfigProducerRoot doBuild(DeployState deployState, TreeConfigProducer<AnyConfigProducer> parent, Element producerSpec) {
+ verifyMinimumRequiredVespaVersion(deployState.getVespaVersion(), producerSpec);
ApplicationConfigProducerRoot root = new ApplicationConfigProducerRoot(parent,
name,
deployState.getDocumentModel(),
@@ -215,6 +219,17 @@ public class VespaDomBuilder extends VespaModelBuilder {
new Client(root);
return root;
}
+
+ private static void verifyMinimumRequiredVespaVersion(Version thisVersion, Element producerSpec) {
+ var minimumRequiredVespaVersion = producerSpec.getAttribute("minimum-required-vespa-version");
+ if (minimumRequiredVespaVersion.isEmpty()) return;
+ if (Version.fromString(minimumRequiredVespaVersion).compareTo(thisVersion) > 0)
+ throw new IllegalArgumentException(
+ ("Cannot deploy application, minimum required Vespa version is specified as %s in services.xml" +
+ ", this Vespa version is %s.")
+ .formatted(minimumRequiredVespaVersion, thisVersion.toFullString()));
+ }
+
}
/**