summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorValerij Fredriksen <freva@users.noreply.github.com>2020-03-20 16:57:59 +0100
committerGitHub <noreply@github.com>2020-03-20 16:57:59 +0100
commita686c94ff2d01cc05aad1acc901bfc118d17df67 (patch)
tree2638ed2e8cc31d872da8914b422c1b1de7078e87
parent08ef563613dd267cde78882b3caceaad5f69507d (diff)
parentb70e74318ff8eedc7a107eb4e451b56c34e1e608 (diff)
Merge pull request #12642 from vespa-engine/freva/set-vespa-home-to-opt-vespa
Perform asymmetric Vespa home mount for vespa/ci image
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/docker/DockerOperationsImpl.java4
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContext.java16
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContextImplTest.java22
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);
+ }
}