aboutsummaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorJon Marius Venstad <jvenstad@yahoo-inc.com>2019-03-11 12:01:47 +0100
committerJon Marius Venstad <jvenstad@yahoo-inc.com>2019-03-11 15:24:22 +0100
commit805ee314489bf7f0e02051f71b58ca9c7e72b609 (patch)
treedeba9388b8955f36853cb2d1ca58b6e2fd1bc47c /controller-server
parent48ce50681ad29a1a17446dbb1f0413615ca35725 (diff)
Add CloudTenant and BillingInfo classes
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/TenantController.java5
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/tenant/BillingInfo.java26
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/tenant/CloudTenant.java32
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/tenant/Tenant.java3
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.");