aboutsummaryrefslogtreecommitdiffstats
path: root/node-admin
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2019-10-31 15:24:49 +0100
committerMartin Polden <mpolden@mpolden.no>2019-10-31 15:25:19 +0100
commit5a5c863d81caee555a3ead748c46d98c301422ad (patch)
tree2cc3e90280da806e5e345e879d3fe1360941fb4e /node-admin
parentbbd03056f0522c2fa01c7d11dac2b5d32e2795f5 (diff)
Remove IPv6 requirement
Diffstat (limited to 'node-admin')
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java20
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImplTest.java4
2 files changed, 13 insertions, 11 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java
index cc9c8c87272..2017f0b3e6d 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java
@@ -64,10 +64,7 @@ public class DockerOperationsImpl implements DockerOperations {
public void createContainer(NodeAgentContext context, ContainerData containerData, ContainerResources containerResources) {
context.log(logger, "Creating container");
- // IPv6 - Assume always valid
- Inet6Address ipV6Address = ipAddresses.getIPv6Address(context.node().hostname()).orElseThrow(
- () -> new RuntimeException("Unable to find a valid IPv6 address for " + context.node().hostname() +
- ". Missing an AAAA DNS entry?"));
+ Optional<Inet6Address> ipV6Address = ipAddresses.getIPv6Address(context.node().hostname());
Docker.CreateContainerCommand command = docker.createContainerCommand(
context.node().wantedDockerImage().get(), context.containerName())
@@ -97,14 +94,19 @@ public class DockerOperationsImpl implements DockerOperations {
command.withNetworkMode(networking.getDockerNetworkMode());
if (networking == DockerNetworking.NPT) {
- InetAddress ipV6Local = IPAddresses.prefixTranslate(ipV6Address, IPV6_NPT_PREFIX, 8);
- command.withIpAddress(ipV6Local);
+ Optional<InetAddress> ipV6Local = ipV6Address.map(ip -> IPAddresses.prefixTranslate(ip, IPV6_NPT_PREFIX, 8));
+ ipV6Local.ifPresent(command::withIpAddress);
// IPv4 - Only present for some containers
Optional<InetAddress> ipV4Local = ipAddresses.getIPv4Address(context.node().hostname())
.map(ipV4Address -> IPAddresses.prefixTranslate(ipV4Address, IPV4_NPT_PREFIX, 2));
ipV4Local.ifPresent(command::withIpAddress);
+ if (ipV4Local.isEmpty() && ipV6Address.isEmpty()) {
+ throw new IllegalArgumentException("Container " + context.node().hostname() + " with " +
+ networking + " networking must have at least 1 IP address, " +
+ "but found none");
+ }
addEtcHosts(containerData, context.node().hostname(), ipV4Local, ipV6Local);
}
@@ -117,7 +119,7 @@ public class DockerOperationsImpl implements DockerOperations {
void addEtcHosts(ContainerData containerData,
String hostname,
Optional<InetAddress> ipV4Local,
- InetAddress ipV6Local) {
+ Optional<InetAddress> ipV6Local) {
// The default /etc/hosts in a Docker container contains one entry for the host,
// mapping the hostname to the Docker-assigned IPv4 address.
//
@@ -137,8 +139,8 @@ public class DockerOperationsImpl implements DockerOperations {
"fe00::0\tip6-localnet\n" +
"ff00::0\tip6-mcastprefix\n" +
"ff02::1\tip6-allnodes\n" +
- "ff02::2\tip6-allrouters\n" +
- ipV6Local.getHostAddress() + '\t' + hostname + '\n');
+ "ff02::2\tip6-allrouters\n");
+ ipV6Local.ifPresent(ipv6 -> etcHosts.append(ipv6.getHostAddress()).append('\t').append(hostname).append('\n'));
ipV4Local.ifPresent(ipv4 -> etcHosts.append(ipv4.getHostAddress()).append('\t').append(hostname).append('\n'));
containerData.addFile(Paths.get("/etc/hosts"), etcHosts.toString());
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImplTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImplTest.java
index 5091e59e175..48a9e8ca039 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImplTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImplTest.java
@@ -98,7 +98,7 @@ public class DockerOperationsImplTest {
InetAddress ipV6Local = InetAddresses.forString("::1");
InetAddress ipV4Local = InetAddresses.forString("127.0.0.1");
- dockerOperations.addEtcHosts(containerData, hostname, Optional.empty(), ipV6Local);
+ dockerOperations.addEtcHosts(containerData, hostname, Optional.empty(), Optional.of(ipV6Local));
verify(containerData, times(1)).addFile(
Paths.get("/etc/hosts"),
@@ -111,7 +111,7 @@ public class DockerOperationsImplTest {
"ff02::2 ip6-allrouters\n" +
"0:0:0:0:0:0:0:1 hostname\n");
- dockerOperations.addEtcHosts(containerData, hostname, Optional.of(ipV4Local), ipV6Local);
+ dockerOperations.addEtcHosts(containerData, hostname, Optional.of(ipV4Local), Optional.of(ipV6Local));
verify(containerData, times(1)).addFile(
Paths.get("/etc/hosts"),