diff options
author | Jon Marius Venstad <jvenstad@yahoo-inc.com> | 2019-03-11 12:01:47 +0100 |
---|---|---|
committer | Jon Marius Venstad <jvenstad@yahoo-inc.com> | 2019-03-11 15:24:22 +0100 |
commit | 805ee314489bf7f0e02051f71b58ca9c7e72b609 (patch) | |
tree | deba9388b8955f36853cb2d1ca58b6e2fd1bc47c /controller-server | |
parent | 48ce50681ad29a1a17446dbb1f0413615ca35725 (diff) |
Add CloudTenant and BillingInfo classes
Diffstat (limited to 'controller-server')
4 files changed, 60 insertions, 6 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 78099fac34e..5b3b7351604 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 @@ -96,10 +96,7 @@ public class TenantController { .collect(Collectors.toList()); } - /** - * Lock a tenant for modification and apply action. Only valid for Athenz tenants as it's the only type that - * accepts modification. - */ + /** Locks a tenant for modification and applies the given action. */ public void lockIfPresent(TenantName name, Consumer<LockedTenant> action) { try (Lock lock = lock(name)) { tenant(name).map(tenant -> { diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/tenant/BillingInfo.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/tenant/BillingInfo.java new file mode 100644 index 00000000000..d8fae8bb142 --- /dev/null +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/tenant/BillingInfo.java @@ -0,0 +1,26 @@ +package com.yahoo.vespa.hosted.controller.tenant; + +/** + * Information pertinent to billing a tenant for use of hosted Vespa services. + * + * @author jonmv + */ +public class BillingInfo { + + private final String data; + + /** Creates a new BillingInfo with the given data. */ + public BillingInfo(String data) { + this.data = requireValid(data); + } + + /** Returns the data stored in this. */ + public String data() { return data; } + + static String requireValid(String data) { + if (data.isBlank()) + throw new IllegalArgumentException("Invalid billing information '" + data + "'."); + return data; + } + +} diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/tenant/CloudTenant.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/tenant/CloudTenant.java new file mode 100644 index 00000000000..da184f63180 --- /dev/null +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/tenant/CloudTenant.java @@ -0,0 +1,32 @@ +package com.yahoo.vespa.hosted.controller.tenant; + +import com.yahoo.config.provision.TenantName; + +import java.util.Optional; + +/** + * A tenant as vague as its name. + * + * Only a reference to a cloud identity provider, and some billing info, is known for this tenant type. + * + * @author jonmv + */ +public class CloudTenant extends Tenant { + + private final BillingInfo billingInfo; + + /** Public for the serialization layer — do not use! */ + public CloudTenant(TenantName name, BillingInfo info) { + super(name, Optional.empty()); + billingInfo = info; + } + + /** Creates a tenant with the given name, provided it passes validation. */ + public static CloudTenant create(TenantName tenantName, BillingInfo billingInfo) { + return new CloudTenant(requireName(tenantName), billingInfo); + } + + /** Returns the billing info for this tenant. */ + public BillingInfo billingInfo() { return billingInfo; } + +} diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/tenant/Tenant.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/tenant/Tenant.java index c6ed9f7b559..a02d3c7afe7 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/tenant/Tenant.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/tenant/Tenant.java @@ -1,7 +1,6 @@ // Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.tenant; - import com.yahoo.config.provision.TenantName; import com.yahoo.vespa.hosted.controller.api.integration.organization.Contact; @@ -49,7 +48,7 @@ public abstract class Tenant { } static TenantName requireName(TenantName name) { - if (!name.value().matches("^(?=.{1,20}$)[a-z](-?[a-z0-9]+)*$")) { + if ( ! name.value().matches("^(?=.{1,20}$)[a-z](-?[a-z0-9]+)*$")) { throw new IllegalArgumentException("New tenant or application names must start with a letter, may " + "contain no more than 20 characters, and may only contain lowercase " + "letters, digits or dashes, but no double-dashes."); |