diff options
Diffstat (limited to 'config-provisioning/src/main/java/com/yahoo/config')
3 files changed, 34 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; } |