aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/application/validation/AwsAccessControlValidatorTest.java3
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/Cloud.java63
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/Zone.java10
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgraderTest.java6
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/os/OsApiTest.java9
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/autoscale/AutoscalingTest.java7
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/maintenance/DynamicProvisioningMaintainerTest.java42
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/DynamicDockerProvisionTest.java3
8 files changed, 97 insertions, 46 deletions
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 1b61215618a..c4212a877e8 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
@@ -16,7 +16,8 @@ public class AwsAccessControlValidatorTest extends AccessControlValidatorTestBas
@Before
public void setup() {
validator = new AwsAccessControlValidator();
- zone = new Zone(Cloud.defaultCloud().withRequireAccessControl(true), SystemName.main, Environment.prod, RegionName.from("foo"));
+ zone = new Zone(Cloud.builder().requireAccessControl(true).build(),
+ SystemName.main, Environment.prod, RegionName.from("foo"));
}
}
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 d79b00c62c7..24ec4a7ab70 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
@@ -1,6 +1,8 @@
// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.config.provision;
+import java.util.Objects;
+
/**
* Represents a cloud service and its supported features.
*
@@ -15,9 +17,9 @@ public class Cloud {
private final boolean reprovisionToUpgradeOs;
private final boolean requireAccessControl;
- public Cloud(CloudName name, boolean dynamicProvisioning, boolean allowHostSharing, boolean reprovisionToUpgradeOs,
- boolean requireAccessControl) {
- this.name = name;
+ private Cloud(CloudName name, boolean dynamicProvisioning, boolean allowHostSharing, boolean reprovisionToUpgradeOs,
+ boolean requireAccessControl) {
+ this.name = Objects.requireNonNull(name);
this.dynamicProvisioning = dynamicProvisioning;
this.allowHostSharing = allowHostSharing;
this.reprovisionToUpgradeOs = reprovisionToUpgradeOs;
@@ -49,25 +51,54 @@ public class Cloud {
return requireAccessControl;
}
- public Cloud withDynamicProvisioning(boolean dynamicProvisioning) {
- return new Cloud(name, dynamicProvisioning, allowHostSharing, reprovisionToUpgradeOs, requireAccessControl);
+ /** For testing purposes only */
+ public static Cloud defaultCloud() {
+ return new Builder().name(CloudName.defaultName()).build();
}
- public Cloud withAllowHostSharing(boolean allowHostSharing) {
- return new Cloud(name, dynamicProvisioning, allowHostSharing, reprovisionToUpgradeOs, requireAccessControl);
+ public static Builder builder() {
+ return new Builder();
}
- public Cloud withReprovisionToUpgradeOs(boolean reprovisionToUpgradeOs) {
- return new Cloud(name, dynamicProvisioning, allowHostSharing, reprovisionToUpgradeOs, requireAccessControl);
- }
+ public static class Builder {
- public Cloud withRequireAccessControl(boolean requireAccessControl) {
- return new Cloud(name, dynamicProvisioning, allowHostSharing, reprovisionToUpgradeOs, requireAccessControl);
- }
+ private CloudName name = CloudName.defaultName();
+ private boolean dynamicProvisioning = false;
+ private boolean allowHostSharing = true;
+ private boolean reprovisionToUpgradeOs = false;
+ private boolean requireAccessControl = false;
+
+ private Builder() {}
+
+ public Builder name(CloudName name) {
+ this.name = name;
+ return this;
+ }
+
+ public Builder dynamicProvisioning(boolean dynamicProvisioning) {
+ this.dynamicProvisioning = dynamicProvisioning;
+ return this;
+ }
+
+ public Builder allowHostSharing(boolean allowHostSharing) {
+ this.allowHostSharing = allowHostSharing;
+ return this;
+ }
+
+ public Builder reprovisionToUpgradeOs(boolean reprovisionToUpgradeOs) {
+ this.reprovisionToUpgradeOs = reprovisionToUpgradeOs;
+ return this;
+ }
+
+ public Builder requireAccessControl(boolean requireAccessControl) {
+ this.requireAccessControl = requireAccessControl;
+ return this;
+ }
+
+ public Cloud build() {
+ 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
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 5b6485de2b4..f616174de1a 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
@@ -25,9 +25,13 @@ public class Zone {
@Inject
public Zone(ConfigserverConfig configserverConfig, NodeFlavors nodeFlavors, CloudConfig cloudConfig) {
- this(new Cloud(CloudName.from(configserverConfig.cloud()), cloudConfig.dynamicProvisioning(),
- cloudConfig.allowHostSharing(), cloudConfig.reprovisionToUpgradeOs(),
- cloudConfig.requireAccessControl()),
+ this(Cloud.builder()
+ .name(CloudName.from(configserverConfig.cloud()))
+ .dynamicProvisioning(cloudConfig.dynamicProvisioning())
+ .allowHostSharing(cloudConfig.allowHostSharing())
+ .reprovisionToUpgradeOs(cloudConfig.reprovisionToUpgradeOs())
+ .requireAccessControl(cloudConfig.requireAccessControl())
+ .build(),
SystemName.from(configserverConfig.system()),
Environment.from(configserverConfig.environment()),
RegionName.from(configserverConfig.region()),
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgraderTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgraderTest.java
index c8319efa348..0bc29157c06 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgraderTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/OsUpgraderTest.java
@@ -37,8 +37,8 @@ public class OsUpgraderTest {
@Test
public void upgrade_os() {
- Cloud cloud1 = new Cloud(CloudName.from("c1"), false, true, false, true);
- Cloud cloud2 = new Cloud(CloudName.from("c2"), false, true, false, true);
+ Cloud cloud1 = Cloud.builder().name(CloudName.from("c1")).requireAccessControl(true).build();
+ Cloud cloud2 = Cloud.builder().name(CloudName.from("c2")).requireAccessControl(true).build();
ZoneApi zone1 = zone("prod.eu-west-1", cloud1);
ZoneApi zone2 = zone("prod.us-west-1", cloud1);
ZoneApi zone3 = zone("prod.us-central-1", cloud1);
@@ -110,7 +110,7 @@ public class OsUpgraderTest {
@Test
public void upgrade_os_with_budget() {
- Cloud cloud = new Cloud(CloudName.from("cloud"), false, true, true, true);
+ Cloud cloud = Cloud.builder().name(CloudName.from("cloud")).reprovisionToUpgradeOs(true).requireAccessControl(true).build();
ZoneApi zone1 = zone("dev.us-east-1", cloud);
ZoneApi zone2 = zone("prod.us-west-1", cloud);
ZoneApi zone3 = zone("prod.us-central-1", cloud);
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/os/OsApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/os/OsApiTest.java
index 5534b6937b2..8131a850d3b 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/os/OsApiTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/os/OsApiTest.java
@@ -37,8 +37,13 @@ public class OsApiTest extends ControllerContainerTest {
private static final String responses = "src/test/java/com/yahoo/vespa/hosted/controller/restapi/os/responses/";
private static final AthenzIdentity operator = AthenzUser.fromUserId("operatorUser");
- private static final Cloud cloud1 = new Cloud(CloudName.from("cloud1"), false, true, false, false);
- private static final Cloud cloud2 = new Cloud(CloudName.from("cloud2"), true, false, true, true);
+ private static final Cloud cloud1 = Cloud.builder().name(CloudName.from("cloud1")).build();
+ private static final Cloud cloud2 = Cloud.builder().name(CloudName.from("cloud2"))
+ .dynamicProvisioning(true)
+ .allowHostSharing(false)
+ .reprovisionToUpgradeOs(true)
+ .requireAccessControl(true)
+ .build();
private static final ZoneApi zone1 = ZoneApiMock.newBuilder().withId("prod.us-east-3").with(cloud1.name()).build();
private static final ZoneApi zone2 = ZoneApiMock.newBuilder().withId("prod.us-west-1").with(cloud1.name()).build();
private static final ZoneApi zone3 = ZoneApiMock.newBuilder().withId("prod.eu-west-1").with(cloud2.name()).build();
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 08e4237fe00..4bb3ffafcd8 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
@@ -298,9 +298,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(Cloud.defaultCloud()
- .withDynamicProvisioning(true)
- .withAllowHostSharing(false),
+ AutoscalingTester tester = new AutoscalingTester(new Zone(Cloud.builder()
+ .dynamicProvisioning(true)
+ .allowHostSharing(false)
+ .build(),
SystemName.main,
Environment.prod, RegionName.from("us-east")),
flavors);
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 2ffb103708f..507d875c69f 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
@@ -150,24 +150,34 @@ public class DynamicProvisioningMaintainerTest {
private static final NodeFlavors flavors = FlavorConfigBuilder.createDummies("default", "docker");
private final ManualClock clock = new ManualClock();
- private final Zone zone = new Zone(Cloud.defaultCloud().withDynamicProvisioning(true), SystemName.defaultSystem(),
- Environment.defaultEnvironment(), RegionName.defaultName());
- private final NodeRepository nodeRepository = new NodeRepository(flavors,
- new HostResourcesCalculatorMock(),
- new MockCurator(),
- clock,
- zone,
- new MockNameResolver().mockAnyLookup(),
- DockerImage.fromString("docker-image"), true);
-
-
private final InMemoryFlagSource flagSource = new InMemoryFlagSource()
.withListFlag(Flags.PREPROVISION_CAPACITY.id(), List.of(), PreprovisionCapacity.class);
- private final HostProvisionerMock hostProvisioner = new HostProvisionerMock(nodeRepository);
- private final DynamicProvisioningMaintainer maintainer = new DynamicProvisioningMaintainer(nodeRepository,
- Duration.ofDays(1),
- hostProvisioner,
- flagSource);
+
+ private final Zone zone;
+ private final NodeRepository nodeRepository;
+ private final HostProvisionerMock hostProvisioner;
+ private final DynamicProvisioningMaintainer maintainer;
+
+ public DynamicProvisioningTester() {
+ this(Cloud.builder().dynamicProvisioning(true).build());
+ }
+
+ public DynamicProvisioningTester(Cloud cloud) {
+ this.zone = new Zone(cloud, SystemName.defaultSystem(), Environment.defaultEnvironment(),
+ RegionName.defaultName());
+ this.nodeRepository = new NodeRepository(flavors,
+ new HostResourcesCalculatorMock(),
+ new MockCurator(),
+ clock,
+ zone,
+ new MockNameResolver().mockAnyLookup(),
+ DockerImage.fromString("docker-image"), true);
+ this.hostProvisioner = new HostProvisionerMock(nodeRepository);
+ this.maintainer = new DynamicProvisioningMaintainer(nodeRepository,
+ Duration.ofDays(1),
+ hostProvisioner,
+ flagSource);
+ }
private DynamicProvisioningTester addInitialNodes() {
List.of(createNode("host1", Optional.empty(), NodeType.host, Node.State.active, Optional.of(tenantHostApp)),
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 7ef780b8b7f..cf37de07304 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
@@ -33,7 +33,6 @@ import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
-import static com.yahoo.config.provision.NodeResources.DiskSpeed.any;
import static com.yahoo.config.provision.NodeResources.DiskSpeed.fast;
import static com.yahoo.config.provision.NodeResources.StorageType.local;
import static com.yahoo.config.provision.NodeResources.StorageType.remote;
@@ -51,7 +50,7 @@ import static org.mockito.Mockito.verify;
public class DynamicDockerProvisionTest {
private static final Zone zone = new Zone(
- Cloud.defaultCloud().withDynamicProvisioning(true).withAllowHostSharing(false),
+ Cloud.builder().dynamicProvisioning(true).allowHostSharing(false).build(),
SystemName.main,
Environment.prod,
RegionName.from("us-east"));