aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorValerij Fredriksen <valerij92@gmail.com>2019-03-13 19:14:14 +0100
committerValerij Fredriksen <valerij92@gmail.com>2019-03-13 19:32:29 +0100
commitc2dd1db9a29a43a3009e351b59984ba00da441f0 (patch)
tree9ed2ee413861b4b67820a145c277dbceac581690 /node-repository
parent2f61e08501aa5315bb2e08135339917a96f84e3e (diff)
Disallow setting currentDockerImage for non-docker nodes
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/v2/NodePatcher.java3
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeFlavors.java3
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/RestApiTest.java13
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4-after-changes.json14
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",