diff options
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")); |