aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2019-09-28 20:04:38 +0200
committerJon Marius Venstad <venstad@gmail.com>2019-09-28 20:04:38 +0200
commit38d2faedae48ec68f25fe55a88d0f80b923fbe89 (patch)
tree345f251cbe9866961de489f918df711af3f76c64
parent1091542c58fd3d8a0b19a8925e15bb4752fb5fcb (diff)
Expose application id through an interface
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/ApplicationIdSource.java16
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java3
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java38
3 files changed, 37 insertions, 20 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/ApplicationIdSource.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/ApplicationIdSource.java
new file mode 100644
index 00000000000..0562ec91fb1
--- /dev/null
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/ApplicationIdSource.java
@@ -0,0 +1,16 @@
+package com.yahoo.vespa.hosted.controller.api.integration;
+
+import com.yahoo.config.provision.ApplicationId;
+import com.yahoo.config.provision.TenantName;
+
+import java.util.List;
+
+public interface ApplicationIdSource {
+
+ /** Returns a list of all known application instance IDs. */
+ List<ApplicationId> listApplications();
+
+ /** Returns a list of all known application instance IDs for the given tenant. */
+ List<ApplicationId> listApplications(TenantName tenant);
+
+}
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java
index ab0a110be29..164923d1b49 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java
@@ -9,10 +9,8 @@ import com.yahoo.config.application.api.ValidationOverrides;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.ApplicationName;
import com.yahoo.config.provision.ClusterSpec;
-import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.InstanceName;
import com.yahoo.config.provision.TenantName;
-import com.yahoo.config.provision.zone.ZoneApi;
import com.yahoo.config.provision.zone.ZoneId;
import com.yahoo.vespa.athenz.api.AthenzDomain;
import com.yahoo.vespa.athenz.api.AthenzIdentity;
@@ -101,7 +99,6 @@ import java.util.stream.Collectors;
import java.util.stream.Stream;
import static com.yahoo.vespa.hosted.controller.api.integration.configserver.Node.State.active;
-import static com.yahoo.vespa.hosted.controller.api.integration.configserver.Node.State.inactive;
import static com.yahoo.vespa.hosted.controller.api.integration.configserver.Node.State.reserved;
import static java.util.Comparator.naturalOrder;
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java
index 8ed94d2ead5..786eccc2e24 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java
@@ -5,12 +5,15 @@ import com.google.inject.Inject;
import com.yahoo.component.AbstractComponent;
import com.yahoo.component.Version;
import com.yahoo.component.Vtag;
+import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.CloudName;
import com.yahoo.config.provision.HostName;
import com.yahoo.config.provision.SystemName;
+import com.yahoo.config.provision.TenantName;
import com.yahoo.config.provision.zone.ZoneApi;
import com.yahoo.vespa.curator.Lock;
import com.yahoo.vespa.flags.FlagSource;
+import com.yahoo.vespa.hosted.controller.api.integration.ApplicationIdSource;
import com.yahoo.vespa.hosted.controller.api.integration.ServiceRegistry;
import com.yahoo.vespa.hosted.controller.api.integration.maven.MavenRepository;
import com.yahoo.vespa.hosted.controller.api.integration.user.Roles;
@@ -34,6 +37,7 @@ import com.yahoo.vespa.serviceview.bindings.ApplicationView;
import java.time.Clock;
import java.util.LinkedHashMap;
+import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
@@ -56,7 +60,7 @@ import java.util.stream.Stream;
*
* @author bratseth
*/
-public class Controller extends AbstractComponent {
+public class Controller extends AbstractComponent implements ApplicationIdSource {
private static final Logger log = Logger.getLogger(Controller.class.getName());
@@ -271,22 +275,6 @@ public class Controller extends AbstractComponent {
return auditLogger;
}
- /** Returns all other roles the given tenant role implies. */
- public Set<Role> impliedRoles(TenantRole role) {
- return Stream.concat(Roles.tenantRoles(role.tenant()).stream(),
- applications().asList(role.tenant()).stream()
- .flatMap(application -> Roles.applicationRoles(application.id().tenant(), application.id().application()).stream()))
- .filter(role::implies)
- .collect(Collectors.toUnmodifiableSet());
- }
-
- /** Returns all other roles the given application role implies. */
- public Set<Role> impliedRoles(ApplicationRole role) {
- return Roles.applicationRoles(role.tenant(), role.application()).stream()
- .filter(role::implies)
- .collect(Collectors.toUnmodifiableSet());
- }
-
private Set<CloudName> clouds() {
return zoneRegistry.zones().all().zones().stream()
.map(ZoneApi::getCloudName)
@@ -297,4 +285,20 @@ public class Controller extends AbstractComponent {
return vespaVersion.map(v -> v.versionNumber().toFullString()).orElse("unknown");
}
+ @Override
+ public List<ApplicationId> listApplications() {
+ return applications().asList().stream()
+ .flatMap(application -> application.instances().keySet().stream()
+ .map(application.id()::instance))
+ .collect(Collectors.toUnmodifiableList());
+ }
+
+ @Override
+ public List<ApplicationId> listApplications(TenantName tenant) {
+ return applications().asList(tenant).stream()
+ .flatMap(application -> application.instances().keySet().stream()
+ .map(application.id()::instance))
+ .collect(Collectors.toUnmodifiableList());
+ }
+
}