summaryrefslogtreecommitdiffstats
path: root/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceTagMaintainer.java
diff options
context:
space:
mode:
Diffstat (limited to 'controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceTagMaintainer.java')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceTagMaintainer.java53
1 files changed, 53 insertions, 0 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceTagMaintainer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceTagMaintainer.java
new file mode 100644
index 00000000000..44e21b3aed9
--- /dev/null
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceTagMaintainer.java
@@ -0,0 +1,53 @@
+// 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.maintenance;
+
+import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.config.provision.CloudName;
+import com.yahoo.config.provision.HostName;
+import com.yahoo.config.provision.zone.ZoneId;
+import com.yahoo.vespa.hosted.controller.Controller;
+import com.yahoo.vespa.hosted.controller.api.integration.aws.ResourceTagger;
+
+import java.time.Duration;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.stream.Collectors;
+
+/**
+ * @author olaa
+ */
+public class ResourceTagMaintainer extends Maintainer {
+
+ private final ResourceTagger resourceTagger;
+
+ public ResourceTagMaintainer(Controller controller, Duration interval, JobControl jobControl, ResourceTagger resourceTagger) {
+ super(controller, interval, jobControl);
+ this.resourceTagger = resourceTagger;
+ }
+
+ @Override
+ public void maintain() {
+ controller().zoneRegistry().zones()
+ .ofCloud(CloudName.from("aws"))
+ .reachable()
+ .zones().forEach(zone -> {
+ Map<HostName, ApplicationId> applicationOfHosts = getTenantOfParentHosts(zone.getId());
+ int taggedResources = resourceTagger.tagResources(zone, applicationOfHosts);
+ if (taggedResources > 0)
+ log.log(Level.INFO, "Tagged " + taggedResources + " resources in " + zone.getId());
+ });
+
+
+ }
+
+ private Map<HostName, ApplicationId> getTenantOfParentHosts(ZoneId zoneId) {
+ return controller().serviceRegistry().configServer().nodeRepository()
+ .list(zoneId)
+ .stream()
+ .filter(node -> node.parentHostname().isPresent() && node.owner().isPresent())
+ .collect(Collectors.toMap(
+ node -> node.parentHostname().get(),
+ node -> node.owner().get()
+ ));
+ }
+}