diff options
author | Harald Musum <musum@verizonmedia.com> | 2020-04-17 12:38:57 +0200 |
---|---|---|
committer | Harald Musum <musum@verizonmedia.com> | 2020-04-17 12:38:57 +0200 |
commit | 5c2c8c4f8c21782dd279c229ab05bed26e6b9412 (patch) | |
tree | 190fc5581f5669c0dae089560ef19ac73654c95b /config-provisioning | |
parent | 2fcc4aa1c97b4f9cb9c9acaf34b2966b4bd718ea (diff) |
Use DockerImage instead of String, part 2
Diffstat (limited to 'config-provisioning')
5 files changed, 22 insertions, 12 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()); } diff --git a/config-provisioning/src/test/java/com/yahoo/config/provision/ClusterMembershipTest.java b/config-provisioning/src/test/java/com/yahoo/config/provision/ClusterMembershipTest.java index c38d67ddc81..71e039f6e8e 100644 --- a/config-provisioning/src/test/java/com/yahoo/config/provision/ClusterMembershipTest.java +++ b/config-provisioning/src/test/java/com/yahoo/config/provision/ClusterMembershipTest.java @@ -42,7 +42,7 @@ public class ClusterMembershipTest { assertTrue(instance.cluster().dockerImageRepo().isEmpty()); } { - Optional<String> dockerImageRepo = Optional.of("docker.foo.com:4443/vespa/bar"); + Optional<DockerImage> dockerImageRepo = Optional.of(DockerImage.fromString("docker.foo.com:4443/vespa/bar")); ClusterMembership instance = ClusterMembership.from("combined/id1/4/37/exclusive/containerId1", Vtag.currentVersion, dockerImageRepo); ClusterMembership serialized = ClusterMembership.from(instance.stringValue(), Vtag.currentVersion, dockerImageRepo); assertEquals(instance, serialized); diff --git a/config-provisioning/src/test/java/com/yahoo/config/provision/serialization/AllocatedHostsSerializerTest.java b/config-provisioning/src/test/java/com/yahoo/config/provision/serialization/AllocatedHostsSerializerTest.java index f2163608050..33157a01c07 100644 --- a/config-provisioning/src/test/java/com/yahoo/config/provision/serialization/AllocatedHostsSerializerTest.java +++ b/config-provisioning/src/test/java/com/yahoo/config/provision/serialization/AllocatedHostsSerializerTest.java @@ -41,7 +41,7 @@ public class AllocatedHostsSerializerTest { List.of(), Optional.empty(), Optional.of(ClusterMembership.from("container/test/0/0", Version.fromString("6.73.1"), - Optional.of("docker.foo.com:4443/vespa/bar"))), + Optional.of(DockerImage.fromString("docker.foo.com:4443/vespa/bar")))), Optional.empty(), Optional.empty(), Optional.empty(), Optional.of(DockerImage.fromString("docker.foo.com:4443/vespa/bar")))); hosts.add(new HostSpec("flavor-from-resources-1", |