summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2022-10-26 13:22:16 +0200
committerMartin Polden <mpolden@mpolden.no>2022-10-26 13:56:11 +0200
commit6d5b46dcf5d5dd845c22d3afaf582fd725a3b2a4 (patch)
treea96a03a1b9d97d1a6c00b29ffef7c49f6de04edb
parent4bc54df04097788c49f31f1cfe1d0446c26d8c42 (diff)
Add default account to Cloud
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/Cloud.java23
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/Zone.java1
-rw-r--r--config-provisioning/src/main/resources/configdefinitions/config.provisioning.cloud.def3
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/os/OsVersionsTest.java7
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);