aboutsummaryrefslogtreecommitdiffstats
path: root/controller-api
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2018-08-17 15:01:39 +0200
committerMartin Polden <mpolden@mpolden.no>2018-08-20 14:05:05 +0200
commitf2987e052a0a363ac48abe399153b6274c3b48b2 (patch)
tree34009945fb0d1af45de607f019dccfe8047da11a /controller-api
parent614c4f82c03e6c9884002386863f8ab19f3ff951 (diff)
Make controller aware of clouds
Diffstat (limited to 'controller-api')
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/CloudName.java62
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneFilterMock.java9
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneId.java34
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneRegistry.java7
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
+ }
+
}