diff options
author | Jon Marius Venstad <jonmv@users.noreply.github.com> | 2020-08-05 16:17:37 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-05 16:17:37 +0200 |
commit | 91180ce35894fdfebb5e8743ee3543d43cb64ca4 (patch) | |
tree | 1432858ddc4753842d0eb600a96aaedc3294418d | |
parent | bd4bcb7f35660c3736291ced6c7997cb776ac108 (diff) | |
parent | 110d2ddfe12ee3c9a1a312f8cab727c956b881c1 (diff) |
Merge pull request #13994 from vespa-engine/ogronnesby/stop-reading-billing-info
Stop reading BillingInfo but write the default value
6 files changed, 14 insertions, 31 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/LockedTenant.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/LockedTenant.java index 12b985d1812..599fa962527 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/LockedTenant.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/LockedTenant.java @@ -100,26 +100,20 @@ public abstract class LockedTenant { /** A locked CloudTenant. */ public static class Cloud extends LockedTenant { - private final BillingInfo billingInfo; private final BiMap<PublicKey, Principal> developerKeys; - private Cloud(TenantName name, BillingInfo billingInfo, BiMap<PublicKey, Principal> developerKeys) { + private Cloud(TenantName name, BiMap<PublicKey, Principal> developerKeys) { super(name); - this.billingInfo = billingInfo; this.developerKeys = ImmutableBiMap.copyOf(developerKeys); } private Cloud(CloudTenant tenant) { - this(tenant.name(), tenant.billingInfo(), tenant.developerKeys()); + this(tenant.name(), tenant.developerKeys()); } @Override public CloudTenant get() { - return new CloudTenant(name, billingInfo, developerKeys); - } - - public Cloud with(BillingInfo billingInfo) { - return new Cloud(name, billingInfo, developerKeys); + return new CloudTenant(name, developerKeys); } public Cloud withDeveloperKey(PublicKey key, Principal principal) { @@ -127,13 +121,13 @@ public abstract class LockedTenant { if (keys.containsKey(key)) throw new IllegalArgumentException("Key " + KeyUtils.toPem(key) + " is already owned by " + keys.get(key)); keys.put(key, principal); - return new Cloud(name, billingInfo, keys); + return new Cloud(name, keys); } public Cloud withoutDeveloperKey(PublicKey key) { BiMap<PublicKey, Principal> keys = HashBiMap.create(developerKeys); keys.remove(key); - return new Cloud(name, billingInfo, keys); + return new Cloud(name, keys); } } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializer.java index d4d5f4deb7b..5e9d5c44d4c 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializer.java @@ -84,8 +84,12 @@ public class TenantSerializer { } private void toSlime(CloudTenant tenant, Cursor root) { + // BillingInfo was never used and always just a static default value. To retire this + // field we continue to write the default value and stop reading it. + // TODO(ogronnesby, 2020-08-05): Remove when a version where we do not read the field has propagated. + var legacyBillingInfo = new BillingInfo("customer", "Vespa"); developerKeysToSlime(tenant.developerKeys(), root.setArray(pemDeveloperKeysField)); - toSlime(tenant.billingInfo(), root.setObject(billingInfoField)); + toSlime(legacyBillingInfo, root.setObject(billingInfoField)); } private void developerKeysToSlime(BiMap<PublicKey, Principal> keys, Cursor array) { @@ -124,9 +128,8 @@ public class TenantSerializer { private CloudTenant cloudTenantFrom(Inspector tenantObject) { TenantName name = TenantName.from(tenantObject.field(nameField).asString()); - BillingInfo billingInfo = billingInfoFrom(tenantObject.field(billingInfoField)); BiMap<PublicKey, Principal> developerKeys = developerKeysFromSlime(tenantObject.field(pemDeveloperKeysField)); - return new CloudTenant(name, billingInfo, developerKeys); + return new CloudTenant(name, developerKeys); } private BiMap<PublicKey, Principal> developerKeysFromSlime(Inspector array) { diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/security/CloudAccessControl.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/security/CloudAccessControl.java index ec4d9ff3626..320b376c2ae 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/security/CloudAccessControl.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/security/CloudAccessControl.java @@ -34,8 +34,6 @@ import static com.yahoo.vespa.hosted.controller.api.role.RoleDefinition.*; */ public class CloudAccessControl implements AccessControl { - private static final BillingInfo defaultBillingInfo = new BillingInfo("customer", "Vespa"); - private final UserManagement userManagement; private final BooleanFlag enablePublicSignup; private final BillingController billingController; @@ -52,7 +50,7 @@ public class CloudAccessControl implements AccessControl { requireTenantCreationAllowed((Auth0Credentials) credentials); CloudTenantSpec spec = (CloudTenantSpec) tenantSpec; - CloudTenant tenant = CloudTenant.create(spec.tenant(), defaultBillingInfo); + CloudTenant tenant = CloudTenant.create(spec.tenant()); for (Role role : Roles.tenantRoles(spec.tenant())) { userManagement.createRole(role); 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 index 8601fb34e8f..d208a1e4e63 100644 --- 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 @@ -4,11 +4,9 @@ package com.yahoo.vespa.hosted.controller.tenant; import com.google.common.collect.BiMap; import com.google.common.collect.ImmutableBiMap; import com.yahoo.config.provision.TenantName; -import com.yahoo.vespa.hosted.controller.api.integration.organization.BillingInfo; import java.security.Principal; import java.security.PublicKey; -import java.util.Objects; import java.util.Optional; /** @@ -18,26 +16,20 @@ import java.util.Optional; */ public class CloudTenant extends Tenant { - private final BillingInfo billingInfo; private final BiMap<PublicKey, Principal> developerKeys; /** Public for the serialization layer — do not use! */ - public CloudTenant(TenantName name, BillingInfo info, BiMap<PublicKey, Principal> developerKeys) { + public CloudTenant(TenantName name, BiMap<PublicKey, Principal> developerKeys) { super(name, Optional.empty()); - billingInfo = info; this.developerKeys = developerKeys; } /** Creates a tenant with the given name, provided it passes validation. */ - public static CloudTenant create(TenantName tenantName, BillingInfo billingInfo) { + public static CloudTenant create(TenantName tenantName) { return new CloudTenant(requireName(tenantName), - Objects.requireNonNull(billingInfo), ImmutableBiMap.of()); } - /** Returns the billing info for this tenant. */ - public BillingInfo billingInfo() { return billingInfo; } - /** Returns the set of developer keys and their corresponding developers for this tenant. */ public BiMap<PublicKey, Principal> developerKeys() { return developerKeys; } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializerTest.java index 9c085bb72f7..0f4ea3dd2ce 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializerTest.java @@ -78,12 +78,10 @@ public class TenantSerializerTest { @Test public void cloud_tenant() { CloudTenant tenant = new CloudTenant(TenantName.from("elderly-lady"), - new BillingInfo("old cat lady", "vespa"), ImmutableBiMap.of(publicKey, new SimplePrincipal("joe"), otherPublicKey, new SimplePrincipal("jane"))); CloudTenant serialized = (CloudTenant) serializer.tenantFrom(serializer.toSlime(tenant)); assertEquals(tenant.name(), serialized.name()); - assertEquals(tenant.billingInfo(), serialized.billingInfo()); assertEquals(tenant.developerKeys(), serialized.developerKeys()); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/filter/SignatureFilterTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/filter/SignatureFilterTest.java index 6e1480d45e7..3c13962916a 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/filter/SignatureFilterTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/filter/SignatureFilterTest.java @@ -66,7 +66,6 @@ public class SignatureFilterTest { signer = new RequestSigner(privateKey, id.serializedForm(), tester.clock()); tester.curator().writeTenant(new CloudTenant(appId.tenant(), - new BillingInfo("id", "code"), ImmutableBiMap.of())); tester.curator().writeApplication(new Application(appId, tester.clock().instant())); } @@ -105,7 +104,6 @@ public class SignatureFilterTest { // Signed request gets a developer role when a matching developer key is stored for the tenant. tester.curator().writeTenant(new CloudTenant(appId.tenant(), - new BillingInfo("id", "code"), ImmutableBiMap.of(publicKey, () -> "user"))); verifySecurityContext(requestOf(signer.signed(request.copy(), Method.POST, () -> new ByteArrayInputStream(hiBytes)), hiBytes), new SecurityContext(new SimplePrincipal("user"), |