diff options
author | Valerij Fredriksen <freva@users.noreply.github.com> | 2020-03-20 16:57:59 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-20 16:57:59 +0100 |
commit | a686c94ff2d01cc05aad1acc901bfc118d17df67 (patch) | |
tree | 2638ed2e8cc31d872da8914b422c1b1de7078e87 | |
parent | 08ef563613dd267cde78882b3caceaad5f69507d (diff) | |
parent | b70e74318ff8eedc7a107eb4e451b56c34e1e608 (diff) |
Merge pull request #12642 from vespa-engine/freva/set-vespa-home-to-opt-vespa
Perform asymmetric Vespa home mount for vespa/ci image
3 files changed, 41 insertions, 1 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 a49dec4c0f2..f5bb46ef62a 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 @@ -295,7 +295,9 @@ public class DockerOperationsImpl implements DockerOperations { } else if (context.nodeType() == NodeType.tenant) paths.add(varLibSia); - paths.forEach(path -> command.withVolume(context.pathOnHostFromPathInNode(path), path)); + paths.forEach(path -> command.withVolume( + context.pathOnHostFromPathInNode(path), + context.rewritePathInNodeForWantedDockerImage(path))); // Shared paths diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContext.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContext.java index 821765fea20..2820fb2fa70 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContext.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContext.java @@ -12,6 +12,7 @@ import com.yahoo.vespa.hosted.node.admin.configserver.noderepository.NodeSpec; import com.yahoo.vespa.hosted.node.admin.docker.DockerNetworking; import java.nio.file.Path; +import java.nio.file.Paths; public interface NodeAgentContext extends TaskContext { @@ -82,4 +83,19 @@ public interface NodeAgentContext extends TaskContext { /** @see #pathInNodeUnderVespaHome(Path) */ Path pathInNodeUnderVespaHome(String relativePath); + + /** + * Rewrite the given path in node to a path required by the image. + * WARNING: This method should only be used when starting the docker container, e.g. writing container data or + * configuring mounts. + * TODO: Remove when everyone has migrated of vespa/ci image + */ + default Path rewritePathInNodeForWantedDockerImage(Path path) { + if (!node().wantedDockerImage().get().repository().endsWith("/vespa/ci")) return path; + + Path originalVespaHome = pathInNodeUnderVespaHome(""); + if (!path.startsWith(originalVespaHome)) return path; + + return Paths.get("/home/y").resolve(originalVespaHome.relativize(path)); + } } diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImplTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImplTest.java index e84d8345815..250c005566b 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImplTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImplTest.java @@ -1,10 +1,13 @@ // Copyright 2020 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.node.admin.nodeagent; +import com.yahoo.config.provision.DockerImage; import com.yahoo.vespa.test.file.TestFileSystem; import org.junit.Test; import java.nio.file.FileSystem; +import java.nio.file.Path; +import java.nio.file.Paths; import static org.junit.Assert.assertEquals; @@ -69,4 +72,23 @@ public class NodeAgentContextImplTest { public void path_under_vespa_home_must_be_relative() { context.pathInNodeUnderVespaHome("/home"); } + + @Test + public void rewrites_vespa_home_mount_point() { + assertRewrite("docker.tld/vespa/ci:1.2.3", "/var/log", "/var/log"); + assertRewrite("docker.tld/vespa/ci:1.2.3", "/home/y/log", "/home/y/log"); + assertRewrite("docker.tld/vespa/ci:1.2.3", "/opt/vespa/log", "/home/y/log"); + + assertRewrite("docker.tld/vespa/hosted:1.2.3", "/var/log", "/var/log"); + assertRewrite("docker.tld/vespa/hosted:1.2.3", "/home/y/log", "/home/y/log"); + assertRewrite("docker.tld/vespa/hosted:1.2.3", "/opt/vespa/log", "/opt/vespa/log"); + } + + private static void assertRewrite(String dockerImage, String path, String expected) { + NodeAgentContext context = new NodeAgentContextImpl.Builder("node123") + .nodeSpecBuilder(ns -> ns.wantedDockerImage(DockerImage.fromString(dockerImage))) + .build(); + Path actual = context.rewritePathInNodeForWantedDockerImage(Paths.get(path)); + assertEquals(Paths.get(expected), actual); + } } |