summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorgjoranv <gv@verizonmedia.com>2023-02-08 18:05:33 +0100
committergjoranv <gv@verizonmedia.com>2023-02-10 15:49:18 +0100
commitcaa42719324894082bafdfa1e6256d88eda2b914 (patch)
tree80afc9f9ccbb53e18a4d694cc921a4e848426fed /node-repository
parentf20c863d11530a3200a2be5fbffdd6607918b2c3 (diff)
Add nodes/v2/wireguard/
.. to allow tenant nodes to get peer config for configservers.
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java3
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/WireguardResponse.java36
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiTest.java1
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/root.json6
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/wireguard.json12
5 files changed, 55 insertions, 3 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java
index b1a66e34c9e..543901621d0 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java
@@ -115,7 +115,7 @@ public class NodesV2ApiHandler extends ThreadedHttpRequestHandler {
private HttpResponse handleGET(HttpRequest request) {
Path path = new Path(request.getUri());
String pathS = request.getUri().getPath();
- if (path.matches( "/nodes/v2")) return new ResourceResponse(request.getUri(), "node", "state", "acl", "command", "archive", "locks", "maintenance", "upgrade", "capacity", "application", "stats");
+ if (path.matches( "/nodes/v2")) return new ResourceResponse(request.getUri(), "node", "state", "acl", "command", "archive", "locks", "maintenance", "upgrade", "capacity", "application", "stats", "wireguard");
if (path.matches( "/nodes/v2/node")) return new NodesResponse(ResponseType.nodeList, request, orchestrator, nodeRepository);
if (pathS.startsWith("/nodes/v2/node/")) return new NodesResponse(ResponseType.singleNode, request, orchestrator, nodeRepository);
if (path.matches( "/nodes/v2/state")) return new NodesResponse(ResponseType.stateList, request, orchestrator, nodeRepository);
@@ -130,6 +130,7 @@ public class NodesV2ApiHandler extends ThreadedHttpRequestHandler {
if (path.matches( "/nodes/v2/application")) return applicationList(request.getUri());
if (path.matches( "/nodes/v2/application/{applicationId}")) return application(path.get("applicationId"), request.getUri());
if (path.matches( "/nodes/v2/stats")) return stats();
+ if (path.matches( "/nodes/v2/wireguard")) return new WireguardResponse(nodeRepository);
throw new NotFoundException("Nothing at " + path);
}
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/WireguardResponse.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/WireguardResponse.java
new file mode 100644
index 00000000000..0bac6f09029
--- /dev/null
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/WireguardResponse.java
@@ -0,0 +1,36 @@
+package com.yahoo.vespa.hosted.provision.restapi;
+
+import com.yahoo.config.provision.NodeType;
+import com.yahoo.restapi.SlimeJsonResponse;
+import com.yahoo.slime.Cursor;
+import com.yahoo.vespa.hosted.provision.Node;
+import com.yahoo.vespa.hosted.provision.NodeList;
+import com.yahoo.vespa.hosted.provision.NodeRepository;
+
+/**
+ * @author gjoranv
+ */
+public class WireguardResponse extends SlimeJsonResponse {
+
+ public WireguardResponse(NodeRepository nodeRepository) {
+ Cursor root = slime.setObject();
+ Cursor cfgArray = root.setArray("configservers");
+
+ NodeList configservers = nodeRepository.nodes()
+ .list(Node.State.active)
+ .nodeType(NodeType.config);
+
+ configservers.forEach(
+ configserver -> addConfigserver(cfgArray.addObject(), configserver));
+ }
+
+ private void addConfigserver(Cursor cfgEntry, Node configserver) {
+ cfgEntry.setString("hostname", configserver.hostname());
+
+ configserver.wireguardPubKey().ifPresent(
+ key -> cfgEntry.setString("wireguardPubkey", key.value()));
+
+ NodesResponse.ipAddressesToSlime(configserver.ipConfig().primary(), cfgEntry.setArray("ipAddresses"));
+ }
+
+}
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 7758305deee..1d7b7ec7454 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
@@ -65,6 +65,7 @@ public class NodesV2ApiTest {
assertFile(new Request("http://localhost:8080/nodes/v2/node/host2.yahoo.com"), "node2.json");
assertFile(new Request("http://localhost:8080/nodes/v2/stats"), "stats.json");
assertFile(new Request("http://localhost:8080/nodes/v2/maintenance/"), "maintenance.json");
+ assertFile(new Request("http://localhost:8080/nodes/v2/wireguard/"), "wireguard.json");
// GET with filters
assertFile(new Request("http://localhost:8080/nodes/v2/node/?recursive=true&hostname=host6.yahoo.com%20host2.yahoo.com"), "application2-nodes.json");
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/root.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/root.json
index 201cc47d66e..a41fa72f2e0 100644
--- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/root.json
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/root.json
@@ -32,6 +32,8 @@
},
{
"url":"http://localhost:8080/nodes/v2/stats/"
- }
- ]
+ },
+ {
+ "url":"http://localhost:8080/nodes/v2/wireguard/"
+ } ]
} \ No newline at end of file
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/wireguard.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/wireguard.json
new file mode 100644
index 00000000000..bc6c9301da8
--- /dev/null
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/wireguard.json
@@ -0,0 +1,12 @@
+{
+ "configservers":
+ [
+ {
+ "hostname":"cfg1.yahoo.com",
+ "ipAddresses":["127.0.201.1","::201:1"]},
+ {
+ "hostname":"cfg2.yahoo.com",
+ "ipAddresses":["127.0.202.1","::202:1"]
+ }
+ ]
+}