diff options
Diffstat (limited to 'config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java')
-rw-r--r-- | config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java | 43 |
1 files changed, 32 insertions, 11 deletions
diff --git a/config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java b/config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java index fdd7733a5f6..050fba1cd2f 100644 --- a/config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java +++ b/config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java @@ -165,7 +165,8 @@ public class DeploymentSpecXmlReader { // Values where the parent may provide a default DeploymentSpec.UpgradePolicy upgradePolicy = readUpgradePolicy(instanceTag, parentTag); - DeploymentSpec.UpgradeRevision upgradeRevision = readUpgradeRevision(instanceTag, parentTag); + DeploymentSpec.RevisionTarget revisionTarget = readRevisionTarget(instanceTag, parentTag); + DeploymentSpec.RevisionChange revisionChange = readRevisionChange(instanceTag, parentTag); DeploymentSpec.UpgradeRollout upgradeRollout = readUpgradeRollout(instanceTag, parentTag); List<DeploymentSpec.ChangeBlocker> changeBlockers = readChangeBlockers(instanceTag, parentTag); Optional<AthenzService> athenzService = mostSpecificAttribute(instanceTag, athenzServiceAttribute).map(AthenzService::from); @@ -184,7 +185,8 @@ public class DeploymentSpecXmlReader { .map(name -> new DeploymentInstanceSpec(InstanceName.from(name), steps, upgradePolicy, - upgradeRevision, + revisionTarget, + revisionChange, upgradeRollout, changeBlockers, globalServiceId.asOptional(), @@ -474,23 +476,42 @@ public class DeploymentSpecXmlReader { } } - private DeploymentSpec.UpgradeRevision readUpgradeRevision(Element parent, Element fallbackParent) { + private DeploymentSpec.RevisionChange readRevisionChange(Element parent, Element fallbackParent) { Element upgradeElement = XML.getChild(parent, upgradeTag); if (upgradeElement == null) upgradeElement = XML.getChild(fallbackParent, upgradeTag); if (upgradeElement == null) - return DeploymentSpec.UpgradeRevision.separate; + return DeploymentSpec.RevisionChange.whenFailing; - String revision = upgradeElement.getAttribute("revision"); + String revision = upgradeElement.getAttribute("revision-change"); if (revision.isEmpty()) - return DeploymentSpec.UpgradeRevision.separate; + return DeploymentSpec.RevisionChange.whenFailing; switch (revision) { - case "exclusive": return DeploymentSpec.UpgradeRevision.exclusive; - case "separate": return DeploymentSpec.UpgradeRevision.separate; - case "latest": return DeploymentSpec.UpgradeRevision.latest; - default: throw new IllegalArgumentException("Illegal upgrade revision '" + revision + "': " + - "Must be one of " + Arrays.toString(DeploymentSpec.UpgradeRevision.values())); + case "when-clear": return DeploymentSpec.RevisionChange.whenClear; + case "when-failing": return DeploymentSpec.RevisionChange.whenFailing; + case "always": return DeploymentSpec.RevisionChange.always; + default: throw new IllegalArgumentException("Illegal upgrade revision change policy '" + revision + "': " + + "Must be one of " + Arrays.toString(DeploymentSpec.RevisionTarget.values())); + } + } + + private DeploymentSpec.RevisionTarget readRevisionTarget(Element parent, Element fallbackParent) { + Element upgradeElement = XML.getChild(parent, upgradeTag); + if (upgradeElement == null) + upgradeElement = XML.getChild(fallbackParent, upgradeTag); + if (upgradeElement == null) + return DeploymentSpec.RevisionTarget.latest; + + String revision = upgradeElement.getAttribute("revision-target"); + if (revision.isEmpty()) + return DeploymentSpec.RevisionTarget.latest; + + switch (revision) { + case "next": return DeploymentSpec.RevisionTarget.next; + case "latest": return DeploymentSpec.RevisionTarget.latest; + default: throw new IllegalArgumentException("Illegal upgrade revision target '" + revision + "': " + + "Must be one of " + Arrays.toString(DeploymentSpec.RevisionTarget.values())); } } |