diff options
18 files changed, 160 insertions, 67 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/AwsAccessControlValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/AwsAccessControlValidator.java index 631ab0e2640..c5615924a8e 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/AwsAccessControlValidator.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/AwsAccessControlValidator.java @@ -3,7 +3,6 @@ package com.yahoo.vespa.model.application.validation; import com.yahoo.config.application.api.ValidationId; import com.yahoo.config.model.deploy.DeployState; -import com.yahoo.config.provision.CloudName; import com.yahoo.vespa.model.VespaModel; import java.util.ArrayList; @@ -18,14 +17,11 @@ import static com.yahoo.vespa.model.container.http.AccessControl.hasHandlerThatN */ public class AwsAccessControlValidator extends Validator { - // NOTE: must be the same as the name in the declaration of the AWS cloud in hosted. - static final String AWS_CLOUD_NAME = "aws"; - @Override public void validate(VespaModel model, DeployState deployState) { if (! needsAccessControlValidation(model, deployState)) return; - if(! deployState.zone().cloud().equals(CloudName.from(AWS_CLOUD_NAME))) return; + if(! deployState.zone().getCloud().requireAccessControl()) return; List<String> offendingClusters = new ArrayList<>(); for (var cluster : model.getContainerClusters().values()) { diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/AwsAccessControlValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/AwsAccessControlValidatorTest.java index 4eb69ec405a..1b61215618a 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/AwsAccessControlValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/AwsAccessControlValidatorTest.java @@ -1,15 +1,13 @@ // Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.model.application.validation; -import com.yahoo.config.provision.CloudName; +import com.yahoo.config.provision.Cloud; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.RegionName; import com.yahoo.config.provision.SystemName; import com.yahoo.config.provision.Zone; import org.junit.Before; -import static com.yahoo.vespa.model.application.validation.AwsAccessControlValidator.AWS_CLOUD_NAME; - /** * @author gjoranv */ @@ -18,7 +16,7 @@ public class AwsAccessControlValidatorTest extends AccessControlValidatorTestBas @Before public void setup() { validator = new AwsAccessControlValidator(); - zone = new Zone(CloudName.from(AWS_CLOUD_NAME), SystemName.main, Environment.prod, RegionName.from("foo")); + zone = new Zone(Cloud.defaultCloud().withRequireAccessControl(true), SystemName.main, Environment.prod, RegionName.from("foo")); } } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/ValidationTester.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/ValidationTester.java index 915b3c01e1b..362a083993e 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/ValidationTester.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/ValidationTester.java @@ -5,13 +5,11 @@ import com.google.common.collect.ImmutableList; import com.yahoo.collections.Pair; import com.yahoo.config.application.api.ApplicationPackage; import com.yahoo.config.model.api.ConfigChangeAction; -import com.yahoo.config.model.api.HostProvisioner; import com.yahoo.config.model.api.Provisioned; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.model.deploy.TestProperties; import com.yahoo.config.model.provision.InMemoryProvisioner; import com.yahoo.config.model.test.MockApplicationPackage; -import com.yahoo.config.provision.CloudName; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.RegionName; import com.yahoo.config.provision.SystemName; @@ -72,8 +70,7 @@ public class ValidationTester { .build(); VespaModelCreatorWithMockPkg newModelCreator = new VespaModelCreatorWithMockPkg(newApp); DeployState.Builder deployStateBuilder = new DeployState.Builder() - .zone(new Zone(CloudName.defaultName(), - SystemName.defaultSystem(), + .zone(new Zone(SystemName.defaultSystem(), environment, RegionName.defaultName())) .applicationPackage(newApp) 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..5b6485de2b4 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,11 @@ public class Zone { } /** Returns the current cloud */ - public CloudName cloud() { return cloudName; } + // TODO: For compatibility with older config models. Remove after June 2020 + public CloudName cloud() { return cloud.name(); } + + /** Returns the current cloud */ + public Cloud getCloud() { return cloud; } /** Returns the current system */ public SystemName system() { return systemName; } @@ -80,7 +87,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 diff --git a/config-provisioning/src/main/resources/configdefinitions/cloud.def b/config-provisioning/src/main/resources/configdefinitions/cloud.def new file mode 100644 index 00000000000..36523482ab2 --- /dev/null +++ b/config-provisioning/src/main/resources/configdefinitions/cloud.def @@ -0,0 +1,16 @@ +# Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +# +# Configures the features supported by a cloud service. +namespace=config.provisioning + +# Are hosts provisioned dynamically on-demand? +dynamicProvisioning bool default=false + +# Can nodes belonging to different applications be placed on the same host? +allowHostSharing bool default=true + +# Do we need to reprovision a host to upgrade its operating system? +reprovisionToUpgradeOs bool default=false + +# Should clusters in this cloud always require access control for both read and write operations? +requireAccessControl bool default=false diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelManager.java b/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelManager.java index db10d9dcc73..57911a24d7b 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelManager.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelManager.java @@ -9,9 +9,7 @@ import com.yahoo.config.model.api.SuperModel; import com.yahoo.config.model.api.SuperModelListener; import com.yahoo.config.model.api.SuperModelProvider; import com.yahoo.config.provision.ApplicationId; -import com.yahoo.config.provision.NodeFlavors; import com.yahoo.config.provision.Zone; -import java.util.logging.Level; import com.yahoo.vespa.config.GenerationCounter; import com.yahoo.vespa.config.server.application.ApplicationSet; import com.yahoo.vespa.config.server.model.SuperModelConfigProvider; @@ -19,10 +17,10 @@ import com.yahoo.vespa.flags.FlagSource; import java.time.Instant; import java.util.ArrayList; -import java.util.HashSet; import java.util.List; import java.util.Optional; import java.util.Set; +import java.util.logging.Level; import java.util.logging.Logger; /** @@ -49,11 +47,11 @@ public class SuperModelManager implements SuperModelProvider { @Inject public SuperModelManager(ConfigserverConfig configserverConfig, - NodeFlavors nodeFlavors, + Zone zone, GenerationCounter generationCounter, FlagSource flagSource) { this.flagSource = flagSource; - this.zone = new Zone(configserverConfig, nodeFlavors); + this.zone = zone; this.generationCounter = generationCounter; this.masterGeneration = configserverConfig.masterGeneration(); makeNewSuperModelConfigProvider(new SuperModel()); diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelRequestHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelRequestHandlerTest.java index dd2c3e07131..4346d83e85e 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelRequestHandlerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelRequestHandlerTest.java @@ -5,6 +5,7 @@ import com.yahoo.cloud.config.ConfigserverConfig; import com.yahoo.config.model.application.provider.FilesApplicationPackage; import com.yahoo.config.provision.NodeFlavors; import com.yahoo.component.Version; +import com.yahoo.config.provision.Zone; import com.yahoo.config.provisioning.FlavorsConfig; import com.yahoo.vespa.config.server.application.Application; import com.yahoo.config.provision.ApplicationId; @@ -46,7 +47,7 @@ public class SuperModelRequestHandlerTest { public void setup() { counter = new SuperModelGenerationCounter(new MockCurator()); ConfigserverConfig configserverConfig = new ConfigserverConfig(new ConfigserverConfig.Builder()); - manager = new SuperModelManager(configserverConfig, emptyNodeFlavors(), counter, new InMemoryFlagSource()); + manager = new SuperModelManager(configserverConfig, Zone.defaultZone(), counter, new InMemoryFlagSource()); controller = new SuperModelRequestHandler(new TestConfigDefinitionRepo(), configserverConfig, manager); } @@ -96,7 +97,7 @@ public class SuperModelRequestHandlerTest { ApplicationId foo = applicationId("a", "foo"); long masterGen = 10; ConfigserverConfig configserverConfig = new ConfigserverConfig(new ConfigserverConfig.Builder().masterGeneration(masterGen)); - manager = new SuperModelManager(configserverConfig, emptyNodeFlavors(), counter, new InMemoryFlagSource()); + manager = new SuperModelManager(configserverConfig, Zone.defaultZone(), counter, new InMemoryFlagSource()); controller = new SuperModelRequestHandler(new TestConfigDefinitionRepo(), configserverConfig, manager); long gen = counter.get(); diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/RpcTester.java b/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/RpcTester.java index 53463585582..ad42e90db82 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/RpcTester.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/RpcTester.java @@ -4,6 +4,7 @@ package com.yahoo.vespa.config.server.rpc; import com.yahoo.cloud.config.ConfigserverConfig; import com.yahoo.config.provision.HostLivenessTracker; import com.yahoo.config.provision.TenantName; +import com.yahoo.config.provision.Zone; import com.yahoo.jrt.Request; import com.yahoo.jrt.Spec; import com.yahoo.jrt.Supervisor; @@ -11,7 +12,11 @@ import com.yahoo.jrt.Transport; import com.yahoo.net.HostName; import com.yahoo.test.ManualClock; import com.yahoo.vespa.config.GenerationCounter; -import com.yahoo.vespa.config.server.*; +import com.yahoo.vespa.config.server.MemoryGenerationCounter; +import com.yahoo.vespa.config.server.PortRangeAllocator; +import com.yahoo.vespa.config.server.SuperModelManager; +import com.yahoo.vespa.config.server.SuperModelRequestHandler; +import com.yahoo.vespa.config.server.TestConfigDefinitionRepo; import com.yahoo.vespa.config.server.filedistribution.FileServer; import com.yahoo.vespa.config.server.host.ConfigRequestHostLivenessTracker; import com.yahoo.vespa.config.server.host.HostRegistries; @@ -29,7 +34,6 @@ import java.time.Instant; import java.util.ArrayList; import java.util.List; -import static com.yahoo.vespa.config.server.SuperModelRequestHandlerTest.emptyNodeFlavors; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -94,7 +98,7 @@ public class RpcTester implements AutoCloseable { configserverConfig, new SuperModelManager( configserverConfig, - emptyNodeFlavors(), + Zone.defaultZone() , generationCounter, new InMemoryFlagSource())), Metrics.createTestMetrics(), new HostRegistries(), diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java index a459cc2826f..436b1e49a54 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java @@ -651,7 +651,7 @@ public class NodeRepository extends AbstractComponent { children.forEach(child -> requireRemovable(child, true, force)); db.removeNodes(children); List<Node> removed = new ArrayList<>(children); - if (zone.cloud().value().equals("aws")) + if (zone.getCloud().dynamicProvisioning()) db.removeNodes(List.of(node)); else { node = node.with(IP.Config.EMPTY); @@ -797,7 +797,7 @@ public class NodeRepository extends AbstractComponent { if (host.status().wantToRetire() || host.allocation().map(alloc -> alloc.membership().retired()).orElse(false)) return false; - if (!zone.cloud().value().equals("aws")) return host.state() == State.active; + if (!zone.getCloud().dynamicProvisioning()) return host.state() == State.active; else return EnumSet.of(State.active, State.ready, State.provisioned).contains(host.state()); } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocatableClusterResources.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocatableClusterResources.java index 305b87f96e7..517cd7bd05e 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocatableClusterResources.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocatableClusterResources.java @@ -1,7 +1,6 @@ // Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.provision.autoscale; -import com.yahoo.config.provision.CloudName; import com.yahoo.config.provision.ClusterResources; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.Flavor; @@ -141,7 +140,7 @@ public class AllocatableClusterResources { NodeResources cappedNodeResources = limits.cap(resources.nodeResources()); cappedNodeResources = new NodeResourceLimits(nodeRepository.zone()).enlargeToLegal(cappedNodeResources, clusterType); - if (allowsHostSharing(nodeRepository.zone().cloud())) { + if (nodeRepository.zone().getCloud().allowHostSharing()) { // return the requested resources, or empty if they cannot fit on existing hosts for (Flavor flavor : nodeRepository.flavors().getFlavors()) { if (flavor.resources().satisfies(cappedNodeResources)) @@ -188,10 +187,4 @@ public class AllocatableClusterResources { return true; } - // TODO: Put this in zone config instead? - private static boolean allowsHostSharing(CloudName cloudName) { - if (cloudName.value().equals("aws")) return false; - return true; - } - } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityReportMaintainer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityReportMaintainer.java index abd1b477d4f..f6cadabec54 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityReportMaintainer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityReportMaintainer.java @@ -2,16 +2,17 @@ package com.yahoo.vespa.hosted.provision.maintenance; import com.yahoo.jdisc.Metric; -import java.util.logging.Level; import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.NodeRepository; import java.time.Duration; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.logging.Level; import java.util.logging.Logger; import java.util.stream.Collectors; -import java.util.*; - /** * Performs analysis on the node repository to produce metrics that pertain to the capacity of the node repository. * These metrics include: @@ -37,7 +38,7 @@ public class CapacityReportMaintainer extends NodeRepositoryMaintainer { @Override protected void maintain() { - if (nodeRepository.zone().cloud().value().equals("aws")) return; // Hosts and nodes are 1-1 + if (nodeRepository.zone().getCloud().dynamicProvisioning()) return; // Hosts and nodes are 1-1 CapacityChecker capacityChecker = new CapacityChecker(this.nodeRepository); List<Node> overcommittedHosts = capacityChecker.findOvercommittedHosts(); diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java index a2bf83eb6c3..e9e6fd30286 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java @@ -28,7 +28,7 @@ public class CapacityPolicies { public CapacityPolicies(Zone zone) { this.zone = zone; this.nodeResourceLimits = new NodeResourceLimits(zone); - this.isUsingAdvertisedResources = zone.cloud().value().equals("aws"); + this.isUsingAdvertisedResources = zone.getCloud().dynamicProvisioning(); } public int decideSize(int requested, Capacity capacity, ClusterSpec cluster, ApplicationId application) { diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java index 39a848a17f5..8b01868e75e 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java @@ -1,9 +1,8 @@ // Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.provision.autoscale; -import com.google.common.collect.Sets; import com.yahoo.config.provision.ApplicationId; -import com.yahoo.config.provision.CloudName; +import com.yahoo.config.provision.Cloud; import com.yahoo.config.provision.ClusterResources; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.Environment; @@ -12,14 +11,11 @@ import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.RegionName; import com.yahoo.config.provision.SystemName; import com.yahoo.config.provision.Zone; -import com.yahoo.io.IOUtils; import org.junit.Test; import java.util.ArrayList; -import java.util.HashSet; import java.util.List; import java.util.Optional; -import java.util.Set; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -284,7 +280,10 @@ public class AutoscalingTest { flavors.add(new Flavor("aws-large", new NodeResources(3, 150, 100, 1, NodeResources.DiskSpeed.fast, NodeResources.StorageType.remote))); flavors.add(new Flavor("aws-medium", new NodeResources(3, 100, 100, 1, NodeResources.DiskSpeed.fast, NodeResources.StorageType.remote))); flavors.add(new Flavor("aws-small", new NodeResources(3, 80, 100, 1, NodeResources.DiskSpeed.fast, NodeResources.StorageType.remote))); - AutoscalingTester tester = new AutoscalingTester(new Zone(CloudName.from("aws"), SystemName.main, + AutoscalingTester tester = new AutoscalingTester(new Zone(Cloud.defaultCloud() + .withDynamicProvisioning(true) + .withAllowHostSharing(false), + SystemName.main, Environment.prod, RegionName.from("us-east")), flavors); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java index 5233181bfbf..64d5a53aed8 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java @@ -206,7 +206,7 @@ class AutoscalingTester { @Override public NodeResources realResourcesOf(Node node, NodeRepository nodeRepository) { - if (zone.cloud().value().equals("aws")) + if (zone.getCloud().dynamicProvisioning()) return node.flavor().resources().withMemoryGb(node.flavor().resources().memoryGb() - 3); else return node.flavor().resources(); @@ -214,7 +214,7 @@ class AutoscalingTester { @Override public NodeResources advertisedResourcesOf(Flavor flavor) { - if (zone.cloud().value().equals("aws")) + if (zone.getCloud().dynamicProvisioning()) return flavor.resources().withMemoryGb(flavor.resources().memoryGb() + 3); else return flavor.resources(); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java index 05976066664..df66916f3c7 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java @@ -3,7 +3,7 @@ package com.yahoo.vespa.hosted.provision.maintenance; import com.yahoo.component.Version; import com.yahoo.config.provision.ApplicationId; -import com.yahoo.config.provision.CloudName; +import com.yahoo.config.provision.Cloud; import com.yahoo.config.provision.ClusterMembership; import com.yahoo.config.provision.DockerImage; import com.yahoo.config.provision.Environment; @@ -214,7 +214,7 @@ public class DynamicProvisioningMaintainerTest { static final ApplicationId proxyApp = ApplicationId.from("vespa", "proxy", "default"); private final ManualClock clock = new ManualClock(); - private final Zone zone = new Zone(CloudName.from("aws"), SystemName.defaultSystem(), Environment.defaultEnvironment(), RegionName.defaultName()); + private final Zone zone = new Zone(Cloud.defaultCloud().withDynamicProvisioning(true), SystemName.defaultSystem(), Environment.defaultEnvironment(), RegionName.defaultName()); private final NodeRepository nodeRepository = new NodeRepository(nodeFlavors, hostResourcesCalculator, new MockCurator(), diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisionTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisionTest.java index a32baf5beda..7a6e92b8d71 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisionTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisionTest.java @@ -4,7 +4,7 @@ package com.yahoo.vespa.hosted.provision.provisioning; import com.yahoo.component.Version; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.Capacity; -import com.yahoo.config.provision.CloudName; +import com.yahoo.config.provision.Cloud; import com.yahoo.config.provision.ClusterResources; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.Environment; @@ -33,6 +33,8 @@ import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.IntStream; +import static com.yahoo.config.provision.NodeResources.DiskSpeed.fast; +import static com.yahoo.config.provision.NodeResources.StorageType.remote; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -41,9 +43,6 @@ import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; -import static com.yahoo.config.provision.NodeResources.DiskSpeed.*; -import static com.yahoo.config.provision.NodeResources.StorageType.*; - /** * @author freva */ @@ -160,7 +159,9 @@ public class DynamicDockerProvisionTest { List<Flavor> flavors = List.of(new Flavor("2x", new NodeResources(2, 17, 200, 10, fast, remote))); - ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(CloudName.from("aws"), + ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Cloud.defaultCloud() + .withDynamicProvisioning(true) + .withAllowHostSharing(false), SystemName.main, Environment.prod, RegionName.from("us-east"))) @@ -210,7 +211,9 @@ public class DynamicDockerProvisionTest { new Flavor("2x", new NodeResources(2, 20 - memoryTax, 200, 0.1, fast, remote)), new Flavor("4x", new NodeResources(4, 40 - memoryTax, 400, 0.1, fast, remote))); - ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(CloudName.from("aws"), + ProvisioningTester tester = new ProvisioningTester.Builder().zone(new Zone(Cloud.defaultCloud() + .withDynamicProvisioning(true) + .withAllowHostSharing(false), SystemName.main, Environment.prod, RegionName.from("us-east"))) diff --git a/service-monitor/src/test/java/com/yahoo/vespa/service/model/ServiceHostListenerAdapterTest.java b/service-monitor/src/test/java/com/yahoo/vespa/service/model/ServiceHostListenerAdapterTest.java index 6b1f0dfd5b6..8bd6a2e2040 100644 --- a/service-monitor/src/test/java/com/yahoo/vespa/service/model/ServiceHostListenerAdapterTest.java +++ b/service-monitor/src/test/java/com/yahoo/vespa/service/model/ServiceHostListenerAdapterTest.java @@ -5,7 +5,6 @@ import com.yahoo.config.model.api.ApplicationInfo; import com.yahoo.config.model.api.HostInfo; import com.yahoo.config.model.api.Model; import com.yahoo.config.provision.ApplicationId; -import com.yahoo.config.provision.CloudName; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.RegionName; import com.yahoo.config.provision.SystemName; @@ -30,8 +29,11 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; +/** + * @author hakonhall + */ public class ServiceHostListenerAdapterTest { - private final Zone zone = new Zone(CloudName.from("AWS"), SystemName.cd, Environment.dev, RegionName.from("us-east-1")); + private final Zone zone = new Zone(SystemName.cd, Environment.dev, RegionName.from("us-east-1")); private final ModelGenerator generator = new ModelGenerator(zone); private final ServiceHostListener listener = mock(ServiceHostListener.class); private final ServiceHostListenerAdapter adapter = new ServiceHostListenerAdapter(listener, generator); @@ -145,4 +147,4 @@ public class ServiceHostListenerAdapterTest { return applicationInfo; } -}
\ No newline at end of file +} |