diff options
5 files changed, 11 insertions, 7 deletions
diff --git a/config-provisioning/abi-spec.json b/config-provisioning/abi-spec.json index 46ece153986..853fe4b11ed 100644 --- a/config-provisioning/abi-spec.json +++ b/config-provisioning/abi-spec.json @@ -288,6 +288,7 @@ "public com.yahoo.config.provision.ClusterSpec$Type type()", "public com.yahoo.config.provision.ClusterSpec$Id id()", "public java.util.Optional dockerImageRepo()", + "public java.util.Optional dockerImage()", "public com.yahoo.component.Version vespaVersion()", "public java.util.Optional group()", "public java.util.Optional combinedId()", 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 21d6a226b18..66a2ff411fe 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 @@ -48,6 +48,9 @@ public final class ClusterSpec { /** Returns the docker image repository part of a docker image we want this cluster to run */ public Optional<String> 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()); } + /** Returns the version of Vespa that we want this cluster to run */ public Version vespaVersion() { return vespaVersion; } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java index bd5ba514a1f..94f4dab1245 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/NodeSerializer.java @@ -187,7 +187,7 @@ public class NodeSerializer { object.setLong(currentRestartGenerationKey, allocation.restartGeneration().current()); object.setBool(removableKey, allocation.isRemovable()); object.setString(wantedVespaVersionKey, allocation.membership().cluster().vespaVersion().toString()); - object.setString(wantedDockerImageRepoKey, allocation.membership().cluster().dockerImageRepo().orElse("")); + allocation.membership().cluster().dockerImageRepo().ifPresent(repo -> object.setString(wantedDockerImageRepoKey, repo)); allocation.networkPorts().ifPresent(ports -> NetworkPortsSerializer.toSlime(ports, object.setArray(networkPortsKey))); } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesResponse.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesResponse.java index c96458a0433..6b308a96274 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesResponse.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodesResponse.java @@ -158,9 +158,8 @@ class NodesResponse extends HttpResponse { object.setLong("restartGeneration", allocation.restartGeneration().wanted()); object.setLong("currentRestartGeneration", allocation.restartGeneration().current()); String wantedVespaVersion = allocation.membership().cluster().vespaVersion().toFullString(); - Optional<String> dockerImageRepo = allocation.membership().cluster().dockerImageRepo(); - object.setString("wantedDockerImage", dockerImageRepo.map(s -> s + ":" + wantedVespaVersion) - .orElseGet(() -> nodeRepository.dockerImage(node).withTag(allocation.membership().cluster().vespaVersion()).asString())); + object.setString("wantedDockerImage", allocation.membership().cluster().dockerImage() + .orElse(nodeRepository.dockerImage(node).withTag(allocation.membership().cluster().vespaVersion()).asString())); object.setString("wantedVespaVersion", wantedVespaVersion); toSlime(allocation.requestedResources(), object.setObject("requestedResources")); allocation.networkPorts().ifPresent(ports -> NetworkPortsSerializer.toSlime(ports, object.setArray("networkPorts"))); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java index 0919e537420..931d87a3265 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTest.java @@ -172,16 +172,17 @@ public class ProvisioningTest { tester.activate(application1, state1.allHosts); HostSpec host1 = state1.container0.iterator().next(); - assertFalse(host1.version().isPresent()); Node node1 = tester.nodeRepository().getNode(host1.hostname()).get(); - tester.nodeRepository().write(node1.with(node1.status().withDockerImage(DockerImage.fromString(dockerImageRepo))), () -> {}); + DockerImage dockerImage = DockerImage.fromString(dockerImageRepo).withTag(Version.fromString("1.2.3")); + tester.nodeRepository().write(node1.with(node1.status().withDockerImage(dockerImage)), () -> {}); // redeploy SystemState state2 = prepare(application1, tester, 1, 1, 1 ,1 , false, defaultResources, "1.2.3", Optional.of(dockerImageRepo)); tester.activate(application1, state2.allHosts); host1 = state2.container0.iterator().next(); - assertEquals(dockerImageRepo, host1.dockerImageRepo().get()); + node1 = tester.nodeRepository().getNode(host1.hostname()).get(); + assertEquals(dockerImage, node1.status().dockerImage().get()); } @Test |