diff options
author | Valerij Fredriksen <valerij92@gmail.com> | 2019-03-13 19:14:14 +0100 |
---|---|---|
committer | Valerij Fredriksen <valerij92@gmail.com> | 2019-03-13 19:32:29 +0100 |
commit | c2dd1db9a29a43a3009e351b59984ba00da441f0 (patch) | |
tree | 9ed2ee413861b4b67820a145c277dbceac581690 /node-repository | |
parent | 2f61e08501aa5315bb2e08135339917a96f84e3e (diff) |
Disallow setting currentDockerImage for non-docker nodes
Diffstat (limited to 'node-repository')
4 files changed, 22 insertions, 11 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodePatcher.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodePatcher.java index 989752088b2..2bf41e0685c 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodePatcher.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodePatcher.java @@ -3,6 +3,7 @@ package com.yahoo.vespa.hosted.provision.restapi.v2; import com.yahoo.component.Version; import com.yahoo.config.provision.DockerImage; +import com.yahoo.config.provision.Flavor; import com.yahoo.config.provision.NodeFlavors; import com.yahoo.io.IOUtils; import com.yahoo.slime.Inspector; @@ -110,6 +111,8 @@ public class NodePatcher { case "currentRestartGeneration" : return patchCurrentRestartGeneration(asLong(value)); case "currentDockerImage" : + if (node.flavor().getType() != Flavor.Type.DOCKER_CONTAINER) + throw new IllegalArgumentException("Docker image can only be set for docker containers"); Version versionFromImage = Optional.of(asString(value)) .filter(s -> !s.isEmpty()) .map(DockerImage::fromString) diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeFlavors.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeFlavors.java index 241a797cd1b..0992fbc75ca 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeFlavors.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeFlavors.java @@ -1,9 +1,9 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.provision.testutils; -import com.yahoo.config.provisioning.FlavorsConfig; import com.yahoo.config.provision.Flavor; import com.yahoo.config.provision.NodeFlavors; +import com.yahoo.config.provisioning.FlavorsConfig; import com.yahoo.vespa.hosted.provision.provisioning.FlavorConfigBuilder; /** @@ -22,6 +22,7 @@ public class MockNodeFlavors extends NodeFlavors { b.addFlavor("medium-disk", 6., 12., 56, Flavor.Type.BARE_METAL); b.addFlavor("large", 4., 32., 1600, Flavor.Type.BARE_METAL); b.addFlavor("docker", 0.2, 0.5, 100, Flavor.Type.DOCKER_CONTAINER); + b.addFlavor("d-2-8-100", 2, 8, 100, Flavor.Type.DOCKER_CONTAINER); b.addFlavor("v-4-8-100", 4.0, 8.0, 100, Flavor.Type.VIRTUAL_MACHINE); FlavorsConfig.Flavor.Builder largeVariant = b.addFlavor("large-variant", 64, 128, 2000, Flavor.Type.BARE_METAL); b.addReplaces("large", largeVariant); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java index 177a455cbc5..73e98303c14 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java @@ -193,7 +193,7 @@ public class RestApiTest { Utf8.toBytes("{\"currentRebootGeneration\": 1}"), Request.Method.PATCH), "{\"message\":\"Updated host4.yahoo.com\"}"); assertResponse(new Request("http://localhost:8080/nodes/v2/node/host4.yahoo.com", - Utf8.toBytes("{\"flavor\": \"medium-disk\"}"), Request.Method.PATCH), + Utf8.toBytes("{\"flavor\": \"d-2-8-100\"}"), Request.Method.PATCH), "{\"message\":\"Updated host4.yahoo.com\"}"); assertResponse(new Request("http://localhost:8080/nodes/v2/node/host4.yahoo.com", Utf8.toBytes("{\"currentVespaVersion\": \"5.104.142\"}"), Request.Method.PATCH), @@ -214,8 +214,8 @@ public class RestApiTest { Utf8.toBytes("{\"wantToDeprovision\": true}"), Request.Method.PATCH), "{\"message\":\"Updated host4.yahoo.com\"}"); assertResponse(new Request("http://localhost:8080/nodes/v2/node/host4.yahoo.com", - Utf8.toBytes("{\"currentDockerImage\": \"ignored-image-name:4443/vespa/ci:6.43.0\"}"), Request.Method.PATCH), - "{\"message\":\"Updated host4.yahoo.com\"}"); + Utf8.toBytes("{\"currentVespaVersion\": \"6.43.0\",\"currentDockerImage\": \"docker-registry.domain.tld:8080/dist/vespa:6.43.0\"}"), Request.Method.PATCH), + "{\"message\":\"Updated host4.yahoo.com\"}"); assertResponse(new Request("http://localhost:8080/nodes/v2/node/host4.yahoo.com", Utf8.toBytes("{\"openStackId\": \"patched-openstackid\"}"), Request.Method.PATCH), "{\"message\":\"Updated host4.yahoo.com\"}"); @@ -476,6 +476,13 @@ public class RestApiTest { } @Test + public void test_disallow_setting_currentDockerImage_for_non_docker_node() throws IOException { + assertResponse(new Request("http://localhost:8080/nodes/v2/node/host1.yahoo.com", + Utf8.toBytes("{\"currentDockerImage\": \"ignored-image-name:4443/vespa/ci:6.45.0\"}"), Request.Method.PATCH), + 400, "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Could not set field 'currentDockerImage': Docker image can only be set for docker containers\"}"); + } + + @Test public void test_node_patch_to_remove_docker_ready_fields() throws Exception { assertResponse(new Request("http://localhost:8080/nodes/v2/node/host5.yahoo.com", Utf8.toBytes("{" + diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4-after-changes.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4-after-changes.json index 14c1201f1de..bba9134897a 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4-after-changes.json +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4-after-changes.json @@ -6,15 +6,15 @@ "hostname": "host4.yahoo.com", "parentHostname": "parent.yahoo.com", "openStackId": "patched-openstackid", - "flavor": "medium-disk", - "canonicalFlavor": "medium-disk", - "minDiskAvailableGb": 56.0, - "minMainMemoryAvailableGb": 12.0, - "description": "Flavor-name-is-medium-disk", - "minCpuCores": 6.0, + "flavor": "d-2-8-100", + "canonicalFlavor": "d-2-8-100", + "minDiskAvailableGb": 100.0, + "minMainMemoryAvailableGb": 8.0, + "description": "Flavor-name-is-d-2-8-100", + "minCpuCores": 2.0, "fastDisk": true, "bandwidth":0.0, - "environment": "BARE_METAL", + "environment": "DOCKER_CONTAINER", "owner": { "tenant": "tenant3", "application": "application3", |