From a078c9d8d365682639477c6d499a48fe12b56ecd Mon Sep 17 00:00:00 2001 From: Ola Aunrønning Date: Thu, 14 Nov 2019 12:25:37 +0100 Subject: Created maintainer for resource tagging --- .../api/integration/ServiceRegistry.java | 3 +++ .../api/integration/aws/MockResourceTagger.java | 28 ++++++++++++++++++++++ .../api/integration/aws/ResourceTagger.java | 28 ++++++++++++++++++++++ .../api/integration/configserver/Node.java | 12 +++++++--- .../integration/configserver/NodeRepository.java | 5 +++- 5 files changed, 72 insertions(+), 4 deletions(-) create mode 100644 controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/aws/MockResourceTagger.java create mode 100644 controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/aws/ResourceTagger.java (limited to 'controller-api') 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..6992e813b10 --- /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.HostName; +import com.yahoo.config.provision.TenantName; +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> values = new HashMap<>(); + + @Override + public int tagResources(ZoneApi zone, Map tenantOfHosts) { + values.put(zone.getId(), tenantOfHosts); + return 0; + } + + public Map> 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..46561ccf401 --- /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.HostName; +import com.yahoo.config.provision.TenantName; +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 tenantOfHosts); + + static ResourceTagger empty() { + return new ResourceTagger() { + @Override + public int tagResources(ZoneApi zone, Map 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 parentHostname; private final State state; private final NodeType type; private final Optional 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 owner, + public Node(HostName hostname, Optional parentHostname, State state, NodeType type, Optional 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 owner, + public Node(HostName hostname, Optional parentHostname, State state, NodeType type, Optional 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 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, -- cgit v1.2.3