summaryrefslogtreecommitdiffstats
path: root/docker-api
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@oath.com>2018-10-04 12:40:40 +0200
committerValerij Fredriksen <valerijf@oath.com>2018-10-04 12:40:40 +0200
commit1932c6ea74b9ac2d2695eaf1a5a6de592ce807d2 (patch)
tree9f9ee4bf1fc3f218d6faad24c98a1543cfbadbba /docker-api
parent29d2e7a3f9cb5d1e69e6a94d14865333cd208079 (diff)
Remove macvlan from docker-api
Diffstat (limited to 'docker-api')
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/Docker.java7
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerImpl.java64
-rw-r--r--docker-api/src/main/java/com/yahoo/vespa/hosted/dockerapi/DockerNetworkCreator.java53
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;
- }
- }
-}