summaryrefslogtreecommitdiffstats
path: root/config-provisioning/src
diff options
context:
space:
mode:
Diffstat (limited to 'config-provisioning/src')
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/Cloud.java22
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/CloudAccount.java10
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/Zone.java8
-rw-r--r--config-provisioning/src/main/resources/configdefinitions/config.provisioning.cloud.def3
4 files changed, 37 insertions, 6 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..6220c73dfd5 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
@@ -4,7 +4,7 @@ package com.yahoo.config.provision;
import java.util.Objects;
/**
- * Represents a cloud service and its supported features.
+ * Properties of the cloud service where the zone is deployed.
*
* @author mpolden
*/
@@ -14,11 +14,16 @@ public class Cloud {
private final boolean dynamicProvisioning;
private final boolean requireAccessControl;
+ private final CloudAccount account;
- private Cloud(CloudName name, boolean dynamicProvisioning, boolean requireAccessControl) {
+ private Cloud(CloudName name, boolean dynamicProvisioning, boolean requireAccessControl, 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 non-empty in cloud '" + name + "'");
+ }
}
/** The name of this */
@@ -36,6 +41,11 @@ public class Cloud {
return requireAccessControl;
}
+ /** Returns the default account of this cloud */
+ public CloudAccount account() {
+ return account;
+ }
+
/** For testing purposes only */
public static Cloud defaultCloud() {
return new Builder().build();
@@ -50,6 +60,7 @@ public class Cloud {
private CloudName name = CloudName.DEFAULT;
private boolean dynamicProvisioning = false;
private boolean requireAccessControl = false;
+ private CloudAccount account = CloudAccount.empty;
public Builder() {}
@@ -68,8 +79,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, account);
}
}
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/CloudAccount.java b/config-provisioning/src/main/java/com/yahoo/config/provision/CloudAccount.java
index 3609ea4af88..ac237cb1232 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/CloudAccount.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/CloudAccount.java
@@ -6,14 +6,20 @@ import ai.vespa.validation.PatternedStringWrapper;
import java.util.regex.Pattern;
/**
- * Identifies an account in a public cloud, such as AWS or GCP.
+ * Identifies an account in a public cloud, such as {@link CloudName#AWS} or {@link CloudName#GCP}.
*
* @author mpolden
*/
public class CloudAccount extends PatternedStringWrapper<CloudAccount> {
+ public static final CloudAccount empty = new CloudAccount("");
+
public CloudAccount(String value) {
- super(value, Pattern.compile("^[0-9]{12}$"), "cloud account");
+ super(value, Pattern.compile("^([0-9]{12})?$"), "cloud account");
+ }
+
+ public boolean isEmpty() {
+ return this.equals(empty);
}
}
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..8b662c4f66b 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() ? CloudAccount.empty : new CloudAccount(cloudConfig.account()))
.build(),
SystemName.from(configserverConfig.system()),
Environment.from(configserverConfig.environment()),
@@ -51,8 +52,13 @@ public class Zone {
this.region = region;
}
+ // TODO(mpolden): For compatibility with older config models. Remove when versions < 8.76 are gone
+ public Cloud getCloud() {
+ return cloud();
+ }
+
/** Returns the current cloud */
- public Cloud getCloud() { return cloud; }
+ public Cloud cloud() { return cloud; }
/** Returns the current system */
public SystemName system() { return systemName; }
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=""