diff options
author | Martin Polden <mpolden@mpolden.no> | 2021-10-14 10:18:43 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2021-10-14 10:23:23 +0200 |
commit | 580785c8dab38965a84c07f6c02397a049c28ca3 (patch) | |
tree | 5847d6fda437b74ba6fa603c9c045f6f918c3491 /node-repository/src/test/java/com/yahoo | |
parent | fa0a86f6eaf5f219e3b1a6c7cbf4c064d6b0ffa6 (diff) |
Stop reading container images from ZK
Diffstat (limited to 'node-repository/src/test/java/com/yahoo')
7 files changed, 54 insertions, 49 deletions
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTester.java index aaccd7b31cc..b391292884f 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTester.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/NodeRepositoryTester.java @@ -44,6 +44,7 @@ public class NodeRepositoryTester { Zone.defaultZone(), new MockNameResolver().mockAnyLookup(), DockerImage.fromString("docker-registry.domain.tld:8080/dist/vespa"), + Optional.empty(), new InMemoryFlagSource(), new MemoryMetricsDb(clock), true, diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityCheckerTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityCheckerTester.java index 7e1def4b754..b10b4c2958a 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityCheckerTester.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityCheckerTester.java @@ -70,6 +70,7 @@ public class CapacityCheckerTester { zone, new MockNameResolver().mockAnyLookup(), DockerImage.fromString("docker-registry.domain.tld:8080/dist/vespa"), + Optional.empty(), new InMemoryFlagSource(), new MemoryMetricsDb(clock), true, diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/SpareCapacityMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/SpareCapacityMaintainerTest.java index 7a42c3a11f0..373bfe20162 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/SpareCapacityMaintainerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/SpareCapacityMaintainerTest.java @@ -32,6 +32,7 @@ import java.time.Duration; import java.time.Instant; import java.util.ArrayList; import java.util.List; +import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; import java.util.stream.IntStream; @@ -263,6 +264,7 @@ public class SpareCapacityMaintainerTest { new Zone(Environment.prod, RegionName.from("us-east-3")), new MockNameResolver().mockAnyLookup(), DockerImage.fromString("docker-registry.domain.tld:8080/dist/vespa"), + Optional.empty(), new InMemoryFlagSource(), new MemoryMetricsDb(clock), true, diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ContainerImagesTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ContainerImagesTest.java index 6f624ade97d..924787a1ca6 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ContainerImagesTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ContainerImagesTest.java @@ -1,13 +1,22 @@ // Copyright 2020 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.provision.provisioning; +import com.yahoo.component.Version; +import com.yahoo.config.provision.ApplicationId; +import com.yahoo.config.provision.ClusterMembership; import com.yahoo.config.provision.DockerImage; +import com.yahoo.config.provision.Flavor; import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.NodeType; -import com.yahoo.vespa.flags.InMemoryFlagSource; +import com.yahoo.vespa.hosted.provision.Node; +import com.yahoo.vespa.hosted.provision.node.Allocation; +import com.yahoo.vespa.hosted.provision.node.Generation; +import com.yahoo.vespa.hosted.provision.node.IP; +import com.yahoo.vespa.hosted.provision.testutils.MockNodeFlavors; import org.junit.Test; import java.util.Optional; +import java.util.Set; import static org.junit.Assert.assertEquals; @@ -18,34 +27,46 @@ public class ContainerImagesTest { @Test public void image_selection() { - var flagSource = new InMemoryFlagSource(); - var tester = new ProvisioningTester.Builder().flagSource(flagSource).build(); - - var proxyImage = DockerImage.fromString("docker-registry.domain.tld:8080/dist/proxy"); - tester.nodeRepository().containerImages().setImage(NodeType.proxy, Optional.of(proxyImage)); - - // Host uses tenant default image (for preload purposes) - var defaultImage = DockerImage.fromString("docker-registry.domain.tld:8080/dist/vespa"); - var hosts = tester.makeReadyNodes(2, "default", NodeType.host); - tester.activateTenantHosts(); - for (var host : hosts) { - assertEquals(defaultImage, tester.nodeRepository().containerImages().imageFor(host.type())); - } + DockerImage defaultImage = DockerImage.fromString("registry.example.com/vespa/default"); + DockerImage tenantImage = DockerImage.fromString("registry.example.com/vespa/tenant"); + ContainerImages images = new ContainerImages(defaultImage, Optional.of(tenantImage)); - // Tenant node uses tenant default image - var resources = new NodeResources(2, 8, 50, 1); - for (var host : hosts) { - var nodes = tester.makeReadyChildren(2, resources, host.hostname()); - for (var node : nodes) { - assertEquals(defaultImage, tester.nodeRepository().containerImages().imageFor(node.type())); - } - } + assertEquals(defaultImage, images.get(node(NodeType.confighost))); // For preload purposes + assertEquals(defaultImage, images.get(node(NodeType.config))); + + assertEquals(tenantImage, images.get(node(NodeType.host))); // For preload purposes + assertEquals(tenantImage, images.get(node(NodeType.tenant))); + + assertEquals(defaultImage, images.get(node(NodeType.proxyhost))); // For preload purposes + assertEquals(defaultImage, images.get(node(NodeType.proxy))); + + // Tenant node requesting a special image + DockerImage requested = DockerImage.fromString("registry.example.com/vespa/special"); + assertEquals(requested, images.get(node(NodeType.tenant, requested))); + + // When there is no custom tenant image, the default one is used + images = new ContainerImages(defaultImage, Optional.empty()); + assertEquals(defaultImage, images.get(node(NodeType.host))); + assertEquals(defaultImage, images.get(node(NodeType.tenant))); + } + + private static Node node(NodeType type) { + return node(type, null); + } - // Proxy host uses image used by child nodes (proxy nodes), which is overridden in this case (for preload purposes) - var proxyHosts = tester.makeReadyNodes(2, "default", NodeType.proxyhost, 1); - for (var host : proxyHosts) { - assertEquals(proxyImage, tester.nodeRepository().containerImages().imageFor(host.type())); + private static Node node(NodeType type, DockerImage requested) { + Flavor flavor = new MockNodeFlavors().getFlavorOrThrow("default"); + Node.Builder b = Node.create(type + "1", new IP.Config(Set.of(), Set.of()), type + "1.example.com", flavor, type); + if (requested != null) { + b.allocation(new Allocation(ApplicationId.defaultId(), + ClusterMembership.from("container/id1/4/37", + Version.fromString("1.2.3"), + Optional.of(requested)), + NodeResources.unspecified(), + Generation.initial(), + false)); } + return b.build(); } } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java index 4c9597d00bd..bf5f6f1738f 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/ProvisioningTester.java @@ -111,6 +111,7 @@ public class ProvisioningTester { zone, nameResolver, containerImage, + Optional.empty(), flagSource, new MemoryMetricsDb(clock), true, diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiTest.java index 1ab0efb42bd..30f4705812d 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiTest.java @@ -228,7 +228,6 @@ public class NodesV2ApiTest { Utf8.toBytes("{\"modelName\": null}"), Request.Method.PATCH), "{\"message\":\"Updated dockerhost1.yahoo.com\"}"); tester.assertPartialResponse(new Request("http://localhost:8080/nodes/v2/node/dockerhost1.yahoo.com"), "modelName", false); - tester.container().handleRequest((new Request("http://localhost:8080/nodes/v2/upgrade/tenant", Utf8.toBytes("{\"dockerImage\": \"ignored-registry.example.com/my/image\"}"), Request.Method.PATCH))); ((OrchestratorMock) tester.container().components().getComponent(OrchestratorMock.class.getName())) .suspend(new HostName("host4.yahoo.com")); @@ -679,7 +678,7 @@ public class NodesV2ApiTest { Utf8.toBytes("{}"), Request.Method.PATCH), 400, - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"At least one of 'version', 'osVersion' or 'dockerImage' must be set\"}"); + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"At least one of 'version' or 'osVersion' must be set\"}"); // Downgrade without force fails tester.assertResponse(new Request("http://localhost:8080/nodes/v2/upgrade/confighost", @@ -761,26 +760,6 @@ public class NodesV2ApiTest { Request.Method.PATCH), 200, "{\"message\":\"Set osVersion to null for nodes of type confighost\"}"); - - // Set container image for config and tenant - assertResponse(new Request("http://localhost:8080/nodes/v2/upgrade/tenant", - Utf8.toBytes("{\"dockerImage\": \"my-repo.my-domain.example:1234/repo/tenant\"}"), - Request.Method.PATCH), - "{\"message\":\"Set container image to my-repo.my-domain.example:1234/repo/tenant for nodes of type tenant\"}"); - assertResponse(new Request("http://localhost:8080/nodes/v2/upgrade/config", - Utf8.toBytes("{\"dockerImage\": \"my-repo.my-domain.example:1234/repo/image\"}"), - Request.Method.PATCH), - "{\"message\":\"Set container image to my-repo.my-domain.example:1234/repo/image for nodes of type config\"}"); - - assertResponse(new Request("http://localhost:8080/nodes/v2/upgrade/"), - "{\"versions\":{\"config\":\"6.123.456\",\"confighost\":\"6.124.42\",\"controller\":\"6.123.456\"},\"osVersions\":{\"host\":\"7.5.2\"},\"dockerImages\":{\"tenant\":\"my-repo.my-domain.example:1234/repo/tenant\",\"config\":\"my-repo.my-domain.example:1234/repo/image\"}}"); - - // Cannot set container image for non docker node type - tester.assertResponse(new Request("http://localhost:8080/nodes/v2/upgrade/confighost", - Utf8.toBytes("{\"dockerImage\": \"my-repo.my-domain.example:1234/repo/image\"}"), - Request.Method.PATCH), - 400, - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Setting container image for confighost nodes is unsupported\"}"); } @Test diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/node4-after-changes.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/node4-after-changes.json index 6f25254b420..7770227f5f8 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/node4-after-changes.json +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/node4-after-changes.json @@ -25,7 +25,7 @@ }, "restartGeneration": 1, "currentRestartGeneration": 1, - "wantedDockerImage": "docker-registry.domain.tld:8080/my/image:6.42.0", + "wantedDockerImage": "docker-registry.domain.tld:8080/dist/vespa:6.42.0", "wantedVespaVersion": "6.42.0", "requestedResources": { "vcpu":1.0, "memoryGb":4.0, "diskGb":100.0, "bandwidthGbps":1.0, "diskSpeed":"fast", "storageType":"any" }, "orchestratorStatus": "ALLOWED_TO_BE_DOWN", |