summaryrefslogtreecommitdiffstats
path: root/controller-api
diff options
context:
space:
mode:
authorOla Aunrønning <olaa@verizonmedia.com>2019-11-18 10:48:21 +0100
committerGitHub <noreply@github.com>2019-11-18 10:48:21 +0100
commitfc1f3704120dc6fc67d1c4ff27a3405df2b2958a (patch)
tree0f8f7e12d498c96fd7be796f1bd953303beb3c52 /controller-api
parente272373ca469f44f20f70827f6d6bb13ddd87e27 (diff)
parentda978ae5a7ae163f33dd604831dded50cb1c6ee3 (diff)
Merge pull request #11304 from vespa-engine/olaa/tagging-maintainer
Created maintainer for resource tagging
Diffstat (limited to 'controller-api')
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/ServiceRegistry.java3
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/aws/MockResourceTagger.java28
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/aws/ResourceTagger.java28
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/Node.java12
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java5
5 files changed, 72 insertions, 4 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/ServiceRegistry.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/ServiceRegistry.java
index 4eb4f669225..6ca5cae0455 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/ServiceRegistry.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/ServiceRegistry.java
@@ -2,6 +2,7 @@
package com.yahoo.vespa.hosted.controller.api.integration;
import com.yahoo.vespa.hosted.controller.api.integration.aws.AwsEventFetcher;
+import com.yahoo.vespa.hosted.controller.api.integration.aws.ResourceTagger;
import com.yahoo.vespa.hosted.controller.api.integration.certificates.ApplicationCertificateProvider;
import com.yahoo.vespa.hosted.controller.api.integration.configserver.ConfigServer;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.ApplicationStore;
@@ -77,4 +78,6 @@ public interface ServiceRegistry {
ZoneRegistry zoneRegistry();
+ ResourceTagger resourceTagger();
+
}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/aws/MockResourceTagger.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/aws/MockResourceTagger.java
new file mode 100644
index 00000000000..0fd114095d7
--- /dev/null
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/aws/MockResourceTagger.java
@@ -0,0 +1,28 @@
+// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.hosted.controller.api.integration.aws;
+
+import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.config.provision.HostName;
+import com.yahoo.config.provision.zone.ZoneApi;
+import com.yahoo.config.provision.zone.ZoneId;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author olaa
+ */
+public class MockResourceTagger implements ResourceTagger {
+
+ Map<ZoneId, Map<HostName, ApplicationId>> values = new HashMap<>();
+
+ @Override
+ public int tagResources(ZoneApi zone, Map<HostName, ApplicationId> tenantOfHosts) {
+ values.put(zone.getId(), tenantOfHosts);
+ return 0;
+ }
+
+ public Map<ZoneId, Map<HostName, ApplicationId>> getValues() {
+ return values;
+ }
+}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/aws/ResourceTagger.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/aws/ResourceTagger.java
new file mode 100644
index 00000000000..9d0e6481d38
--- /dev/null
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/aws/ResourceTagger.java
@@ -0,0 +1,28 @@
+// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.hosted.controller.api.integration.aws;
+
+import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.config.provision.HostName;
+import com.yahoo.config.provision.zone.ZoneApi;
+
+import java.util.Map;
+
+/**
+ * @author olaa
+ */
+public interface ResourceTagger {
+
+ /**
+ * Returns number of tagged resources
+ */
+ int tagResources(ZoneApi zone, Map<HostName, ApplicationId> tenantOfHosts);
+
+ static ResourceTagger empty() {
+ return new ResourceTagger() {
+ @Override
+ public int tagResources(ZoneApi zone, Map<HostName, ApplicationId> tenantOfHosts) {
+ return 0;
+ }
+ };
+ }
+}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/Node.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/Node.java
index 4ffe221b555..e8ae7c181d8 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/Node.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/Node.java
@@ -19,6 +19,7 @@ import java.util.Optional;
public class Node {
private final HostName hostname;
+ private final Optional<HostName> parentHostname;
private final State state;
private final NodeType type;
private final Optional<ApplicationId> owner;
@@ -41,11 +42,12 @@ public class Node {
private final String clusterId;
private final ClusterType clusterType;
- public Node(HostName hostname, State state, NodeType type, Optional<ApplicationId> owner,
+ public Node(HostName hostname, Optional<HostName> parentHostname, State state, NodeType type, Optional<ApplicationId> owner,
Version currentVersion, Version wantedVersion, Version currentOsVersion, Version wantedOsVersion, ServiceState serviceState,
long restartGeneration, long wantedRestartGeneration, long rebootGeneration, long wantedRebootGeneration,
double vcpu, double memoryGb, double diskGb, double bandwidthGbps, boolean fastDisk, int cost, String canonicalFlavor, String clusterId, ClusterType clusterType) {
this.hostname = hostname;
+ this.parentHostname = parentHostname;
this.state = state;
this.type = type;
this.owner = owner;
@@ -70,9 +72,9 @@ public class Node {
}
@TestOnly
- public Node(HostName hostname, State state, NodeType type, Optional<ApplicationId> owner,
+ public Node(HostName hostname, Optional<HostName> parentHostname, State state, NodeType type, Optional<ApplicationId> owner,
Version currentVersion, Version wantedVersion) {
- this(hostname, state, type, owner, currentVersion, wantedVersion,
+ this(hostname, parentHostname, state, type, owner, currentVersion, wantedVersion,
Version.emptyVersion, Version.emptyVersion, ServiceState.unorchestrated, 0, 0, 0, 0,
2, 8, 50, 1, true, 0, "d-2-8-50", "cluster", ClusterType.container);
}
@@ -81,6 +83,10 @@ public class Node {
return hostname;
}
+ public Optional<HostName> parentHostname() {
+ return parentHostname;
+ }
+
public State state() { return state; }
public NodeType type() {
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java
index b36eba7d063..2dcbf4ca930 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/NodeRepository.java
@@ -3,6 +3,7 @@ package com.yahoo.vespa.hosted.controller.api.integration.configserver;
import com.yahoo.component.Version;
import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.config.provision.HostName;
import com.yahoo.config.provision.NodeType;
import com.yahoo.config.provision.zone.ZoneId;
import com.yahoo.vespa.hosted.controller.api.integration.noderepository.NodeList;
@@ -75,7 +76,9 @@ public interface NodeRepository {
var application = Optional.ofNullable(node.getOwner())
.map(owner -> ApplicationId.from(owner.getTenant(), owner.getApplication(),
owner.getInstance()));
- return new Node(com.yahoo.config.provision.HostName.from(node.getHostname()),
+ var parentHostname = Optional.ofNullable(node.getParentHostname()).map(HostName::from);
+ return new Node(HostName.from(node.getHostname()),
+ parentHostname,
fromJacksonState(node.getState()),
fromJacksonType(node.getType()),
application,