diff options
author | Martin Polden <mpolden@mpolden.no> | 2019-10-31 15:24:49 +0100 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2019-10-31 15:25:19 +0100 |
commit | 5a5c863d81caee555a3ead748c46d98c301422ad (patch) | |
tree | 2cc3e90280da806e5e345e879d3fe1360941fb4e /node-admin | |
parent | bbd03056f0522c2fa01c7d11dac2b5d32e2795f5 (diff) |
Remove IPv6 requirement
Diffstat (limited to 'node-admin')
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"), |