diff options
author | Harald Musum <musum@yahoo-inc.com> | 2017-03-08 08:40:39 +0100 |
---|---|---|
committer | Harald Musum <musum@yahoo-inc.com> | 2017-03-08 08:40:39 +0100 |
commit | 1ac6a2567a36c904bd03750585759f530bb0b58c (patch) | |
tree | ad8b511373ff3b16db33d552b2f844cd1f41828c /node-repository | |
parent | cef4d7d49fa401034e653739b7ab30aef6f4d480 (diff) |
Add ipAddresses to nodes api response
Diffstat (limited to 'node-repository')
19 files changed, 83 insertions, 43 deletions
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 ceef5c7bf1f..ceff9569bac 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 @@ -19,6 +19,7 @@ import java.io.IOException; import java.io.OutputStream; import java.net.URI; import java.util.List; +import java.util.Set; /** * @author bratseth @@ -172,6 +173,7 @@ class NodesResponse extends HttpResponse { node.status().hardwareFailure().ifPresent(failure -> object.setString("hardwareFailureType", toString(failure))); object.setBool("wantToRetire", node.status().wantToRetire()); toSlime(node.history(), object.setArray("history")); + ipAddressesToSlime(node.ipAddresses(), object.setArray("ipAddresses")); } private String toString(NodeType type) { @@ -206,6 +208,12 @@ class NodesResponse extends HttpResponse { } } + private void ipAddressesToSlime(Set<String> ipAddresses, Cursor array) { + for (String ip : ipAddresses) { + array.addString(ip); + } + } + private String lastElement(String path) { if (path.endsWith("/")) path = path.substring(0, path.length()-1); diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java index 34507df749f..540fb5bc890 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java @@ -24,6 +24,9 @@ import java.time.Clock; import java.time.Instant; import java.time.ZoneId; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Optional; @@ -56,22 +59,27 @@ public class MockNodeRepository extends NodeRepository { NodeRepositoryProvisioner provisioner = new NodeRepositoryProvisioner(this, flavors, Zone.defaultZone()); List<Node> nodes = new ArrayList<>(); - nodes.add(createNode("node1", "host1.yahoo.com", Optional.empty(), flavors.getFlavorOrThrow("default"), NodeType.tenant)); - nodes.add(createNode("node2", "host2.yahoo.com", Optional.empty(), flavors.getFlavorOrThrow("default"), NodeType.tenant)); - nodes.add(createNode("node3", "host3.yahoo.com", Optional.empty(), flavors.getFlavorOrThrow("expensive"), NodeType.tenant)); + + final List<String> ipAddressesForAllHost = Arrays.asList("127.0.0.1", "2001:4998:c:2974::1029"); + Collections.sort(ipAddressesForAllHost); + final HashSet<String> ipAddresses = new HashSet<>(ipAddressesForAllHost); + + nodes.add(createNode("node1", "host1.yahoo.com", ipAddresses, Optional.empty(), flavors.getFlavorOrThrow("default"), NodeType.tenant)); + nodes.add(createNode("node2", "host2.yahoo.com", ipAddresses, Optional.empty(), flavors.getFlavorOrThrow("default"), NodeType.tenant)); + nodes.add(createNode("node3", "host3.yahoo.com", ipAddresses, Optional.empty(), flavors.getFlavorOrThrow("expensive"), NodeType.tenant)); // TODO: Use docker flavor - Node node4 = createNode("node4", "host4.yahoo.com", Optional.of("dockerhost4"), flavors.getFlavorOrThrow("default"), NodeType.tenant); + Node node4 = createNode("node4", "host4.yahoo.com", ipAddresses, Optional.of("dockerhost4"), flavors.getFlavorOrThrow("default"), NodeType.tenant); node4 = node4.with(node4.status().withDockerImage("image-12")); nodes.add(node4); - Node node5 = createNode("node5", "host5.yahoo.com", Optional.of("parent1.yahoo.com"), flavors.getFlavorOrThrow("default"), NodeType.tenant); + Node node5 = createNode("node5", "host5.yahoo.com", ipAddresses, Optional.of("parent1.yahoo.com"), flavors.getFlavorOrThrow("default"), NodeType.tenant); nodes.add(node5.with(node5.status().withDockerImage("image-123").withVespaVersion(new Version("1.2.3")))); - nodes.add(createNode("node6", "host6.yahoo.com", Optional.empty(), flavors.getFlavorOrThrow("default"), NodeType.tenant)); - nodes.add(createNode("node7", "host7.yahoo.com", Optional.empty(), flavors.getFlavorOrThrow("default"), NodeType.tenant)); + nodes.add(createNode("node6", "host6.yahoo.com", ipAddresses, Optional.empty(), flavors.getFlavorOrThrow("default"), NodeType.tenant)); + nodes.add(createNode("node7", "host7.yahoo.com", ipAddresses, Optional.empty(), flavors.getFlavorOrThrow("default"), NodeType.tenant)); // 8 and 9 are added by web service calls - Node node10 = createNode("node10", "host10.yahoo.com", Optional.of("parent1.yahoo.com"), flavors.getFlavorOrThrow("default"), NodeType.tenant); + Node node10 = createNode("node10", "host10.yahoo.com", ipAddresses, Optional.of("parent1.yahoo.com"), flavors.getFlavorOrThrow("default"), NodeType.tenant); Status node10newStatus = node10.status(); node10newStatus = node10newStatus .withVespaVersion(Version.fromString("5.104.142")) @@ -80,8 +88,8 @@ public class MockNodeRepository extends NodeRepository { node10 = node10.with(node10newStatus); nodes.add(node10); - nodes.add(createNode("node55", "host55.yahoo.com", Optional.empty(), flavors.getFlavorOrThrow("default"), NodeType.tenant)); - nodes.add(createNode("parent1", "parent1.yahoo.com", Optional.empty(), flavors.getFlavorOrThrow("default"), NodeType.host)); + nodes.add(createNode("node55", "host55.yahoo.com", ipAddresses, Optional.empty(), flavors.getFlavorOrThrow("default"), NodeType.tenant)); + nodes.add(createNode("parent1", "parent1.yahoo.com", ipAddresses, Optional.empty(), flavors.getFlavorOrThrow("default"), NodeType.host)); nodes = addNodes(nodes); nodes.remove(6); 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 5393c1311c9..a3b9a14804f 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 @@ -70,10 +70,10 @@ public class RestApiTest { // POST new nodes assertResponse(new Request("http://localhost:8080/nodes/v2/node", - ("[" + asNodeJson("host8.yahoo.com", "default") + "," + - asNodeJson("host9.yahoo.com", "large-variant") + "," + - asHostJson("parent2.yahoo.com", "large-variant") + "," + - asDockerNodeJson("host11.yahoo.com", "parent.host.yahoo.com") + "]"). + ("[" + asNodeJson("host8.yahoo.com", "default", "127.0.0.1") + "," + // test with only 1 ip address + asNodeJson("host9.yahoo.com", "large-variant", "127.0.0.1", "2001:4998:c:2974::1029") + "," + + asHostJson("parent2.yahoo.com", "large-variant", "127.0.0.1", "2001:4998:c:2974::1029") + "," + + asDockerNodeJson("host11.yahoo.com", "parent.host.yahoo.com", "127.0.0.1", "2001:4998:c:2974::1029") + "]"). getBytes(StandardCharsets.UTF_8), Request.Method.POST), "{\"message\":\"Added 4 nodes to the provisioned state\"}"); @@ -423,12 +423,27 @@ public class RestApiTest { @After public void stopContainer() { container.close(); } - private String asDockerNodeJson(String hostname, String parentHostname) { - return "{\"hostname\":\"" + hostname + "\", \"parentHostname\":\"" + parentHostname + - "\", \"openStackId\":\"" + hostname + "\",\"flavor\":\"docker\"}"; + private String asDockerNodeJson(String hostname, String parentHostname, String... ipAddress) { + return "{\"hostname\":\"" + hostname + "\", \"parentHostname\":\"" + parentHostname + "\"," + + createIpAddresses(ipAddress) + + "\"openStackId\":\"" + hostname + "\",\"flavor\":\"docker\"}"; } private String asNodeJson(String hostname, String flavor, String... ipAddress) { + return "{\"hostname\":\"" + hostname + "\", \"openStackId\":\"" + hostname + "\"," + + createIpAddresses(ipAddress) + + "\"flavor\":\"" + flavor + "\"}"; + } + + private String asHostJson(String hostname, String flavor, String... ipAddress) { + return "{\"hostname\":\"" + hostname + "\", \"openStackId\":\"" + hostname + "\"," + + createIpAddresses(ipAddress) + + "\"flavor\":\"" + flavor + "\"" + + ", \"type\":\"host\"}"; + } + + // TODO: Simplify when ipAddress is not used anymore (see NodesApiHandler.createNode()) + private String createIpAddresses(String... ipAddress) { final String ipAddressJsonPart; switch (ipAddress.length) { case 0: @@ -441,18 +456,11 @@ public class RestApiTest { default: ipAddressJsonPart = "\"ipAddresses\":[" + Arrays.stream(ipAddress) - .map(ip -> "\"" + ip + "\"") - .collect(Collectors.joining(",")) + + .map(ip -> "\"" + ip + "\"") + .collect(Collectors.joining(",")) + "],"; } - return "{\"hostname\":\"" + hostname + "\", \"openStackId\":\"" + hostname + "\"," + - ipAddressJsonPart + - "\"flavor\":\"" + flavor + "\"}"; - } - - private String asHostJson(String hostname, String flavor) { - return "{\"hostname\":\"" + hostname + "\", \"openStackId\":\"" + hostname + "\",\"flavor\":\"" + flavor + "\"" + - ", \"type\":\"host\"}"; + return ipAddressJsonPart; } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node1.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node1.json index 710d8087ca5..bb209bdaf44 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node1.json +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node1.json @@ -31,5 +31,6 @@ "failCount": 0, "hardwareFailure" : false, "wantToRetire" : false, - "history":[{"event":"readied","at":123},{"event":"reserved","at":123},{"event":"activated","at":123}] + "history":[{"event":"readied","at":123},{"event":"reserved","at":123},{"event":"activated","at":123}], + "ipAddresses":["2001:4998:c:2974::1029", "127.0.0.1"] } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node10.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node10.json index 51b41825cb6..1edb26d95bb 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node10.json +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node10.json @@ -36,5 +36,6 @@ "failCount": 0, "hardwareFailure" : false, "wantToRetire" : false, - "history":[{"event":"readied","at":123},{"event":"reserved","at":123}] + "history":[{"event":"readied","at":123},{"event":"reserved","at":123}], + "ipAddresses":["2001:4998:c:2974::1029", "127.0.0.1"] } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node11.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node11.json index fe5f226396c..b138077b5b6 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node11.json +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node11.json @@ -18,5 +18,6 @@ "failCount":0, "hardwareFailure":false, "wantToRetire":false, - "history":[] + "history":[], + "ipAddresses":["2001:4998:c:2974::1029", "127.0.0.1"] } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node2.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node2.json index b51ccdd20fb..d6fbc56eefc 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node2.json +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node2.json @@ -31,5 +31,6 @@ "failCount": 0, "hardwareFailure" : false, "wantToRetire" : false, - "history":[{"event":"readied","at":123},{"event":"reserved","at":123},{"event":"activated","at":123}] + "history":[{"event":"readied","at":123},{"event":"reserved","at":123},{"event":"activated","at":123}], + "ipAddresses":["2001:4998:c:2974::1029", "127.0.0.1"] } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node3.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node3.json index cea356f6c30..05242d71e0a 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node3.json +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node3.json @@ -29,5 +29,6 @@ "failCount": 0, "hardwareFailure" : false, "wantToRetire" : false, - "history":[{"event":"readied","at":123},{"event":"reserved","at":123},{"event":"activated","at":123}] + "history":[{"event":"readied","at":123},{"event":"reserved","at":123},{"event":"activated","at":123}], + "ipAddresses":["2001:4998:c:2974::1029", "127.0.0.1"] } 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 6b8bc90af18..a6db001bf1b 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 @@ -51,5 +51,6 @@ "event": "rebooted", "at": 123 } - ] + ], + "ipAddresses":["127.0.0.1", "::1"] } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4.json index d4782435282..f0b5fef6222 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4.json +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node4.json @@ -34,5 +34,6 @@ "failCount": 0, "hardwareFailure" : false, "wantToRetire" : false, - "history":[{"event":"readied","at":123},{"event":"reserved","at":123}] + "history":[{"event":"readied","at":123},{"event":"reserved","at":123}], + "ipAddresses":["2001:4998:c:2974::1029", "127.0.0.1"] } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5-after-changes.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5-after-changes.json index 58f8a2022a0..a2eccfdfee3 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5-after-changes.json +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5-after-changes.json @@ -18,5 +18,6 @@ "failCount": 1, "hardwareFailure": false, "wantToRetire": false, - "history":[{"event":"readied","at":123},{"event":"failed","at":123}] + "history":[{"event":"readied","at":123},{"event":"failed","at":123}], + "ipAddresses":["2001:4998:c:2974::1029", "127.0.0.1"] } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5.json index d25e5270ef3..2560c38c15d 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5.json +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node5.json @@ -20,5 +20,6 @@ "failCount": 1, "hardwareFailure" : false, "wantToRetire" : false, - "history":[{"event":"readied","at":123},{"event":"failed","at":123}] + "history":[{"event":"readied","at":123},{"event":"failed","at":123}], + "ipAddresses":["2001:4998:c:2974::1029", "127.0.0.1"] } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55.json index 972b82db5c3..a2b6f904054 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55.json +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node55.json @@ -17,5 +17,6 @@ "failCount": 0, "hardwareFailure" : false, "wantToRetire" : false, - "history":[{"event":"deallocated","at":123}] + "history":[{"event":"deallocated","at":123}], + "ipAddresses":["2001:4998:c:2974::1029", "127.0.0.1"] } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6.json index d37fe7d1783..04e0dfbb4a4 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6.json +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node6.json @@ -31,5 +31,6 @@ "failCount": 0, "hardwareFailure" : false, "wantToRetire" : false, - "history":[{"event":"readied","at":123},{"event":"reserved","at":123},{"event":"activated","at":123}] + "history":[{"event":"readied","at":123},{"event":"reserved","at":123},{"event":"activated","at":123}], + "ipAddresses":["2001:4998:c:2974::1029", "127.0.0.1"] } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node7.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node7.json index a63ff1632d2..6b8abb72f0c 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node7.json +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node7.json @@ -17,5 +17,6 @@ "failCount": 0, "hardwareFailure" : false, "wantToRetire" : false, - "history":[] + "history":[], + "ipAddresses":["2001:4998:c:2974::1029", "127.0.0.1"] } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node8.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node8.json index 925632b5a64..8ad07b32202 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node8.json +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node8.json @@ -17,5 +17,6 @@ "failCount": 0, "hardwareFailure" : false, "wantToRetire" : false, - "history":[] + "history":[], + "ipAddresses":["127.0.0.1"] } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node9.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node9.json index 27f2ff08d90..d9837a64444 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node9.json +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/node9.json @@ -17,5 +17,6 @@ "failCount": 0, "hardwareFailure" : false, "wantToRetire" : false, - "history":[] + "history":[], + "ipAddresses":["2001:4998:c:2974::1029", "127.0.0.1"] } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/parent1.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/parent1.json index 6e647f5e57d..294086be12d 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/parent1.json +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/parent1.json @@ -22,5 +22,6 @@ "event": "readied", "at": 123 } - ] + ], + "ipAddresses":["2001:4998:c:2974::1029", "127.0.0.1"] } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/parent2.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/parent2.json index 862978a436c..1210f5d7165 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/parent2.json +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/v2/responses/parent2.json @@ -17,5 +17,6 @@ "failCount": 0, "hardwareFailure": false, "wantToRetire" : false, - "history": [] + "history": [], + "ipAddresses":["2001:4998:c:2974::1029", "127.0.0.1"] } |