summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2019-05-20 22:18:39 +0200
committerGitHub <noreply@github.com>2019-05-20 22:18:39 +0200
commitcb2cf274bcddcfa5f2e7f37a9024f3f66b6fae28 (patch)
treef4863199d1053e1d2b2ff9c14bde00eed271a7e0
parent7f238dc9ef9da7a75e9a8e53722802e8ab1f00cc (diff)
parentc1f24bc229c09ab67012d8e7327e9f49780f9573 (diff)
Merge pull request #9451 from vespa-engine/hmusum/add-support-for-creating-symbolic-link
Add support for creating a symbolic link
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/ContainerData.java15
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java18
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/file/UnixPath.java10
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/file/UnixPathTest.java12
4 files changed, 53 insertions, 2 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/ContainerData.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/ContainerData.java
index ab5795f17c2..2e7b764df0b 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/ContainerData.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/ContainerData.java
@@ -16,5 +16,20 @@ public interface ContainerData {
* @param data The content of the file.
*/
void addFile(Path pathInContainer, String data);
+
+ /**
+ * Remove file in container at path.
+ *
+ * @param pathInContainer The path to the file inside the container, absolute or relative root /.
+ */
+ default void removeFile(Path pathInContainer) { /* TODO: Remove this when implementing classes have been updated */ }
+
+ /**
+ * Symlink to a file in container at path.
+ *
+ * @param symlink The path to the symlink inside the container, absolute or relative root /.
+ * @param target The path to the target file for the symbolic link inside the container, absolute or relative root /.
+ */
+ default void createSymlink(Path symlink, Path target) { /* TODO: Remove this when implementing classes have been updated */ }
}
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java
index abbf96a515c..50bf57c78ff 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentImpl.java
@@ -31,6 +31,7 @@ import com.yahoo.vespa.hosted.node.admin.maintenance.identity.CredentialsMaintai
import com.yahoo.vespa.hosted.node.admin.nodeadmin.ConvergenceException;
import com.yahoo.vespa.hosted.node.admin.util.SecretAgentCheckConfig;
+import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@@ -703,8 +704,21 @@ public class NodeAgentImpl implements NodeAgent {
}
protected ContainerData createContainerData(NodeAgentContext context) {
- return (pathInContainer, data) -> {
- throw new UnsupportedOperationException("addFile not implemented");
+ return new ContainerData() {
+ @Override
+ public void addFile(Path pathInContainer, String data) {
+ throw new UnsupportedOperationException("addFile not implemented");
+ }
+
+ @Override
+ public void removeFile(Path pathInContainer) {
+ throw new UnsupportedOperationException("removeFile not implemented");
+ }
+
+ @Override
+ public void createSymlink(Path symlink, Path pathInContainer) {
+ throw new UnsupportedOperationException("createSymlink not implemented");
+ }
};
}
}
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/file/UnixPath.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/file/UnixPath.java
index e2b19e73fa3..1d0299ae272 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/file/UnixPath.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/file/UnixPath.java
@@ -207,6 +207,16 @@ public class UnixPath {
}
}
+ /**
+ * Creates a symbolic link from {@code link} to {@code this} (the target)
+ * @param link the path for the symbolic link
+ * @return the path to the symbolic link
+ */
+ public UnixPath createSymbolicLink(Path link) {
+ uncheck(() -> Files.createSymbolicLink(link, path));
+ return new UnixPath(link);
+ }
+
@Override
public String toString() {
return path.toString();
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/file/UnixPathTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/file/UnixPathTest.java
index 9b80b9a9ca2..6dfbc258474 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/file/UnixPathTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/file/UnixPathTest.java
@@ -75,4 +75,16 @@ public class UnixPathTest {
assertTrue(unixPath.isDirectory());
assertEquals(permissions, unixPath.getPermissions());
}
+
+ @Test
+ public void createSymbolicLink() {
+ String original = "foo\nbar\n";
+ UnixPath path = new UnixPath(fs.getPath("example.txt"));
+ path.writeUtf8File(original);
+ String fromFile = path.readUtf8File();
+ assertEquals(original, fromFile);
+
+ UnixPath link = path.createSymbolicLink(fs.getPath("link-to-example.txt"));
+ assertEquals(original, link.readUtf8File());
+ }
}