diff options
author | freva <valerijf@yahoo-inc.com> | 2017-01-25 11:07:07 +0100 |
---|---|---|
committer | freva <valerijf@yahoo-inc.com> | 2017-01-25 11:07:07 +0100 |
commit | 22f0dccd3eda99c4954b4f8039797ab427ca8136 (patch) | |
tree | edf83d447551521f16bd45d9e2c25672a7f10605 /node-admin | |
parent | 1eb6a0e05aea2979f5b8f118d11422dd425fb81f (diff) |
Use nsenter to set default gw
Diffstat (limited to 'node-admin')
-rw-r--r-- | node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java | 39 |
1 files changed, 6 insertions, 33 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 94a0935777d..45c9f97d0d8 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 @@ -10,6 +10,7 @@ import com.yahoo.vespa.hosted.dockerapi.ContainerName; import com.yahoo.vespa.hosted.dockerapi.Docker; import com.yahoo.vespa.hosted.dockerapi.DockerImage; import com.yahoo.vespa.hosted.dockerapi.DockerImpl; +import com.yahoo.vespa.hosted.dockerapi.DockerNetworkCreator; import com.yahoo.vespa.hosted.dockerapi.ProcessResult; import com.yahoo.vespa.hosted.dockerapi.metrics.Dimensions; import com.yahoo.vespa.hosted.dockerapi.metrics.GaugeWrapper; @@ -22,7 +23,6 @@ import java.io.IOException; import java.io.InputStreamReader; import java.net.Inet6Address; import java.net.InetAddress; -import java.net.UnknownHostException; import java.util.Arrays; import java.util.HashMap; import java.util.LinkedList; @@ -243,7 +243,7 @@ public class DockerOperationsImpl implements DockerOperations { DIRECTORIES_TO_MOUNT.entrySet().stream().filter(Map.Entry::getValue).forEach(entry -> docker.executeInContainer(nodeSpec.containerName, "sudo", "chmod", "-R", "a+w", entry.getKey())); - } catch (UnknownHostException e) { + } catch (IOException e) { throw new RuntimeException("Failed to create container " + nodeSpec.containerName.asString(), e); } } @@ -252,37 +252,10 @@ public class DockerOperationsImpl implements DockerOperations { * Due to a bug in docker (https://github.com/docker/libnetwork/issues/1443), we need to manually set * IPv6 gateway in containers connected to more than one docker network */ - private void setupContainerNetworkingWithScript(ContainerName containerName) { - PrefixLogger logger = PrefixLogger.getNodeAgentLogger(DockerOperationsImpl.class, containerName); - - Docker.ContainerInfo containerInfo = docker.inspectContainer(containerName) - .orElseThrow(() -> new RuntimeException("Container " + containerName + " does not exist")); - - Integer containerPid = containerInfo.getPid() - .orElseThrow(() -> new RuntimeException("Container " + containerName + " isn't running (pid not found)")); - - final List<String> command = new LinkedList<>(); - command.add("sudo"); - command.add(getDefaults().underVespaHome("libexec/vespa/node-admin/configure-container-networking.py")); - command.add("--fix-docker-gateway"); - command.add(containerPid.toString()); - - for (int retry = 0; retry < 30; ++retry) { - try { - commandExecutor.accept(command); - logger.info("Done setting up network"); - return; - } catch (Exception e) { - final int sleepSecs = 3; - logger.warning("Failed to configure network with command " + command - + ", will retry in " + sleepSecs + " seconds", e); - try { - Thread.sleep(sleepSecs * 1000); - } catch (InterruptedException e1) { - logger.warning("Sleep interrupted", e1); - } - } - } + private void setupContainerNetworkingWithScript(ContainerName containerName) throws IOException { + InetAddress hostDefaultGateway = DockerNetworkCreator.getDefaultGatewayLinux(true); + executeCommandInNetworkNamespace(containerName, new String[]{ + "route", "-A", "inet6", "add", "default", "gw", hostDefaultGateway.getHostAddress(), "dev", "eth1"}); } @Override |