summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorØyvind Grønnesby <oyving@verizonmedia.com>2021-03-22 15:59:13 +0100
committerØyvind Grønnesby <oyving@verizonmedia.com>2021-03-22 15:59:13 +0100
commit59de4d9a97374ee0d5271c612fb5d707c0078291 (patch)
tree7c00b9697891a08cf98f049ce2cd1cc685dece6c /controller-server
parent24977c3bf922cb70d8638ad2890075169954c987 (diff)
Add method to require tenant with type
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/TenantController.java11
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java16
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiCloudTest.java4
3 files changed, 19 insertions, 12 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/TenantController.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/TenantController.java
index d3992290f20..958d8c08101 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/TenantController.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/TenantController.java
@@ -98,6 +98,17 @@ public class TenantController {
return get(name).orElseThrow(() -> new IllegalArgumentException("No such tenant '" + name + "'."));
}
+ /** Returns the tenant with the given name, and ensures the type */
+ public <T extends Tenant> T require(TenantName name, Class<T> tenantType) {
+ return get(name)
+ .map(t -> {
+ try { return tenantType.cast(t); } catch (ClassCastException e) {
+ throw new IllegalArgumentException("Tenant '" + name + "' was of type '" + t.getClass().getSimpleName() + "' and not '" + tenantType.getSimpleName() + "'");
+ }
+ })
+ .orElseThrow(() -> new IllegalArgumentException("No such tenant '" + name + "'."));
+ }
+
/** Replace and store any previous version of given tenant */
public void store(LockedTenant tenant) {
curator.writeTenant(tenant.get());
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 ca080078328..9420dee3ed4 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
@@ -589,17 +589,13 @@ public class ApplicationApiHandler extends LoggingRequestHandler {
}
private HttpResponse validateSecretStore(String tenantName, String secretStoreName, HttpRequest request) {
-
var awsRegion = request.getProperty("aws-region");
var parameterName = request.getProperty("parameter-name");
var applicationId = ApplicationId.fromFullString(request.getProperty("application-id"));
var zoneId = ZoneId.from(request.getProperty("zone"));
var deploymentId = new DeploymentId(applicationId, zoneId);
- var tenant = (CloudTenant)controller.tenants().require(applicationId.tenant());
- if (tenant.type() != Tenant.Type.cloud) {
- return ErrorResponse.badRequest("Tenant '" + applicationId.tenant() + "' is not a cloud tenant");
- }
+ var tenant = controller.tenants().require(applicationId.tenant(), CloudTenant.class);
var tenantSecretStore = tenant.tenantSecretStores()
.stream()
@@ -629,7 +625,7 @@ public class ApplicationApiHandler extends LoggingRequestHandler {
String pemDeveloperKey = toSlime(request.getData()).get().field("key").asString();
PublicKey developerKey = KeyUtils.fromPemEncodedPublicKey(pemDeveloperKey);
- Principal user = ((CloudTenant) controller.tenants().require(TenantName.from(tenantName))).developerKeys().get(developerKey);
+ Principal user = controller.tenants().require(TenantName.from(tenantName), CloudTenant.class).developerKeys().get(developerKey);
Slime root = new Slime();
controller.tenants().lockOrThrow(TenantName.from(tenantName), LockedTenant.Cloud.class, tenant -> {
tenant = tenant.withoutDeveloperKey(developerKey);
@@ -684,7 +680,7 @@ public class ApplicationApiHandler extends LoggingRequestHandler {
var externalId = mandatory("externalId", data).asString();
var role = mandatory("role", data).asString();
- var tenant = (CloudTenant) controller.tenants().require(TenantName.from(tenantName));
+ var tenant = controller.tenants().require(TenantName.from(tenantName), CloudTenant.class);
var tenantSecretStore = new TenantSecretStore(name, awsId, role);
if (!tenantSecretStore.isValid()) {
@@ -702,14 +698,14 @@ public class ApplicationApiHandler extends LoggingRequestHandler {
controller.tenants().store(lockedTenant);
});
- tenant = (CloudTenant) controller.tenants().require(TenantName.from(tenantName));
+ tenant = controller.tenants().require(TenantName.from(tenantName), CloudTenant.class);
var slime = new Slime();
toSlime(slime.setObject(), tenant.tenantSecretStores());
return new SlimeJsonResponse(slime);
}
private HttpResponse deleteSecretStore(String tenantName, String name, HttpRequest request) {
- var tenant = (CloudTenant) controller.tenants().require(TenantName.from(tenantName));
+ var tenant = controller.tenants().require(TenantName.from(tenantName), CloudTenant.class);
var optionalSecretStore = tenant.tenantSecretStores().stream()
.filter(secretStore -> secretStore.getName().equals(name))
@@ -726,7 +722,7 @@ public class ApplicationApiHandler extends LoggingRequestHandler {
controller.tenants().store(lockedTenant);
});
- tenant = (CloudTenant) controller.tenants().require(TenantName.from(tenantName));
+ tenant = controller.tenants().require(TenantName.from(tenantName), CloudTenant.class);
var slime = new Slime();
toSlime(slime.setObject(), tenant.tenantSecretStores());
return new SlimeJsonResponse(slime);
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiCloudTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiCloudTest.java
index 4fb91639daa..4e3b570f4c5 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiCloudTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiCloudTest.java
@@ -190,10 +190,10 @@ public class ApplicationApiCloudTest extends ControllerContainerCloudTest {
lockedTenant = lockedTenant.withSecretStore(new TenantSecretStore("secret-foo", "123", "some-role"));
tester.controller().tenants().store(lockedTenant);
});
- var tenant = (CloudTenant) tester.controller().tenants().require(tenantName);
+ var tenant = tester.controller().tenants().require(tenantName, CloudTenant.class);
assertEquals(1, tenant.tenantSecretStores().size());
tester.assertResponse(deleteRequest, "{\"secretStores\":[]}", 200);
- tenant = (CloudTenant) tester.controller().tenants().require(tenantName);
+ tenant = tester.controller().tenants().require(tenantName, CloudTenant.class);
assertEquals(0, tenant.tenantSecretStores().size());
}