diff options
author | Valerij Fredriksen <valerijf@oath.com> | 2018-10-04 12:40:40 +0200 |
---|---|---|
committer | Valerij Fredriksen <valerijf@oath.com> | 2018-10-04 12:40:40 +0200 |
commit | 1932c6ea74b9ac2d2695eaf1a5a6de592ce807d2 (patch) | |
tree | 9f9ee4bf1fc3f218d6faad24c98a1543cfbadbba /docker-api | |
parent | 29d2e7a3f9cb5d1e69e6a94d14865333cd208079 (diff) |
Remove macvlan from docker-api
Diffstat (limited to 'docker-api')
3 files changed, 2 insertions, 122 deletions
diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/Docker.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/Docker.java index 8bde491d83b..bc2c9514709 100644 --- a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/Docker.java +++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/Docker.java @@ -11,11 +11,6 @@ import java.util.Optional; * and to avoid OSGi exporting those classes. */ public interface Docker { - /** - * Should only be called by non-host-admin. May be called more than once. - * TODO: Remove when migration to host-admin is done - */ - void start(); interface CreateContainerCommand { CreateContainerCommand withLabel(String name, String value); @@ -70,8 +65,6 @@ public interface Docker { void deleteContainer(ContainerName containerName); - void connectContainerToNetwork(ContainerName containerName, String networkName); - List<Container> getAllContainersManagedBy(String manager); Optional<Container> getContainer(ContainerName containerName); diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java index 69ab697ea27..22c865f6d9e 100644 --- a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java +++ b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java @@ -10,7 +10,6 @@ import com.github.dockerjava.api.exception.DockerClientException; import com.github.dockerjava.api.exception.NotFoundException; import com.github.dockerjava.api.exception.NotModifiedException; import com.github.dockerjava.api.model.Image; -import com.github.dockerjava.api.model.Network; import com.github.dockerjava.api.model.Statistics; import com.github.dockerjava.core.DefaultDockerClientConfig; import com.github.dockerjava.core.DockerClientConfig; @@ -29,13 +28,8 @@ import com.yahoo.vespa.hosted.dockerapi.metrics.Dimensions; import com.yahoo.vespa.hosted.dockerapi.metrics.MetricReceiverWrapper; import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.net.Inet6Address; -import java.net.InetAddress; import java.time.Duration; import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -48,15 +42,13 @@ import java.util.stream.Collectors; import java.util.stream.Stream; import static com.yahoo.vespa.defaults.Defaults.getDefaults; -import static com.yahoo.vespa.hosted.dockerapi.DockerNetworkCreator.NetworkAddressInterface; public class DockerImpl implements Docker { private static final Logger logger = Logger.getLogger(DockerImpl.class.getName()); static final String LABEL_NAME_MANAGEDBY = "com.yahoo.vespa.managedby"; - private static final String DOCKER_CUSTOM_MACVLAN_NETWORK_NAME = "vespa-macvlan"; private static final String FRAMEWORK_CONTAINER_PREFIX = "/"; - private static final int SECONDS_TO_WAIT_BEFORE_KILLING = 10; + private static final Duration WAIT_BEFORE_KILLING = Duration.ofSeconds(10); private final Object monitor = new Object(); private final Set<DockerImage> scheduledPulls = new HashSet<>(); @@ -79,43 +71,6 @@ public class DockerImpl implements Docker { } @Override - public void start() { - try { - setupDockerNetworkIfNeeded(); - } catch (Exception e) { - throw new DockerException("Could not setup docker network", e); - } - } - - private void setupDockerNetworkIfNeeded() throws IOException { - if (!dockerClient.listNetworksCmd().withNameFilter(DOCKER_CUSTOM_MACVLAN_NETWORK_NAME).exec().isEmpty()) return; - - // Use IPv6 address if there is a mix of IP4 and IPv6 by taking the longest address. - List<InetAddress> hostAddresses = Arrays.asList(InetAddress.getAllByName(com.yahoo.net.HostName.getLocalhost())); - InetAddress hostAddress = Collections.max(hostAddresses, - (o1, o2) -> o1.getAddress().length - o2.getAddress().length); - - NetworkAddressInterface networkAddressInterface = DockerNetworkCreator.getInterfaceForAddress(hostAddress); - boolean isIPv6 = networkAddressInterface.interfaceAddress.getAddress() instanceof Inet6Address; - - Network.Ipam ipam = new Network.Ipam().withConfig(new Network.Ipam.Config() - .withSubnet(hostAddress.getHostAddress() + "/" + networkAddressInterface.interfaceAddress.getNetworkPrefixLength()) - .withGateway(DockerNetworkCreator.getDefaultGatewayLinux(isIPv6).getHostAddress())); - - Map<String, String> dockerNetworkOptions = new HashMap<>(); - dockerNetworkOptions.put("parent", networkAddressInterface.networkInterface.getDisplayName()); - dockerNetworkOptions.put("macvlan_mode", "bridge"); - - dockerClient.createNetworkCmd() - .withName(DOCKER_CUSTOM_MACVLAN_NETWORK_NAME) - .withDriver("macvlan") - .withEnableIpv6(isIPv6) - .withIpam(ipam) - .withOptions(dockerNetworkOptions) - .exec(); - } - - @Override public boolean pullImageAsyncIfNeeded(DockerImage image) { try { synchronized (monitor) { @@ -166,21 +121,6 @@ public class DockerImpl implements Docker { } @Override - public void connectContainerToNetwork(ContainerName containerName, String networkName) { - try { - dockerClient.connectToNetworkCmd() - .withContainerId(containerName.asString()) - .withNetworkId(networkName).exec(); - } catch (NotFoundException e) { - throw new ContainerNotFoundException(containerName); - } catch (RuntimeException e) { - numberOfDockerDaemonFails.add(); - throw new DockerException("Failed to connect container '" + containerName.asString() + - "' to network '" + networkName + "'", e); - } - } - - @Override public ProcessResult executeInContainer(ContainerName containerName, String... args) { return executeInContainerAsUser(containerName, getDefaults().vespaUser(), Optional.empty(), args); } @@ -285,7 +225,7 @@ public class DockerImpl implements Docker { @Override public void stopContainer(ContainerName containerName) { try { - dockerClient.stopContainerCmd(containerName.asString()).withTimeout(SECONDS_TO_WAIT_BEFORE_KILLING).exec(); + dockerClient.stopContainerCmd(containerName.asString()).withTimeout((int) WAIT_BEFORE_KILLING.getSeconds()).exec(); } catch (NotFoundException e) { throw new ContainerNotFoundException(containerName); } catch (NotModifiedException ignored) { diff --git a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerNetworkCreator.java b/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerNetworkCreator.java deleted file mode 100644 index 3fb1b12b883..00000000000 --- a/docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerNetworkCreator.java +++ /dev/null @@ -1,53 +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.dockerapi; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.InetAddress; -import java.net.InterfaceAddress; -import java.net.NetworkInterface; -import java.net.SocketException; -import java.net.UnknownHostException; -import java.util.Collections; - -/** - * @author freva - */ -public class DockerNetworkCreator { - private static InetAddress hostDefaultGateway; - - public static InetAddress getDefaultGatewayLinux(boolean ipv6) throws IOException { - if (hostDefaultGateway == null) { - String command = ipv6 ? "route -A inet6 -n | grep 'UG[ \t]' | awk '{print $2}'" : - "route -n | grep 'UG[ \t]' | awk '{print $2}'"; - Process result = Runtime.getRuntime().exec(new String[]{"sh", "-c", command}); - BufferedReader output = new BufferedReader(new InputStreamReader(result.getInputStream())); - hostDefaultGateway = InetAddress.getByName(output.readLine()); - } - - return hostDefaultGateway; - } - - static NetworkAddressInterface getInterfaceForAddress(InetAddress address) throws SocketException, UnknownHostException { - for (NetworkInterface netinter : Collections.list(NetworkInterface.getNetworkInterfaces())) { - for (InterfaceAddress interAddr : netinter.getInterfaceAddresses()) { - if (address.equals(interAddr.getAddress())) { - return new NetworkAddressInterface(netinter, interAddr); - } - } - } - - throw new UnknownHostException("Could not find Ethernet interface address"); - } - - static class NetworkAddressInterface { - final NetworkInterface networkInterface; - final InterfaceAddress interfaceAddress; - - NetworkAddressInterface(NetworkInterface networkInterface, InterfaceAddress interfaceAddress) { - this.networkInterface = networkInterface; - this.interfaceAddress = interfaceAddress; - } - } -} |