summaryrefslogtreecommitdiffstats
path: root/controller-api
diff options
context:
space:
mode:
Diffstat (limited to 'controller-api')
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/identifiers/DeploymentId.java8
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/identifiers/ZoneId.java13
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/MetricsService.java6
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/MemoryNameService.java17
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/NameService.java12
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/Record.java28
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/RecordData.java55
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/RecordName.java47
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/zone/ZoneRegistry.java6
-rw-r--r--controller-api/src/test/java/com/yahoo/vespa/hosted/controller/api/identifiers/IdentifierTest.java4
10 files changed, 152 insertions, 44 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/identifiers/DeploymentId.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/identifiers/DeploymentId.java
index 80fe98a4489..c0bebf54803 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/identifiers/DeploymentId.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/identifiers/DeploymentId.java
@@ -1,7 +1,7 @@
// Copyright 2017 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.identifiers;
-import com.yahoo.config.provision.Zone;
+import com.yahoo.config.provision.ZoneId;
/**
* Application + zone.
@@ -12,9 +12,9 @@ import com.yahoo.config.provision.Zone;
public class DeploymentId {
private final com.yahoo.config.provision.ApplicationId application;
- private final Zone zone;
+ private final ZoneId zone;
- public DeploymentId(com.yahoo.config.provision.ApplicationId application, Zone zone) {
+ public DeploymentId(com.yahoo.config.provision.ApplicationId application, ZoneId zone) {
this.application = application;
this.zone = zone;
}
@@ -22,7 +22,7 @@ public class DeploymentId {
public com.yahoo.config.provision.ApplicationId applicationId() {
return application;
}
- public Zone zone() { return zone; }
+ public ZoneId zone() { return zone; }
public String dottedString() {
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/identifiers/ZoneId.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/identifiers/ZoneId.java
deleted file mode 100644
index 79210143d19..00000000000
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/identifiers/ZoneId.java
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright 2017 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.identifiers;
-
-/**
- * @author smorgrav
- */
-public class ZoneId extends Identifier {
-
- public ZoneId(EnvironmentId envId, RegionId regionId) {
- super(envId.id() + ":" + regionId.id());
- }
-
-}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/MetricsService.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/MetricsService.java
index 1ceb064ad44..d3e1b881bbd 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/MetricsService.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/MetricsService.java
@@ -2,7 +2,7 @@
package com.yahoo.vespa.hosted.controller.api.integration;
import com.yahoo.config.provision.ApplicationId;
-import com.yahoo.config.provision.Zone;
+import com.yahoo.config.provision.ZoneId;
import java.util.Map;
@@ -15,9 +15,9 @@ public interface MetricsService {
ApplicationMetrics getApplicationMetrics(ApplicationId application);
- DeploymentMetrics getDeploymentMetrics(ApplicationId application, Zone zone);
+ DeploymentMetrics getDeploymentMetrics(ApplicationId application, ZoneId zone);
- Map<String, SystemMetrics> getSystemMetrics(ApplicationId application, Zone zone);
+ Map<String, SystemMetrics> getSystemMetrics(ApplicationId application, ZoneId zone);
class DeploymentMetrics {
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/MemoryNameService.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/MemoryNameService.java
index c82a3fd571d..ec9cf0b3436 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/MemoryNameService.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/MemoryNameService.java
@@ -22,20 +22,33 @@ public class MemoryNameService implements NameService {
}
@Override
- public RecordId createCname(String alias, String canonicalName) {
+ public RecordId createCname(RecordName alias, RecordData canonicalName) {
RecordId id = new RecordId(UUID.randomUUID().toString());
records.put(id, new Record(id, Record.Type.CNAME, alias, canonicalName));
return id;
}
@Override
- public Optional<Record> findRecord(Record.Type type, String name) {
+ public Optional<Record> findRecord(Record.Type type, RecordName name) {
return records.values().stream()
.filter(record -> record.type() == type && record.name().equals(name))
.findFirst();
}
@Override
+ public Optional<Record> findRecord(Record.Type type, RecordData data) {
+ return records.values()
+ .stream()
+ .filter(record -> record.type() == type && record.data().equals(data))
+ .findFirst();
+ }
+
+ @Override
+ public void updateRecord(RecordId id, RecordData newData) {
+ records.computeIfPresent(id, (k, record) -> new Record(id, record.type(), record.name(), newData));
+ }
+
+ @Override
public void removeRecord(RecordId id) {
records.remove(id);
}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/NameService.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/NameService.java
index 9b7c527db63..078a7e7cefb 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/NameService.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/NameService.java
@@ -14,12 +14,18 @@ public interface NameService {
* Create a new CNAME record
*
* @param alias The alias to create
- * @param canonicalName The canonical name which the alias should point to. This must be a domain.
+ * @param canonicalName The canonical name which the alias should point to. This must be a FQDN.
*/
- RecordId createCname(String alias, String canonicalName);
+ RecordId createCname(RecordName alias, RecordData canonicalName);
/** Find record by type and name */
- Optional<Record> findRecord(Record.Type type, String name);
+ Optional<Record> findRecord(Record.Type type, RecordName name);
+
+ /** Find record by type and data */
+ Optional<Record> findRecord(Record.Type type, RecordData data);
+
+ /** Update existing record */
+ void updateRecord(RecordId id, RecordData newData);
/** Remove record by ID */
void removeRecord(RecordId id);
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/Record.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/Record.java
index f190d11cf8f..b51202e8261 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/Record.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/Record.java
@@ -12,14 +12,14 @@ public class Record {
private final RecordId id;
private final Type type;
- private final String name;
- private final String value;
+ private final RecordName name;
+ private final RecordData data;
- public Record(RecordId id, Type type, String name, String value) {
- this.id = id;
- this.type = type;
- this.name = name;
- this.value = value;
+ public Record(RecordId id, Type type, RecordName name, RecordData data) {
+ this.id = Objects.requireNonNull(id, "id cannot be null");
+ this.type = Objects.requireNonNull(type, "type cannot be null");
+ this.name = Objects.requireNonNull(name, "name cannot be null");
+ this.data = Objects.requireNonNull(data, "data cannot be null");
}
/** Unique identifier for this */
@@ -32,13 +32,13 @@ public class Record {
return type;
}
- /** Value for this, e.g. IP address for "A" record */
- public String value() {
- return value;
+ /** Data in this, e.g. IP address for "A" record */
+ public RecordData data() {
+ return data;
}
/** Name of this, e.g. a FQDN for "A" record */
- public String name() {
+ public RecordName name() {
return name;
}
@@ -60,7 +60,7 @@ public class Record {
"id=" + id +
", type=" + type +
", name='" + name + '\'' +
- ", value='" + value + '\'' +
+ ", data='" + data + '\'' +
'}';
}
@@ -72,11 +72,11 @@ public class Record {
return Objects.equals(id, record.id) &&
type == record.type &&
Objects.equals(name, record.name) &&
- Objects.equals(value, record.value);
+ Objects.equals(data, record.data);
}
@Override
public int hashCode() {
- return Objects.hash(id, type, name, value);
+ return Objects.hash(id, type, name, data);
}
}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/RecordData.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/RecordData.java
new file mode 100644
index 00000000000..e0d19e0fff9
--- /dev/null
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/RecordData.java
@@ -0,0 +1,55 @@
+// Copyright 2017 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.dns;
+
+import java.util.Objects;
+
+/**
+ * Represents the data field of a DNS record (RDATA).
+ *
+ * E.g. this may be an IP address for A records, or a FQDN for CNAME records.
+ *
+ * @author mpolden
+ */
+public class RecordData {
+
+ private final String data;
+
+ private RecordData(String data) {
+ this.data = Objects.requireNonNull(data, "data cannot be null");
+ }
+
+ public String asString() {
+ return data;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ RecordData that = (RecordData) o;
+ return Objects.equals(data, that.data);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(data);
+ }
+
+ @Override
+ public String toString() {
+ return "RecordValue{" +
+ "value='" + data + '\'' +
+ '}';
+ }
+
+ /** Create a new record containing the given data */
+ public static RecordData from(String data) {
+ return new RecordData(data);
+ }
+
+ /** Create a new record and append a trailing dot to given data, if missing */
+ public static RecordData fqdn(String data) {
+ return from(data.endsWith(".") ? data : data + ".");
+ }
+
+}
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/RecordName.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/RecordName.java
new file mode 100644
index 00000000000..aa239ece588
--- /dev/null
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/RecordName.java
@@ -0,0 +1,47 @@
+// Copyright 2017 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.dns;
+
+import java.util.Objects;
+
+/**
+ * Represents the name field of a DNS record (NAME). This is typically a FQDN.
+ *
+ * @author mpolden
+ */
+public class RecordName {
+
+ private final String name;
+
+ private RecordName(String name) {
+ this.name = Objects.requireNonNull(name, "name cannot be null");
+ }
+
+ public String asString() {
+ return name;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ RecordName that = (RecordName) o;
+ return Objects.equals(name, that.name);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(name);
+ }
+
+ @Override
+ public String toString() {
+ return "RecordName{" +
+ "name='" + name + '\'' +
+ '}';
+ }
+
+ public static RecordName from(String name) {
+ return new RecordName(name);
+ }
+
+}
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 df6f023f6af..3318bf783d8 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
@@ -5,7 +5,7 @@ import com.yahoo.config.provision.ApplicationId;
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 com.yahoo.config.provision.ZoneId;
import java.net.URI;
import java.time.Duration;
@@ -20,8 +20,8 @@ import java.util.Optional;
public interface ZoneRegistry {
SystemName system();
- List<Zone> zones();
- Optional<Zone> getZone(Environment environment, RegionName region);
+ List<ZoneId> zones();
+ Optional<ZoneId> getZone(Environment environment, RegionName region);
List<URI> getConfigServerUris(Environment environment, RegionName region);
Optional<URI> getLogServerUri(Environment environment, RegionName region);
Optional<Duration> getDeploymentTimeToLive(Environment environment, RegionName region);
diff --git a/controller-api/src/test/java/com/yahoo/vespa/hosted/controller/api/identifiers/IdentifierTest.java b/controller-api/src/test/java/com/yahoo/vespa/hosted/controller/api/identifiers/IdentifierTest.java
index 7e4d543fd18..aa3d1be879e 100644
--- a/controller-api/src/test/java/com/yahoo/vespa/hosted/controller/api/identifiers/IdentifierTest.java
+++ b/controller-api/src/test/java/com/yahoo/vespa/hosted/controller/api/identifiers/IdentifierTest.java
@@ -3,7 +3,7 @@ package com.yahoo.vespa.hosted.controller.api.identifiers;
import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.RegionName;
-import com.yahoo.config.provision.Zone;
+import com.yahoo.config.provision.ZoneId;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
@@ -147,7 +147,7 @@ public class IdentifierTest {
@Test
public void application_instance_id_dotted_string_is_subindentifers_concatinated_with_dots() {
DeploymentId id = new DeploymentId(com.yahoo.config.provision.ApplicationId.from("tenant", "application", "instance"),
- new Zone(Environment.prod, RegionName.from("region")));
+ ZoneId.from("prod", "region"));
assertEquals("tenant.application.prod.region.instance", id.dottedString());
}
}