diff options
Diffstat (limited to 'config-provisioning/src/main/java/com/yahoo/config/provision')
-rw-r--r-- | config-provisioning/src/main/java/com/yahoo/config/provision/Cloud.java | 78 | ||||
-rw-r--r-- | config-provisioning/src/main/java/com/yahoo/config/provision/Zone.java | 23 |
2 files changed, 91 insertions, 10 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 new file mode 100644 index 00000000000..b1df63dae44 --- /dev/null +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/Cloud.java @@ -0,0 +1,78 @@ +// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.config.provision; + +/** + * Represents a cloud service and its supported features. + * + * @author mpolden + */ +public class Cloud { + + private final CloudName name; + + private final boolean dynamicProvisioning; + private final boolean allowHostSharing; + private final boolean reprovisionToUpgradeOs; + private final boolean requireAccessControl; + + protected Cloud(CloudName name, boolean dynamicProvisioning, boolean allowHostSharing, boolean reprovisionToUpgradeOs, + boolean requireAccessControl) { + this.name = name; + this.dynamicProvisioning = dynamicProvisioning; + this.allowHostSharing = allowHostSharing; + this.reprovisionToUpgradeOs = reprovisionToUpgradeOs; + this.requireAccessControl = requireAccessControl; + } + + /** The name of this */ + public CloudName name() { + return name; + } + + /** Returns whether this can provision hosts dynamically */ + public boolean dynamicProvisioning() { + return dynamicProvisioning; + } + + /** Returns wheter this allows different applications to share the same host */ + public boolean allowHostSharing() { + return allowHostSharing; + } + + /** Returns whether upgrading OS on hosts in this requires the host to be reprovisioned */ + public boolean reprovisionToUpgradeOs() { + return reprovisionToUpgradeOs; + } + + /** Returns whether to require access control for all clusters in this */ + public boolean requireAccessControl() { + return requireAccessControl; + } + + public Cloud withDynamicProvisioning(boolean dynamicProvisioning) { + return new Cloud(name, dynamicProvisioning, allowHostSharing, reprovisionToUpgradeOs, requireAccessControl); + } + + public Cloud withAllowHostSharing(boolean allowHostSharing) { + return new Cloud(name, dynamicProvisioning, allowHostSharing, reprovisionToUpgradeOs, requireAccessControl); + } + + public Cloud withReprovisionToUpgradeOs(boolean reprovisionToUpgradeOs) { + return new Cloud(name, dynamicProvisioning, allowHostSharing, reprovisionToUpgradeOs, requireAccessControl); + } + + public Cloud withRequireAccessControl(boolean requireAccessControl) { + return new Cloud(name, dynamicProvisioning, allowHostSharing, reprovisionToUpgradeOs, requireAccessControl); + } + + /** For testing purposes only */ + public static Cloud defaultCloud() { + return new Cloud(CloudName.defaultName(), false, true, false, false); + } + + @Override + public String toString() { + return "cloud " + name; + } + +} 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 33a13b1aa9f..260f17f1c81 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 @@ -3,6 +3,7 @@ package com.yahoo.config.provision; import com.google.inject.Inject; import com.yahoo.cloud.config.ConfigserverConfig; +import com.yahoo.config.provisioning.CloudConfig; import java.util.Objects; import java.util.Optional; @@ -16,15 +17,17 @@ import java.util.Optional; */ public class Zone { - private final CloudName cloudName; + private final Cloud cloud; private final SystemName systemName; private final Environment environment; private final RegionName region; private final Optional<NodeFlavors> nodeFlavors; @Inject - public Zone(ConfigserverConfig configserverConfig, NodeFlavors nodeFlavors) { - this(CloudName.from(configserverConfig.cloud()), + public Zone(ConfigserverConfig configserverConfig, NodeFlavors nodeFlavors, CloudConfig cloudConfig) { + this(new Cloud(CloudName.from(configserverConfig.cloud()), cloudConfig.dynamicProvisioning(), + cloudConfig.allowHostSharing(), cloudConfig.reprovisionToUpgradeOs(), + cloudConfig.requireAccessControl()), SystemName.from(configserverConfig.system()), Environment.from(configserverConfig.environment()), RegionName.from(configserverConfig.region()), @@ -38,21 +41,21 @@ public class Zone { /** Create from system, environment and region. Use for testing. */ public Zone(SystemName systemName, Environment environment, RegionName region) { - this(CloudName.defaultName(), systemName, environment, region); + this(Cloud.defaultCloud(), systemName, environment, region); } /** Create from cloud, system, environment and region. Use for testing. */ - public Zone(CloudName cloudName, SystemName systemName, Environment environment, RegionName region) { - this(cloudName, systemName, environment, region, null); + public Zone(Cloud cloud, SystemName systemName, Environment environment, RegionName region) { + this(cloud, systemName, environment, region, null); } /** Create from cloud, system, environment, region and node flavors. Use for testing. */ - private Zone(CloudName cloudName, + private Zone(Cloud cloud, SystemName systemName, Environment environment, RegionName region, NodeFlavors nodeFlavors) { - this.cloudName = cloudName; + this.cloud = cloud; this.systemName = systemName; this.environment = environment; this.region = region; @@ -60,7 +63,7 @@ public class Zone { } /** Returns the current cloud */ - public CloudName cloud() { return cloudName; } + public Cloud cloud() { return cloud; } /** Returns the current system */ public SystemName system() { return systemName; } @@ -80,7 +83,7 @@ public class Zone { /** Do not use */ public static Zone defaultZone() { - return new Zone(CloudName.defaultName(), SystemName.defaultSystem(), Environment.defaultEnvironment(), RegionName.defaultName()); + return new Zone(Cloud.defaultCloud(), SystemName.defaultSystem(), Environment.defaultEnvironment(), RegionName.defaultName()); } @Override |