summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorJon Marius Venstad <jvenstad@yahoo-inc.com>2019-03-27 15:45:38 +0100
committerJon Marius Venstad <jvenstad@yahoo-inc.com>2019-03-28 10:25:42 +0100
commitfa035263c887e1f7420662d59b42c670c82bfc42 (patch)
tree28ee9a6c8c525f3677194a4b9f3c3cdf21e072e5 /controller-server
parentb8c9442eaec0f62c3b5ea67cdbf188b5a50b8221 (diff)
Move OpsDB property listing to athenz API (I know, I know ...)
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java20
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java17
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/athenz/AthenzApiHandler.java21
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/role/PathGroup.java8
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java15
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java3
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/root.json3
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/athenz/AthenzApiTest.java (renamed from controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/AthenzApiTest.java)11
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/athenz/responses/athensDomain-list.json (renamed from controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/athensDomain-list.json)0
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/athenz/responses/property-list.json (renamed from controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/property-list.json)0
10 files changed, 41 insertions, 57 deletions
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 e81c4d165f1..6e59c384485 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
@@ -20,7 +20,6 @@ import com.yahoo.vespa.hosted.controller.api.integration.deployment.ApplicationS
import com.yahoo.vespa.hosted.controller.api.integration.deployment.ArtifactRepository;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.TesterCloud;
import com.yahoo.vespa.hosted.controller.api.integration.dns.NameService;
-import com.yahoo.vespa.hosted.controller.api.integration.entity.EntityService;
import com.yahoo.vespa.hosted.controller.api.integration.github.GitHub;
import com.yahoo.vespa.hosted.controller.api.integration.organization.Mailer;
import com.yahoo.vespa.hosted.controller.api.integration.routing.RoutingGenerator;
@@ -71,7 +70,6 @@ public class Controller extends AbstractComponent {
private final JobController jobController;
private final Clock clock;
private final GitHub gitHub;
- private final EntityService entityService;
private final ZoneRegistry zoneRegistry;
private final ConfigServer configServer;
private final MetricsService metricsService;
@@ -85,21 +83,19 @@ public class Controller extends AbstractComponent {
* @param curator the curator instance storing the persistent state of the controller.
*/
@Inject
- public Controller(CuratorDb curator, RotationsConfig rotationsConfig, GitHub gitHub, EntityService entityService,
+ public Controller(CuratorDb curator, RotationsConfig rotationsConfig, GitHub gitHub,
ZoneRegistry zoneRegistry, ConfigServer configServer, MetricsService metricsService,
NameService nameService, RoutingGenerator routingGenerator, Chef chef,
AccessControl accessControl,
ArtifactRepository artifactRepository, ApplicationStore applicationStore, TesterCloud testerCloud,
BuildService buildService, RunDataStore runDataStore, Mailer mailer) {
- this(curator, rotationsConfig,
- gitHub, entityService, zoneRegistry,
+ this(curator, rotationsConfig, gitHub, zoneRegistry,
configServer, metricsService, nameService, routingGenerator, chef,
Clock.systemUTC(), accessControl, artifactRepository, applicationStore, testerCloud,
buildService, runDataStore, com.yahoo.net.HostName::getLocalhost, mailer);
}
- public Controller(CuratorDb curator, RotationsConfig rotationsConfig,
- GitHub gitHub, EntityService entityService,
+ public Controller(CuratorDb curator, RotationsConfig rotationsConfig, GitHub gitHub,
ZoneRegistry zoneRegistry, ConfigServer configServer,
MetricsService metricsService, NameService nameService,
RoutingGenerator routingGenerator, Chef chef, Clock clock,
@@ -111,7 +107,6 @@ public class Controller extends AbstractComponent {
this.hostnameSupplier = Objects.requireNonNull(hostnameSupplier, "HostnameSupplier cannot be null");
this.curator = Objects.requireNonNull(curator, "Curator cannot be null");
this.gitHub = Objects.requireNonNull(gitHub, "GitHub cannot be null");
- this.entityService = Objects.requireNonNull(entityService, "EntityService cannot be null");
this.zoneRegistry = Objects.requireNonNull(zoneRegistry, "ZoneRegistry cannot be null");
this.configServer = Objects.requireNonNull(configServer, "ConfigServer cannot be null");
this.metricsService = Objects.requireNonNull(metricsService, "MetricsService cannot be null");
@@ -151,15 +146,6 @@ public class Controller extends AbstractComponent {
return mailer;
}
- /**
- * Fetch list of all active OpsDB properties.
- *
- * @return Hashed map with the property ID as key and property name as value
- */
- public Map<PropertyId, Property> fetchPropertyList() {
- return entityService.listProperties();
- }
-
public Clock clock() { return clock; }
public ZoneRegistry zoneRegistry() { return zoneRegistry; }
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
index d4ef127348a..69a4216d221 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
@@ -40,8 +40,6 @@ import com.yahoo.vespa.hosted.controller.api.application.v4.model.configserverbi
import com.yahoo.vespa.hosted.controller.api.application.v4.model.configserverbindings.ServiceInfo;
import com.yahoo.vespa.hosted.controller.api.identifiers.DeploymentId;
import com.yahoo.vespa.hosted.controller.api.identifiers.Hostname;
-import com.yahoo.vespa.hosted.controller.api.identifiers.Property;
-import com.yahoo.vespa.hosted.controller.api.identifiers.PropertyId;
import com.yahoo.vespa.hosted.controller.api.identifiers.TenantId;
import com.yahoo.vespa.hosted.controller.api.integration.configserver.ConfigServerException;
import com.yahoo.vespa.hosted.controller.api.integration.configserver.Log;
@@ -168,7 +166,6 @@ public class ApplicationApiHandler extends LoggingRequestHandler {
if (path.matches("/application/v4/")) return root(request);
if (path.matches("/application/v4/user")) return authenticatedUser(request);
if (path.matches("/application/v4/tenant")) return tenants(request);
- if (path.matches("/application/v4/property")) return properties();
if (path.matches("/application/v4/tenant/{tenant}")) return tenant(path.get("tenant"), request);
if (path.matches("/application/v4/tenant/{tenant}/application")) return applications(path.get("tenant"), request);
if (path.matches("/application/v4/tenant/{tenant}/application/{application}")) return application(path.get("tenant"), path.get("application"), request);
@@ -255,7 +252,7 @@ public class ApplicationApiHandler extends LoggingRequestHandler {
private HttpResponse root(HttpRequest request) {
return recurseOverTenants(request)
? recursiveRoot(request)
- : new ResourceResponse(request, "user", "tenant", "property");
+ : new ResourceResponse(request, "user", "tenant");
}
private HttpResponse authenticatedUser(HttpRequest request) {
@@ -285,18 +282,6 @@ public class ApplicationApiHandler extends LoggingRequestHandler {
return new SlimeJsonResponse(slime);
}
- private HttpResponse properties() {
- Slime slime = new Slime();
- Cursor response = slime.setObject();
- Cursor array = response.setArray("properties");
- for (Map.Entry<PropertyId, Property> entry : controller.fetchPropertyList().entrySet()) {
- Cursor propertyObject = array.addObject();
- propertyObject.setString("propertyid", entry.getKey().id());
- propertyObject.setString("property", entry.getValue().id());
- }
- return new SlimeJsonResponse(slime);
- }
-
private HttpResponse tenant(String tenantName, HttpRequest request) {
return controller.tenants().get(TenantName.from(tenantName))
.map(tenant -> tenant(tenant, request))
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/athenz/AthenzApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/athenz/AthenzApiHandler.java
index 937594bd905..40619ca85c2 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/athenz/AthenzApiHandler.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/athenz/AthenzApiHandler.java
@@ -9,11 +9,15 @@ import com.yahoo.restapi.Path;
import com.yahoo.slime.Cursor;
import com.yahoo.slime.Slime;
import com.yahoo.vespa.athenz.api.AthenzDomain;
+import com.yahoo.vespa.hosted.controller.api.identifiers.Property;
+import com.yahoo.vespa.hosted.controller.api.identifiers.PropertyId;
+import com.yahoo.vespa.hosted.controller.api.integration.entity.EntityService;
import com.yahoo.vespa.hosted.controller.athenz.impl.AthenzFacade;
import com.yahoo.vespa.hosted.controller.restapi.ErrorResponse;
import com.yahoo.vespa.hosted.controller.restapi.SlimeJsonResponse;
import com.yahoo.yolean.Exceptions;
+import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -28,10 +32,12 @@ public class AthenzApiHandler extends LoggingRequestHandler {
private final static Logger log = Logger.getLogger(AthenzApiHandler.class.getName());
private final AthenzFacade athenz;
+ private final EntityService properties;
- public AthenzApiHandler(Context parentCtx, AthenzFacade athenz) {
+ public AthenzApiHandler(Context parentCtx, AthenzFacade athenz, EntityService properties) {
super(parentCtx);
this.athenz = athenz;
+ this.properties = properties;
}
@Override
@@ -55,11 +61,24 @@ public class AthenzApiHandler extends LoggingRequestHandler {
private HttpResponse get(HttpRequest request) {
Path path = new Path(request.getUri().getPath());
if (path.matches("/athenz/v1/domains")) return domainList(request);
+ if (path.matches("/athenz/v1/properties")) return properties();
return ErrorResponse.notFoundError(String.format("No '%s' handler at '%s'", request.getMethod(),
request.getUri().getPath()));
}
+ private HttpResponse properties() {
+ Slime slime = new Slime();
+ Cursor response = slime.setObject();
+ Cursor array = response.setArray("properties");
+ for (Map.Entry<PropertyId, Property> entry : properties.listProperties().entrySet()) {
+ Cursor propertyObject = array.addObject();
+ propertyObject.setString("propertyid", entry.getKey().id());
+ propertyObject.setString("property", entry.getValue().id());
+ }
+ return new SlimeJsonResponse(slime);
+ }
+
private HttpResponse domainList(HttpRequest request) {
Slime slime = new Slime();
Cursor array = slime.setObject().setArray("data");
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/role/PathGroup.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/role/PathGroup.java
index be77c7ed337..3776b1d2a13 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/role/PathGroup.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/role/PathGroup.java
@@ -36,15 +36,15 @@ public enum PathGroup {
/** Read-only paths used when onboarding tenants */
onboardingInfo("/athenz/v1/",
- "/athenz/v1/domains"),
+ "/athenz/v1/domains",
+ "/athenz/v1/properties"),
/** Paths used for user management */
userManagement("/user/v1/{*}"), // TODO probably add tenant and application levels.
/** Paths used by tenant administrators */
- tenantInfo("/application/v4/",
- "/application/v4/property/",
- "/application/v4/tenant/"),
+ tenantInfo("/application/v4/", // TODO move
+ "/application/v4/tenant/"), // TODO move
/** Paths used by tenant administrators */
tenant(Matcher.tenant,
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java
index 2c4043c369c..d7845e4bfa1 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java
@@ -22,7 +22,6 @@ import com.yahoo.vespa.hosted.controller.api.integration.deployment.ApplicationS
import com.yahoo.vespa.hosted.controller.api.integration.deployment.ArtifactRepository;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType;
import com.yahoo.vespa.hosted.controller.api.integration.dns.MemoryNameService;
-import com.yahoo.vespa.hosted.controller.api.integration.entity.EntityService;
import com.yahoo.vespa.hosted.controller.api.integration.entity.MemoryEntityService;
import com.yahoo.vespa.hosted.controller.api.integration.github.GitHubMock;
import com.yahoo.vespa.hosted.controller.api.integration.organization.Contact;
@@ -85,7 +84,6 @@ public final class ControllerTester {
private final RotationsConfig rotationsConfig;
private final ArtifactRepositoryMock artifactRepository;
private final ApplicationStoreMock applicationStore;
- private final EntityService entityService;
private final MockBuildService buildService;
private final MetricsServiceMock metricsService;
private final RoutingGeneratorMock routingGenerator;
@@ -97,8 +95,7 @@ public final class ControllerTester {
MetricsServiceMock metricsService) {
this(new AthenzDbMock(), clock, new ConfigServerMock(new ZoneRegistryMock()),
new ZoneRegistryMock(), new GitHubMock(), curatorDb, rotationsConfig,
- new MemoryNameService(), new ArtifactRepositoryMock(), new ApplicationStoreMock(),
- new MemoryEntityService(), new MockBuildService(),
+ new MemoryNameService(), new ArtifactRepositoryMock(), new ApplicationStoreMock(), new MockBuildService(),
metricsService, new RoutingGeneratorMock(), new MockContactRetriever(), new MockIssueHandler(clock));
}
@@ -122,8 +119,7 @@ public final class ControllerTester {
ConfigServerMock configServer, ZoneRegistryMock zoneRegistry,
GitHubMock gitHub, CuratorDb curator, RotationsConfig rotationsConfig,
MemoryNameService nameService, ArtifactRepositoryMock artifactRepository,
- ApplicationStoreMock appStoreMock,
- EntityService entityService, MockBuildService buildService,
+ ApplicationStoreMock appStoreMock, MockBuildService buildService,
MetricsServiceMock metricsService, RoutingGeneratorMock routingGenerator,
MockContactRetriever contactRetriever, MockIssueHandler issueHandler) {
this.athenzDb = athenzDb;
@@ -136,13 +132,12 @@ public final class ControllerTester {
this.rotationsConfig = rotationsConfig;
this.artifactRepository = artifactRepository;
this.applicationStore = appStoreMock;
- this.entityService = entityService;
this.buildService = buildService;
this.metricsService = metricsService;
this.routingGenerator = routingGenerator;
this.contactRetriever = contactRetriever;
this.controller = createController(curator, rotationsConfig, configServer, clock, gitHub, zoneRegistry,
- athenzDb, nameService, artifactRepository, appStoreMock, entityService, buildService,
+ athenzDb, nameService, artifactRepository, appStoreMock, buildService,
metricsService, routingGenerator);
// Make root logger use time from manual clock
@@ -196,7 +191,7 @@ public final class ControllerTester {
/** Create a new controller instance. Useful to verify that controller state is rebuilt from persistence */
public final void createNewController() {
controller = createController(curator, rotationsConfig, configServer, clock, gitHub, zoneRegistry, athenzDb,
- nameService, artifactRepository, applicationStore, entityService, buildService, metricsService,
+ nameService, artifactRepository, applicationStore, buildService, metricsService,
routingGenerator);
}
@@ -331,13 +326,11 @@ public final class ControllerTester {
GitHubMock gitHub, ZoneRegistryMock zoneRegistryMock,
AthenzDbMock athensDb, MemoryNameService nameService,
ArtifactRepository artifactRepository, ApplicationStore applicationStore,
- EntityService entityService,
BuildService buildService, MetricsServiceMock metricsService,
RoutingGenerator routingGenerator) {
Controller controller = new Controller(curator,
rotationsConfig,
gitHub,
- entityService,
zoneRegistryMock,
configServer,
metricsService,
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java
index 57a05e602cc..26cf9c3127e 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java
@@ -139,9 +139,6 @@ public class ApplicationApiTest extends ControllerContainerTest {
// GET API root
tester.assertResponse(request("/application/v4/", GET).userIdentity(USER_ID),
new File("root.json"));
- // GET OpsDB properties
- tester.assertResponse(request("/application/v4/property/", GET).userIdentity(USER_ID),
- new File("property-list.json"));
// POST (add) a tenant without property ID
tester.assertResponse(request("/application/v4/tenant/tenant1", POST)
.userIdentity(USER_ID)
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/root.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/root.json
index 38b54dd9efa..986245decca 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/root.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/root.json
@@ -5,9 +5,6 @@
},
{
"url":"http://localhost:8080/application/v4/tenant/"
- },
- {
- "url":"http://localhost:8080/application/v4/property/"
}
]
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/AthenzApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/athenz/AthenzApiTest.java
index fc73590e448..61bcafbf126 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/AthenzApiTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/athenz/AthenzApiTest.java
@@ -1,4 +1,4 @@
-package com.yahoo.vespa.hosted.controller.restapi.application;
+package com.yahoo.vespa.hosted.controller.restapi.athenz;
import com.yahoo.vespa.athenz.api.AthenzDomain;
import com.yahoo.vespa.hosted.controller.athenz.mock.AthenzClientFactoryMock;
@@ -15,7 +15,7 @@ import java.io.File;
*/
public class AthenzApiTest extends ControllerContainerTest {
- private static final String responseFiles = "src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/";
+ private static final String responseFiles = "src/test/java/com/yahoo/vespa/hosted/controller/restapi/athenz/responses/";
@Test
public void testAthenzApi() {
@@ -23,11 +23,18 @@ public class AthenzApiTest extends ControllerContainerTest {
((AthenzClientFactoryMock) tester.container().components().getComponent(AthenzClientFactoryMock.class.getName()))
.getSetup().addDomain(new AthenzDbMock.Domain(new AthenzDomain("domain1")));
+ // GET Athenz domains
tester.assertResponse(authenticatedRequest("http://localhost:8080/athenz/v1/domains"),
new File("athensDomain-list.json"));
+
+ // GET root — nothing set up there
tester.assertResponse(authenticatedRequest("http://localhost:8080/athenz/v1/"),
"{\"error-code\":\"NOT_FOUND\",\"message\":\"No 'GET' handler at '/athenz/v1/'\"}",
404);
+
+ // GET OpsDB properties
+ tester.assertResponse(authenticatedRequest("http://localhost:8080/athenz/v1/properties/"),
+ new File("property-list.json"));
}
}
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/athensDomain-list.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/athenz/responses/athensDomain-list.json
index 3a1cc9c6582..3a1cc9c6582 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/athensDomain-list.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/athenz/responses/athensDomain-list.json
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/property-list.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/athenz/responses/property-list.json
index 596dea037bd..596dea037bd 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/property-list.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/athenz/responses/property-list.json