diff options
author | Martin Polden <mpolden@mpolden.no> | 2018-08-17 15:01:39 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2018-08-20 14:05:05 +0200 |
commit | f2987e052a0a363ac48abe399153b6274c3b48b2 (patch) | |
tree | 34009945fb0d1af45de607f019dccfe8047da11a /controller-api | |
parent | 614c4f82c03e6c9884002386863f8ab19f3ff951 (diff) |
Make controller aware of clouds
Diffstat (limited to 'controller-api')
4 files changed, 100 insertions, 12 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/CloudName.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/CloudName.java new file mode 100644 index 00000000000..e7a6b32b36e --- /dev/null +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/CloudName.java @@ -0,0 +1,62 @@ +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.controller.api.integration.zone; + +import org.jetbrains.annotations.NotNull; + +import java.util.Objects; + +/** + * Represents a cloud provider used in a hosted Vespa system. + * + * @author mpolden + */ +public class CloudName implements Comparable<CloudName> { + + private final static CloudName defaultCloud = from("default"); + + private final String cloud; + + private CloudName(String cloud) { + this.cloud = cloud; + } + + public String value() { + return cloud; + } + + public boolean isDefault() { + return defaultName().equals(this); + } + + public static CloudName defaultName() { + return defaultCloud; + } + + public static CloudName from(String cloud) { + return new CloudName(cloud); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + CloudName cloudName = (CloudName) o; + return Objects.equals(cloud, cloudName.cloud); + } + + @Override + public int hashCode() { + return Objects.hash(cloud); + } + + @Override + public String toString() { + return cloud; + } + + @Override + public int compareTo(@NotNull CloudName o) { + return cloud.compareTo(o.cloud); + } + +} diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneFilterMock.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneFilterMock.java index 67d2fd14e6b..10cf862fa30 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneFilterMock.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneFilterMock.java @@ -9,20 +9,21 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashSet; +import java.util.List; import java.util.function.Predicate; import java.util.stream.Collectors; /** - * A Zones.List implementation which assumes all zones are controllerManaged. + * A ZoneList implementation which assumes all zones are controllerManaged. * * @author jonmv */ public class ZoneFilterMock implements ZoneList { - private final java.util.List<ZoneId> zones; + private final List<ZoneId> zones; private final boolean negate; - private ZoneFilterMock(java.util.List<ZoneId> zones, boolean negate) { + private ZoneFilterMock(List<ZoneId> zones, boolean negate) { this.negate = negate; this.zones = zones; } @@ -67,7 +68,7 @@ public class ZoneFilterMock implements ZoneList { } @Override - public java.util.List<ZoneId> ids() { + public List<ZoneId> ids() { return Collections.unmodifiableList(zones); } diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneId.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneId.java index b53b81398c6..c98f6da3f29 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneId.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneId.java @@ -18,10 +18,16 @@ public class ZoneId { private final Environment environment; private final RegionName region; + private final CloudName cloud; - private ZoneId(Environment environment, RegionName region) { + private ZoneId(Environment environment, RegionName region, CloudName cloud) { this.environment = Objects.requireNonNull(environment); this.region = Objects.requireNonNull(region); + this.cloud = cloud; + } + + private ZoneId(Environment environment, RegionName region) { + this(environment, region, CloudName.defaultName()); } public static ZoneId from(Environment environment, RegionName region) { @@ -31,12 +37,21 @@ public class ZoneId { public static ZoneId from(String environment, String region) { return from(Environment.from(environment), RegionName.from(region)); } + /** Create from a serialised ZoneId. Inverse of {@code ZoneId.value()}. */ public static ZoneId from(String value) { String[] parts = value.split("\\."); return from(parts[0], parts[1]); } + public static ZoneId from(Environment environment, RegionName region, CloudName cloud) { + return new ZoneId(environment, region, cloud); + } + + public static ZoneId from(String environment, String region, String cloud) { + return new ZoneId(Environment.from(environment), RegionName.from(region), CloudName.from(cloud)); + } + public Environment environment() { return environment; } @@ -45,6 +60,10 @@ public class ZoneId { return region; } + public CloudName cloud() { + return cloud; + } + /** Returns the serialised value of this. Inverse of {@code ZoneId.from(String value)}. */ public String value() { return environment + "." + region; @@ -52,21 +71,22 @@ public class ZoneId { @Override public String toString() { - return "zone " + value(); + return "zone " + value() + " in " + cloud; } @Override public boolean equals(Object o) { if (this == o) return true; - if ( ! (o instanceof ZoneId)) return false; - ZoneId id = (ZoneId) o; - return environment == id.environment && - Objects.equals(region, id.region); + if (o == null || getClass() != o.getClass()) return false; + ZoneId zoneId = (ZoneId) o; + return environment == zoneId.environment && + Objects.equals(region, zoneId.region) && + Objects.equals(cloud, zoneId.cloud); } @Override public int hashCode() { - return Objects.hash(environment, region); + return Objects.hash(environment, region, cloud); } } diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneRegistry.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneRegistry.java index f721564c80e..4fbad88df8d 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneRegistry.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneRegistry.java @@ -53,9 +53,14 @@ public interface ZoneRegistry { UpgradePolicy upgradePolicy(); /** Returns the OS upgrade policy to use for zones in this registry */ - // TODO: Remove default once internal code implements this + // TODO: Remove default UpgradePolicy osUpgradePolicy() { return upgradePolicy(); } + /** Returns the OS upgrade policy to use for zones belonging to given cloud, in this registry */ + default UpgradePolicy osUpgradePolicy(CloudName cloud) { + return osUpgradePolicy(); // TODO: Remove default implementation + } + } |