aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/MemoryNameService.java4
-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/stubs/MockTesterCloud.java12
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/RoutingController.java12
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/dns/CreateRecord.java4
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/dns/NameServiceForwarder.java7
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/RoutingPolicies.java4
7 files changed, 25 insertions, 27 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 18ff3f18137..18d7bc53035 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
@@ -33,8 +33,8 @@ public class MemoryNameService implements NameService {
}
@Override
- public Record createCname(RecordName name, RecordData canonicalName) {
- var record = new Record(Record.Type.CNAME, name, canonicalName);
+ public Record createRecord(Record.Type type, RecordName name, RecordData canonicalName) {
+ var record = new Record(type, name, canonicalName);
add(record);
return record;
}
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 eac657d8b75..505ff3850ab 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
@@ -12,13 +12,14 @@ import java.util.Set;
public interface NameService {
/**
- * Create a new CNAME record
+ * Create a new record
*
- * @param name The alias to create (lhs of the record)
- * @param canonicalName The canonical name which the alias should point to (rhs of the record). This must be a FQDN.
+ * @param type The DNS type of record to make, only a small set of types are supported, check with the implementation
+ * @param name Name of the record, e.g. a FQDN for records of type A
+ * @param data Data of the record, e.g. IP address for records of type A
* @return The created record
*/
- Record createCname(RecordName name, RecordData canonicalName);
+ Record createRecord(Record.Type type, RecordName name, RecordData data);
/**
* Create a non-standard ALIAS record pointing to given targets. Implementations of this are expected to be
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockTesterCloud.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockTesterCloud.java
index 63c2388b461..e53be91f94b 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockTesterCloud.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockTesterCloud.java
@@ -2,6 +2,7 @@
package com.yahoo.vespa.hosted.controller.api.integration.stubs;
import ai.vespa.http.DomainName;
+import com.google.common.net.InetAddresses;
import com.yahoo.vespa.hosted.controller.api.identifiers.DeploymentId;
import com.yahoo.vespa.hosted.controller.api.integration.LogEntry;
import com.yahoo.vespa.hosted.controller.api.integration.deployment.TestReport;
@@ -12,7 +13,6 @@ import com.yahoo.vespa.hosted.controller.api.integration.dns.RecordName;
import java.net.InetAddress;
import java.net.URI;
-import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@@ -60,12 +60,10 @@ public class MockTesterCloud implements TesterCloud {
@Override
public Optional<InetAddress> resolveHostName(DomainName hostname) {
- try {
- return Optional.of(InetAddress.getByAddress(new byte[]{ 1, 2, 3, 4 }));
- }
- catch (UnknownHostException e) {
- throw new IllegalStateException("should not happen");
- }
+ return nameService.findRecords(Record.Type.A, RecordName.from(hostname.value())).stream()
+ .findFirst()
+ .map(record -> InetAddresses.forString(record.data().asString()))
+ .or(() -> Optional.of(InetAddresses.forString("1.2.3.4")));
}
@Override
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/RoutingController.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/RoutingController.java
index 071d8a4d11f..91bca1e481c 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/RoutingController.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/RoutingController.java
@@ -268,9 +268,9 @@ public class RoutingController {
// Register names in DNS
Rotation rotation = rotationRepository.requireRotation(assignedRotation.rotationId());
for (var endpoint : rotationEndpoints) {
- controller.nameServiceForwarder().createCname(RecordName.from(endpoint.dnsName()),
- RecordData.fqdn(rotation.name()),
- Priority.normal);
+ controller.nameServiceForwarder().createRecord(
+ new Record(Record.Type.CNAME, RecordName.from(endpoint.dnsName()), RecordData.fqdn(rotation.name())),
+ Priority.normal);
List<String> names = List.of(endpoint.dnsName(),
// Include rotation ID as a valid name of this container endpoint
// (required by global routing health checks)
@@ -305,9 +305,9 @@ public class RoutingController {
ZoneId targetZone = targetZones.iterator().next();
String vipHostname = controller.zoneRegistry().getVipHostname(targetZone)
.orElseThrow(() -> new IllegalArgumentException("No VIP configured for zone " + targetZone));
- controller.nameServiceForwarder().createCname(RecordName.from(endpoint.dnsName()),
- RecordData.fqdn(vipHostname),
- Priority.normal);
+ controller.nameServiceForwarder().createRecord(
+ new Record(Record.Type.CNAME, RecordName.from(endpoint.dnsName()), RecordData.fqdn(vipHostname)),
+ Priority.normal);
}
Map<ClusterSpec.Id, EndpointList> applicationEndpointsByCluster = applicationEndpoints.groupingBy(Endpoint::cluster);
for (var kv : applicationEndpointsByCluster.entrySet()) {
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/dns/CreateRecord.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/dns/CreateRecord.java
index 464e3eff203..344ffad80e9 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/dns/CreateRecord.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/dns/CreateRecord.java
@@ -19,7 +19,7 @@ public class CreateRecord implements NameServiceRequest {
/** DO NOT USE. Public for serialization purposes */
public CreateRecord(Record record) {
this.record = Objects.requireNonNull(record, "record must be non-null");
- if (record.type() != Record.Type.CNAME) {
+ if (record.type() != Record.Type.CNAME && record.type() != Record.Type.A) {
throw new IllegalArgumentException("Record of type " + record.type() + " is not supported: " + record);
}
}
@@ -38,7 +38,7 @@ public class CreateRecord implements NameServiceRequest {
}
});
if (records.isEmpty()) {
- nameService.createCname(record.name(), record.data());
+ nameService.createRecord(record.type(), record.name(), record.data());
}
}
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/dns/NameServiceForwarder.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/dns/NameServiceForwarder.java
index 540e8489e6d..9d2c7918252 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/dns/NameServiceForwarder.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/dns/NameServiceForwarder.java
@@ -2,7 +2,6 @@
package com.yahoo.vespa.hosted.controller.dns;
import com.yahoo.transaction.Mutex;
-import com.yahoo.vespa.curator.Lock;
import com.yahoo.vespa.hosted.controller.api.integration.dns.AliasTarget;
import com.yahoo.vespa.hosted.controller.api.integration.dns.NameService;
import com.yahoo.vespa.hosted.controller.api.integration.dns.Record;
@@ -43,9 +42,9 @@ public class NameServiceForwarder {
this.db = Objects.requireNonNull(db, "db must be non-null");
}
- /** Create or update a CNAME record with given name and data */
- public void createCname(RecordName name, RecordData canonicalName, NameServiceQueue.Priority priority) {
- forward(new CreateRecord(new Record(Record.Type.CNAME, name, canonicalName)), priority);
+ /** Create or update a given record */
+ public void createRecord(Record record, NameServiceQueue.Priority priority) {
+ forward(new CreateRecord(record), priority);
}
/** Create or update an ALIAS record with given name and targets */
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/RoutingPolicies.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/RoutingPolicies.java
index ac29f8952a0..683b16c803c 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/RoutingPolicies.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/RoutingPolicies.java
@@ -332,8 +332,8 @@ public class RoutingPolicies {
private void updateZoneDnsOf(RoutingPolicy policy) {
for (var endpoint : policy.zoneEndpointsIn(controller.system(), RoutingMethod.exclusive, controller.zoneRegistry())) {
var name = RecordName.from(endpoint.dnsName());
- var data = RecordData.fqdn(policy.canonicalName().value());
- nameServiceForwarderIn(policy.id().zone()).createCname(name, data, Priority.normal);
+ var record = new Record(Record.Type.CNAME, name, RecordData.fqdn(policy.canonicalName().value()));
+ nameServiceForwarderIn(policy.id().zone()).createRecord(record, Priority.normal);
}
}