summaryrefslogtreecommitdiffstats
path: root/controller-api
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@yahooinc.com>2022-10-07 12:15:12 +0200
committerValerij Fredriksen <valerijf@yahooinc.com>2022-10-10 13:32:41 +0200
commit9511540736b58f9b47fd3656ad5702eb7496666b (patch)
tree8a7bdf33bb681f5e8dd69a80c7a688fb8b9cf40f /controller-api
parentb5cce0b85802e7b512bac7c1c2f2824f6d3f80a3 (diff)
Support creating DIRECT records
Diffstat (limited to 'controller-api')
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/MemoryNameService.java19
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/NameService.java9
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/Record.java1
3 files changed, 29 insertions, 0 deletions
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 18d7bc53035..9a9270bdf7f 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
@@ -54,6 +54,20 @@ public class MemoryNameService implements NameService {
}
@Override
+ public List<Record> createDirect(RecordName name, Set<DirectTarget> targets) {
+ var records = targets.stream()
+ .sorted((a, b) -> Comparator.comparing((DirectTarget target) -> target.recordData().asString()).compare(a, b))
+ .map(d -> new Record(Record.Type.DIRECT, name, d.pack()))
+ .collect(Collectors.toList());
+ // Satisfy idempotency contract of interface
+ for (var r1 : records) {
+ this.records.removeIf(r2 -> conflicts(r1, r2));
+ }
+ this.records.addAll(records);
+ return records;
+ }
+
+ @Override
public List<Record> createTxtRecords(RecordName name, List<RecordData> txtData) {
var records = txtData.stream()
.map(data -> new Record(Record.Type.TXT, name, data))
@@ -122,6 +136,11 @@ public class MemoryNameService implements NameService {
AliasTarget t2 = AliasTarget.unpack(r2.data());
return t1.name().equals(t2.name()); // ALIAS records require distinct targets
}
+ if (r1.type() == Record.Type.DIRECT && r1.type() == r2.type()) {
+ DirectTarget t1 = DirectTarget.unpack(r1.data());
+ DirectTarget t2 = DirectTarget.unpack(r2.data());
+ return t1.id().equals(t2.id()); // DIRECT records require distinct IDs
+ }
return true; // Anything else is considered a conflict
}
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 505ff3850ab..72e983680d9 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
@@ -31,6 +31,15 @@ public interface NameService {
List<Record> createAlias(RecordName name, Set<AliasTarget> targets);
/**
+ * Create a non-standard record pointing to given targets. Implementations of this are expected to be
+ * idempotent
+ *
+ * @param targets Targets that should be resolved by this name.
+ * @return The created records. One per target.
+ */
+ List<Record> createDirect(RecordName name, Set<DirectTarget> targets);
+
+ /**
* Create a new TXT record containing the provided data.
* @param name Name of the created record
* @param txtRecords TXT data values for the record, each consisting of one or more space-separated double-quoted
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 2f9312b2f89..e76445faa60 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
@@ -55,6 +55,7 @@ public record Record(Type type,
AAAA,
ALIAS,
CNAME,
+ DIRECT,
MX,
NS,
PTR,