summaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorValerij Fredriksen <valerij92@gmail.com>2020-06-01 19:45:51 +0200
committerValerij Fredriksen <valerij92@gmail.com>2020-06-01 19:45:51 +0200
commitf3502c34efdfb318556ebf688c2bd86d8b71b602 (patch)
tree7f72ccf32dacbb0beda6a9017ca22d01f0fa93bf /node-repository
parent42508c8fd230926f345f0561a4384210b17d4695 (diff)
Exclude deprovisioned nodes by default
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/StateFilter.java16
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/restapi/NodesV2ApiHandler.java2
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/testutils/MockNodeRepository.java5
-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/dockerhost6.json48
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/nodes-recursive-include-deprovisioned.json24
6 files changed, 89 insertions, 7 deletions
diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/StateFilter.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/StateFilter.java
index 5778800d02c..a2590e8c727 100644
--- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/StateFilter.java
+++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/filter/StateFilter.java
@@ -1,11 +1,10 @@
// 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.node.filter;
-import com.google.common.collect.ImmutableSet;
import com.yahoo.text.StringUtilities;
import com.yahoo.vespa.hosted.provision.Node;
-import java.util.Collections;
+import java.util.EnumSet;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
@@ -23,22 +22,27 @@ public class StateFilter extends NodeFilter {
private StateFilter(Set<Node.State> states, NodeFilter next) {
super(next);
Objects.requireNonNull(states, "state cannot be null, use an empty set");
- this.states = ImmutableSet.copyOf(states);
+ this.states = EnumSet.copyOf(states);
}
@Override
public boolean matches(Node node) {
- if ( ! states.isEmpty() && ! states.contains(node.state())) return false;
+ if ( ! states.contains(node.state())) return false;
return nextMatches(node);
}
/** Returns a copy of the given filter which only matches for the given state */
public static StateFilter from(Node.State state, NodeFilter filter) {
- return new StateFilter(Collections.singleton(state), filter);
+ return new StateFilter(EnumSet.of(state), filter);
}
/** Returns a node filter which matches a comma or space-separated list of states */
- public static StateFilter from(String states, NodeFilter next) {
+ public static StateFilter from(String states, boolean includeDeprovisioned, NodeFilter next) {
+ if (states == null) {
+ return new StateFilter(includeDeprovisioned ?
+ EnumSet.allOf(Node.State.class) : EnumSet.complementOf(EnumSet.of(Node.State.deprovisioned)), next);
+ }
+
return new StateFilter(StringUtilities.split(states).stream().map(Node.State::valueOf).collect(Collectors.toSet()), next);
}
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 3e6bc4e96e5..80136de6f03 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
@@ -322,7 +322,7 @@ public class NodesV2ApiHandler extends LoggingRequestHandler {
request.getProperty("clusterType"),
request.getProperty("clusterId")));
filter = ApplicationFilter.from(request.getProperty("application"), filter);
- filter = StateFilter.from(request.getProperty("state"), filter);
+ filter = StateFilter.from(request.getProperty("state"), request.getBooleanProperty("includeDeprovisioned"), filter);
filter = NodeTypeFilter.from(request.getProperty("type"), filter);
filter = ParentHostFilter.from(request.getProperty("parentHost"), filter);
filter = NodeOsVersionFilter.from(request.getProperty("osVersion"), filter);
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 8e5cb9d088c..94b97d91312 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
@@ -130,6 +130,8 @@ public class MockNodeRepository extends NodeRepository {
flavors.getFlavorOrThrow("large"), Optional.empty(), NodeType.host));
nodes.add(createNode("dockerhost5", "dockerhost5.yahoo.com", ipConfig(104, 1, 3), Optional.empty(),
flavors.getFlavorOrThrow("large"), Optional.empty(), NodeType.host));
+ nodes.add(createNode("dockerhost6", "dockerhost6.yahoo.com", ipConfig(105, 1, 3), Optional.empty(),
+ flavors.getFlavorOrThrow("large"), Optional.empty(), NodeType.host));
// Config servers
nodes.add(createNode("cfg1", "cfg1.yahoo.com", ipConfig(201), Optional.empty(),
@@ -147,6 +149,9 @@ public class MockNodeRepository extends NodeRepository {
fail(node5.hostname(), Agent.system, getClass().getSimpleName());
dirtyRecursively(node55.hostname(), Agent.system, getClass().getSimpleName());
+ fail("dockerhost6.yahoo.com", Agent.operator, getClass().getSimpleName());
+ removeRecursively("dockerhost6.yahoo.com");
+
ApplicationId zoneApp = ApplicationId.from(TenantName.from("zoneapp"), ApplicationName.from("zoneapp"), InstanceName.from("zoneapp"));
ClusterSpec zoneCluster = ClusterSpec.request(ClusterSpec.Type.container, ClusterSpec.Id.from("node-admin")).vespaVersion("6.42").build();
activate(provisioner.prepare(zoneApp, zoneCluster, Capacity.fromRequiredNodeType(NodeType.host), null), zoneApp, provisioner);
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 fee2958b124..29dac58e10c 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
@@ -56,6 +56,7 @@ public class NodesV2ApiTest {
assertFile(new Request("http://localhost:8080/nodes/v2/state/active?recursive=true"), "active-nodes.json");
assertFile(new Request("http://localhost:8080/nodes/v2/node/"), "nodes.json");
assertFile(new Request("http://localhost:8080/nodes/v2/node/?recursive=true"), "nodes-recursive.json");
+ assertFile(new Request("http://localhost:8080/nodes/v2/node/?recursive=true&includeDeprovisioned=true"), "nodes-recursive-include-deprovisioned.json");
assertFile(new Request("http://localhost:8080/nodes/v2/node/host2.yahoo.com"), "node2.json");
// GET with filters
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/dockerhost6.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/dockerhost6.json
new file mode 100644
index 00000000000..8d437b3e47c
--- /dev/null
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/dockerhost6.json
@@ -0,0 +1,48 @@
+{
+ "url": "http://localhost:8080/nodes/v2/node/dockerhost6.yahoo.com",
+ "id": "dockerhost6.yahoo.com",
+ "state": "deprovisioned",
+ "type": "host",
+ "hostname": "dockerhost6.yahoo.com",
+ "openStackId": "dockerhost6",
+ "flavor": "large",
+ "cpuCores": 4.0,
+ "resources": {
+ "vcpu": 4.0,
+ "memoryGb": 32.0,
+ "diskGb": 1600.0,
+ "bandwidthGbps": 20.0,
+ "diskSpeed": "fast",
+ "storageType": "remote"
+ },
+ "environment": "BARE_METAL",
+ "rebootGeneration": 0,
+ "currentRebootGeneration": 0,
+ "failCount": 1,
+ "wantToRetire": false,
+ "wantToDeprovision": false,
+ "history": [
+ {
+ "event": "provisioned",
+ "at": 123,
+ "agent": "system"
+ },
+ {
+ "event": "readied",
+ "at": 123,
+ "agent": "system"
+ },
+ {
+ "event": "failed",
+ "at": 123,
+ "agent": "operator"
+ },
+ {
+ "event": "deprovisioned",
+ "at": 123,
+ "agent": "system"
+ }
+ ],
+ "ipAddresses": [],
+ "additionalIpAddresses": []
+}
diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/nodes-recursive-include-deprovisioned.json b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/nodes-recursive-include-deprovisioned.json
new file mode 100644
index 00000000000..2b650bad39b
--- /dev/null
+++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/restapi/responses/nodes-recursive-include-deprovisioned.json
@@ -0,0 +1,24 @@
+{
+ "nodes": [
+ @include(node7.json),
+ @include(cfg1.json),
+ @include(node3.json),
+ @include(cfg2.json),
+ @include(node10.json),
+ @include(docker-node3.json),
+ @include(node14.json),
+ @include(node4.json),
+ @include(docker-node4.json),
+ @include(node6.json),
+ @include(docker-container1.json),
+ @include(docker-node5.json),
+ @include(docker-node2.json),
+ @include(node13.json),
+ @include(node2.json),
+ @include(docker-node1.json),
+ @include(node1.json),
+ @include(node55.json),
+ @include(node5.json),
+ @include(dockerhost6.json)
+ ]
+}