diff options
Diffstat (limited to 'controller-server/src/main/java/com/yahoo')
2 files changed, 56 insertions, 0 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintenance.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintenance.java index 1743cad32e4..47959abfab4 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintenance.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintenance.java @@ -46,6 +46,7 @@ public class ControllerMaintenance extends AbstractComponent { private final BillingMaintainer billingMaintainer; private final CloudEventReporter cloudEventReporter; private final RotationStatusUpdater rotationStatusUpdater; + private final ResourceTagMaintainer resourceTagMaintainer; @Inject @SuppressWarnings("unused") // instantiated by Dependency Injection @@ -77,6 +78,7 @@ public class ControllerMaintenance extends AbstractComponent { billingMaintainer = new BillingMaintainer(controller, Duration.ofDays(3), jobControl); cloudEventReporter = new CloudEventReporter(controller, Duration.ofDays(1), jobControl); rotationStatusUpdater = new RotationStatusUpdater(controller, maintenanceInterval, jobControl); + resourceTagMaintainer = new ResourceTagMaintainer(controller, Duration.ofMinutes(30), jobControl, controller.serviceRegistry().resourceTagger()); } public Upgrader upgrader() { return upgrader; } @@ -107,6 +109,7 @@ public class ControllerMaintenance extends AbstractComponent { billingMaintainer.deconstruct(); cloudEventReporter.deconstruct(); rotationStatusUpdater.deconstruct(); + resourceTagMaintainer.deconstruct(); } /** Create one OS upgrader per cloud found in the zone registry of controller */ 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() + )); + } +} |