diff options
author | Håkon Hallingstad <hakon@oath.com> | 2018-05-05 19:54:02 +0200 |
---|---|---|
committer | Håkon Hallingstad <hakon@oath.com> | 2018-05-05 19:54:02 +0200 |
commit | 3d52da98b690bf956e21b226c2bd1f4c9d18364a (patch) | |
tree | 00f1ea7528f449020b1b0f2c1ae35e8069db3fb8 /node-repository | |
parent | 789e97e4e81768a340da859c165165a3d81cb984 (diff) |
Support patching openstack ID
Diffstat (limited to 'node-repository')
6 files changed, 18 insertions, 1 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java index ae2b5088193..09c7f6a88b1 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/Node.java @@ -184,6 +184,11 @@ public final class Node { allocation, history, type); } + /** Returns a c opy of this with the openStackId set */ + public Node withOpenStackId(String openStackId) { + return new Node(openStackId, ipAddresses, additionalIpAddresses, hostname, parentHostname, flavor, status, state, allocation, history, type); + } + /** Returns a copy of this with a history record saying it was detected to be down at this instant */ public Node downAt(Instant instant) { return with(history.with(new History.Event(History.Event.Type.down, Agent.system, instant))); diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Status.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Status.java index 19e34ccb169..8680577ca06 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Status.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Status.java @@ -102,6 +102,11 @@ public class Status { /** Returns hardware divergence report as JSON string, if any */ public Optional<String> hardwareDivergence() { return hardwareDivergence; } + /** Returns a copy of this with a modified openstack ID. */ + public Status withOpenStackId(String openStackId) { + return new Status(reboot, vespaVersion, failCount, hardwareFailureDescription, wantToRetire, wantToDeprovision, hardwareDivergence); + } + /** Returns the initial status of a newly provisioned node */ public static Status initial() { return new Status(Generation.inital(), Optional.empty(), 0, Optional.empty(), false, false, Optional.empty()); } 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 0e697dd97a3..a5c6176ee53 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 @@ -138,6 +138,8 @@ public class NodePatcher { return node.with(node.status().withWantToDeprovision(asBoolean(value))); case "hardwareDivergence" : return node.with(node.status().withHardwareDivergence(removeQuotedNulls(asOptionalString(value)))); + case "openStackId" : + return node.withOpenStackId(asString(value)); default : throw new IllegalArgumentException("Could not apply field '" + name + "' on a node: No such modifiable field"); } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/SerializationTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/SerializationTest.java index fe216c49888..9c9e4e0bc7a 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/SerializationTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/SerializationTest.java @@ -51,6 +51,7 @@ public class SerializationTest { Node copy = nodeSerializer.fromJson(Node.State.provisioned, nodeSerializer.toJson(node)); assertEquals(node.id(), copy.id()); assertEquals(node.hostname(), copy.hostname()); + assertEquals(node.openStackId(), copy.openStackId()); assertEquals(node.state(), copy.state()); assertFalse(copy.allocation().isPresent()); assertEquals(0, copy.history().events().size()); @@ -229,6 +230,7 @@ public class SerializationTest { assertEquals(parentHostname, deserializedNode.parentHostname().get()); } + @Test public void serializes_multiple_ip_addresses() { byte[] nodeWithMultipleIps = createNodeJson("node4.yahoo.tld", "127.0.0.4", "::4"); 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 581b82e5fd5..24ed065d736 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 @@ -216,6 +216,9 @@ public class RestApiTest { 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\"}"); + 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\"}"); assertFile(new Request("http://localhost:8080/nodes/v2/node/host4.yahoo.com"), "node4-after-changes.json"); } 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 cb250e2033b..9cec6d86421 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 @@ -5,7 +5,7 @@ "type": "tenant", "hostname": "host4.yahoo.com", "parentHostname": "parent.yahoo.com", - "openStackId": "node4", + "openStackId": "patched-openstackid", "flavor": "medium-disk", "canonicalFlavor": "medium-disk", "minDiskAvailableGb": 56.0, |