diff options
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()); + } } |