summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@verizonmedia.com>2020-03-20 09:09:15 +0100
committerValerij Fredriksen <valerijf@verizonmedia.com>2020-03-20 12:43:46 +0100
commitb70e74318ff8eedc7a107eb4e451b56c34e1e608 (patch)
treed35e1c737921f53afa378821287ed5cd1a642653
parentcc659eb6a33016e412f89b797ea09b10fa4c5f3a (diff)
Perform asymetric 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);
+ }
}