diff options
author | Martin Polden <mpolden@mpolden.no> | 2022-10-26 13:22:16 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2022-10-26 13:56:11 +0200 |
commit | 6d5b46dcf5d5dd845c22d3afaf582fd725a3b2a4 (patch) | |
tree | a96a03a1b9d97d1a6c00b29ffef7c49f6de04edb | |
parent | 4bc54df04097788c49f31f1cfe1d0446c26d8c42 (diff) |
Add default account to Cloud
4 files changed, 30 insertions, 4 deletions
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/Cloud.java b/config-provisioning/src/main/java/com/yahoo/config/provision/Cloud.java index 4498d8de4c7..a9ebf419783 100644 --- a/config-provisioning/src/main/java/com/yahoo/config/provision/Cloud.java +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/Cloud.java @@ -2,9 +2,10 @@ package com.yahoo.config.provision; import java.util.Objects; +import java.util.Optional; /** - * Represents a cloud service and its supported features. + * Properties of the cloud service where the zone is deployed. * * @author mpolden */ @@ -14,11 +15,16 @@ public class Cloud { private final boolean dynamicProvisioning; private final boolean requireAccessControl; + private final Optional<CloudAccount> account; - private Cloud(CloudName name, boolean dynamicProvisioning, boolean requireAccessControl) { + private Cloud(CloudName name, boolean dynamicProvisioning, boolean requireAccessControl, Optional<CloudAccount> account) { this.name = Objects.requireNonNull(name); this.dynamicProvisioning = dynamicProvisioning; this.requireAccessControl = requireAccessControl; + this.account = Objects.requireNonNull(account); + if (name.equals(CloudName.AWS) && account.isEmpty()) { + throw new IllegalArgumentException("Account must be set in cloud '" + name + "'"); + } } /** The name of this */ @@ -36,6 +42,11 @@ public class Cloud { return requireAccessControl; } + /** Returns the default account of this cloud, if any */ + public Optional<CloudAccount> account() { + return account; + } + /** For testing purposes only */ public static Cloud defaultCloud() { return new Builder().build(); @@ -50,6 +61,7 @@ public class Cloud { private CloudName name = CloudName.DEFAULT; private boolean dynamicProvisioning = false; private boolean requireAccessControl = false; + private CloudAccount account = null; public Builder() {} @@ -68,8 +80,13 @@ public class Cloud { return this; } + public Builder account(CloudAccount account) { + this.account = account; + return this; + } + public Cloud build() { - return new Cloud(name, dynamicProvisioning, requireAccessControl); + return new Cloud(name, dynamicProvisioning, requireAccessControl, Optional.ofNullable(account)); } } diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/Zone.java b/config-provisioning/src/main/java/com/yahoo/config/provision/Zone.java index 1f8ba3ce93f..99b8e4447ff 100644 --- a/config-provisioning/src/main/java/com/yahoo/config/provision/Zone.java +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/Zone.java @@ -27,6 +27,7 @@ public class Zone { .name(CloudName.from(configserverConfig.cloud())) .dynamicProvisioning(cloudConfig.dynamicProvisioning()) .requireAccessControl(cloudConfig.requireAccessControl()) + .account(cloudConfig.account().isEmpty() ? null : new CloudAccount(cloudConfig.account())) .build(), SystemName.from(configserverConfig.system()), Environment.from(configserverConfig.environment()), diff --git a/config-provisioning/src/main/resources/configdefinitions/config.provisioning.cloud.def b/config-provisioning/src/main/resources/configdefinitions/config.provisioning.cloud.def index a5ad0dc9a7c..05ccee34d59 100644 --- a/config-provisioning/src/main/resources/configdefinitions/config.provisioning.cloud.def +++ b/config-provisioning/src/main/resources/configdefinitions/config.provisioning.cloud.def @@ -11,3 +11,6 @@ allowHostSharing bool default=true # Should clusters in this cloud always require access control for both read and write operations? requireAccessControl bool default=false + +# The default account used to provision hosts and load balancers in this zone. +account string default="" diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/os/OsVersionsTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/os/OsVersionsTest.java index adcd40866d0..8f34b0ae259 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/os/OsVersionsTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/os/OsVersionsTest.java @@ -4,6 +4,7 @@ package com.yahoo.vespa.hosted.provision.os; import com.yahoo.component.Version; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.Cloud; +import com.yahoo.config.provision.CloudAccount; import com.yahoo.config.provision.CloudName; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.HostSpec; @@ -335,7 +336,11 @@ public class OsVersionsTest { tester.flagSource().withIntFlag(PermanentFlags.MAX_REBUILDS.id(), maxRebuilds); tester.flagSource().withBooleanFlag(Flags.SOFT_REBUILD.id(), softRebuild); - var versions = new OsVersions(tester.nodeRepository(), Cloud.builder().dynamicProvisioning(true).name(CloudName.AWS).build(), Integer.MAX_VALUE); + var versions = new OsVersions(tester.nodeRepository(), Cloud.builder() + .dynamicProvisioning(true) + .name(CloudName.AWS) + .account(new CloudAccount("000000000000")) + .build(), Integer.MAX_VALUE); provisionInfraApplication(hostCount, infraApplication, NodeType.host, NodeResources.StorageType.remote); Supplier<NodeList> hostNodes = () -> tester.nodeRepository().nodes().list().nodeType(NodeType.host); |