summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/AwsAccessControlValidator.java6
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/application/validation/AwsAccessControlValidatorTest.java6
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/application/validation/ValidationTester.java5
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/Cloud.java78
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/Zone.java23
-rw-r--r--config-provisioning/src/main/resources/configdefinitions/cloud.def16
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/SuperModelManager.java8
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/SuperModelRequestHandlerTest.java5
-rw-r--r--configserver/src/test/java/com/yahoo/vespa/config/server/rpc/RpcTester.java10
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/NodeRepository.java4
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/autoscale/AllocatableClusterResources.java9
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/CapacityReportMaintainer.java9
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/CapacityPolicies.java2
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java11
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTester.java4
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java4
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisionTest.java15
-rw-r--r--service-monitor/src/test/java/com/yahoo/vespa/service/model/ServiceHostListenerAdapterTest.java8
18 files changed, 156 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..d8615c95d37 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().cloud().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..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
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..b7863ba8b3c 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.cloud().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.cloud().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 c6778af6efb..fc70ae060de 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;
@@ -152,7 +151,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().cloud().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))
@@ -199,10 +198,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..e85af1acf26 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().cloud().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..7ddeb936d10 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.cloud().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..0e424779331 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.cloud().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.cloud().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
+}