diff options
author | Harald Musum <musum@yahooinc.com> | 2024-01-18 15:25:39 +0100 |
---|---|---|
committer | Harald Musum <musum@yahooinc.com> | 2024-01-18 15:25:39 +0100 |
commit | a9d8a7104c55bfd5b26529f2f3a4ee4c1a840ce3 (patch) | |
tree | 4ffb6210f19f5d8bb9a26655011ad32b99df0fc4 /config-model/src/main/java/com/yahoo | |
parent | ab54f9c7cbd1bc3c1434717b875e1dfeb7b27dc4 (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.java | 15 |
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())); + } + } /** |