diff options
Diffstat (limited to 'config-provisioning/src/main/java/com/yahoo')
3 files changed, 20 insertions, 10 deletions
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/ClusterMembership.java b/config-provisioning/src/main/java/com/yahoo/config/provision/ClusterMembership.java index 178bbac9e64..779b6854e21 100644 --- a/config-provisioning/src/main/java/com/yahoo/config/provision/ClusterMembership.java +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/ClusterMembership.java @@ -20,7 +20,7 @@ public class ClusterMembership { protected ClusterMembership() {} - private ClusterMembership(String stringValue, Version vespaVersion, Optional<String> dockerImageRepo) { + private ClusterMembership(String stringValue, Version vespaVersion, Optional<DockerImage> dockerImageRepo) { String[] components = stringValue.split("/"); if (components.length < 4) throw new RuntimeException("Could not parse '" + stringValue + "' to a cluster membership. " + @@ -44,7 +44,7 @@ public class ClusterMembership { .vespaVersion(vespaVersion) .exclusive(exclusive) .combinedId(combinedId.map(ClusterSpec.Id::from)) - .dockerImageRepo(dockerImageRepo) + .dockerImageRepository(dockerImageRepo) .build(); this.index = Integer.parseInt(components[3]); this.stringValue = toStringValue(); @@ -110,11 +110,12 @@ public class ClusterMembership { @Override public String toString() { return stringValue(); } + // TODO: Remove when 7.208 is the latest model in use public static ClusterMembership from(String stringValue, Version vespaVersion) { return new ClusterMembership(stringValue, vespaVersion, Optional.empty()); } - public static ClusterMembership from(String stringValue, Version vespaVersion, Optional<String> dockerImageRepo) { + public static ClusterMembership from(String stringValue, Version vespaVersion, Optional<DockerImage> dockerImageRepo) { return new ClusterMembership(stringValue, vespaVersion, dockerImageRepo); } diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/ClusterSpec.java b/config-provisioning/src/main/java/com/yahoo/config/provision/ClusterSpec.java index f7aacbc757b..97549e851ad 100644 --- a/config-provisioning/src/main/java/com/yahoo/config/provision/ClusterSpec.java +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/ClusterSpec.java @@ -22,10 +22,10 @@ public final class ClusterSpec { private final Version vespaVersion; private boolean exclusive; private final Optional<Id> combinedId; - private final Optional<String> dockerImageRepo; + private final Optional<DockerImage> dockerImageRepo; private ClusterSpec(Type type, Id id, Optional<Group> groupId, Version vespaVersion, boolean exclusive, - Optional<Id> combinedId, Optional<String> dockerImageRepo) { + Optional<Id> combinedId, Optional<DockerImage> dockerImageRepo) { this.type = type; this.id = id; this.groupId = groupId; @@ -36,6 +36,8 @@ public final class ClusterSpec { throw new IllegalArgumentException("combinedId must be empty for cluster of type " + type); } this.combinedId = combinedId; + if (dockerImageRepo.isPresent() && dockerImageRepo.get().tag().isPresent()) + throw new IllegalArgumentException("dockerimageRepo is not allowed to have a tag"); this.dockerImageRepo = dockerImageRepo; } @@ -46,7 +48,7 @@ public final class ClusterSpec { public Id id() { return id; } /** Returns the docker image repository part of a docker image we want this cluster to run */ - public Optional<String> dockerImageRepo() { return dockerImageRepo; } + public Optional<DockerImage> dockerImageRepo() { return dockerImageRepo; } /** Returns the docker image (repository + vespa version) we want this cluster to run */ public Optional<String> dockerImage() { return dockerImageRepo.map(repo -> repo + ":" + vespaVersion.toFullString()); } @@ -94,7 +96,7 @@ public final class ClusterSpec { private final boolean specification; private Optional<Group> groupId = Optional.empty(); - private Optional<String> dockerImageRepo = Optional.empty(); + private Optional<DockerImage> dockerImageRepo = Optional.empty(); private Version vespaVersion; private boolean exclusive = false; private Optional<Id> combinedId = Optional.empty(); @@ -139,7 +141,14 @@ public final class ClusterSpec { return this; } + @Deprecated + // TODO: Remove after 7.208 is oldest version in use public Builder dockerImageRepo(Optional<String> dockerImageRepo) { + this.dockerImageRepo = dockerImageRepo.map(DockerImage::fromString); + return this; + } + + public Builder dockerImageRepository(Optional<DockerImage> dockerImageRepo) { this.dockerImageRepo = dockerImageRepo; return this; } @@ -163,7 +172,7 @@ public final class ClusterSpec { if ( ! other.id.equals(this.id)) return false; if ( ! other.groupId.equals(this.groupId)) return false; if ( ! other.vespaVersion.equals(this.vespaVersion)) return false; - if ( ! other.dockerImageRepo.orElse("").equals(this.dockerImageRepo.orElse(""))) return false; + if ( ! other.dockerImageRepo.equals(this.dockerImageRepo)) return false; return true; } diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/serialization/AllocatedHostsSerializer.java b/config-provisioning/src/main/java/com/yahoo/config/provision/serialization/AllocatedHostsSerializer.java index 56c5544f6d7..9ba26be072c 100644 --- a/config-provisioning/src/main/java/com/yahoo/config/provision/serialization/AllocatedHostsSerializer.java +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/serialization/AllocatedHostsSerializer.java @@ -87,7 +87,7 @@ public class AllocatedHostsSerializer { object.setString(hostSpecMembershipKey, membership.stringValue()); object.setString(hostSpecVespaVersionKey, membership.cluster().vespaVersion().toFullString()); membership.cluster().dockerImageRepo().ifPresent(repo -> { - object.setString(hostSpecDockerImageRepoKey, repo); + object.setString(hostSpecDockerImageRepoKey, repo.repository()); }); }); host.flavor().ifPresent(flavor -> toSlime(flavor, object)); @@ -208,7 +208,7 @@ public class AllocatedHostsSerializer { return ClusterMembership.from(object.field(hostSpecMembershipKey).asString(), com.yahoo.component.Version.fromString(object.field(hostSpecVespaVersionKey).asString()), object.field(hostSpecDockerImageRepoKey).valid() - ? Optional.of(object.field(hostSpecDockerImageRepoKey).asString()) + ? Optional.of(DockerImage.fromString(object.field(hostSpecDockerImageRepoKey).asString())) : Optional.empty()); } |