diff options
author | Valerij Fredriksen <valerijf@yahooinc.com> | 2022-04-05 14:35:31 +0200 |
---|---|---|
committer | Valerij Fredriksen <valerijf@yahooinc.com> | 2022-04-05 17:01:56 +0200 |
commit | 0487ad0e9ef3042c2e5f0f52c257560420e4dbd7 (patch) | |
tree | 412e4a7b42313f2d58efc4b9b5efefd32488bbfa /node-admin/src | |
parent | 7cc19acd16eefc3b8843a0b1b8c3e676f68b075a (diff) |
Support setting permission on all create directory/file methods in UnixPath
Diffstat (limited to 'node-admin/src')
2 files changed, 21 insertions, 28 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/file/MakeDirectory.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/file/MakeDirectory.java index 61c4e7475a6..175f9a581a4 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/file/MakeDirectory.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/file/MakeDirectory.java @@ -50,21 +50,17 @@ public class MakeDirectory { throw new UncheckedIOException(new NotDirectoryException(path.toString())); } } else { + Optional<String> permissions = attributeSync.getPermissions(); if (createParents) { // We'll skip logging system modification here, as we'll log about the creation // of the directory next. - path.createParents(); + permissions.ifPresentOrElse(path::createParents, path::createParents); } context.recordSystemModification(logger, "Creating directory " + path); systemModified = true; - Optional<String> permissions = attributeSync.getPermissions(); - if (permissions.isPresent()) { - path.createDirectory(permissions.get()); - } else { - path.createDirectory(); - } + permissions.ifPresentOrElse(path::createDirectory, path::createDirectory); } systemModified |= attributeSync.converge(context, attributesCache); 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 cc780e277ad..ac5035216e9 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 @@ -114,9 +114,7 @@ public class UnixPath { public UnixPath writeBytes(byte[] content, String permissions, OpenOption... options) { FileAttribute<?>[] attributes = Optional.ofNullable(permissions) - .map(this::getPosixFilePermissionsFromString) - .map(PosixFilePermissions::asFileAttribute) - .map(attribute -> new FileAttribute<?>[]{attribute}) + .map(this::permissionsAsFileAttributes) .orElseGet(() -> new FileAttribute<?>[0]); Set<OpenOption> optionsSet = options.length == 0 ? DEFAULT_OPEN_OPTIONS : Set.of(options); @@ -202,27 +200,20 @@ public class UnixPath { return ifExists(this::getAttributes); } - public UnixPath createNewFile() { - uncheck(() -> Files.createFile(path)); + public UnixPath createNewFile(String... permissions) { + uncheck(() -> Files.createFile(path, permissionsAsFileAttributes(permissions))); return this; } - public UnixPath createParents() { - uncheck(() -> Files.createDirectories(path.getParent())); + public UnixPath createParents(String... permissions) { + getParent().createDirectories(permissions); return this; } - public UnixPath createDirectory(String permissions) { - Set<PosixFilePermission> set = getPosixFilePermissionsFromString(permissions); - FileAttribute<Set<PosixFilePermission>> attribute = PosixFilePermissions.asFileAttribute(set); - uncheck(() -> Files.createDirectory(path, attribute)); - return this; - } - - /** Create directory unless it already exists, and return this. */ - public UnixPath createDirectory() { + /** Create directory with given permissions, unless it already exists, and return this. */ + public UnixPath createDirectory(String... permissions) { try { - Files.createDirectory(path); + Files.createDirectory(path, permissionsAsFileAttributes(permissions)); } catch (FileAlreadyExistsException ignore) { } catch (IOException e) { throw new UncheckedIOException(e); @@ -230,8 +221,8 @@ public class UnixPath { return this; } - public UnixPath createDirectories() { - uncheck(() -> Files.createDirectories(path)); + public UnixPath createDirectories(String... permissions) { + uncheck(() -> Files.createDirectories(path, permissionsAsFileAttributes(permissions))); return this; } @@ -318,13 +309,19 @@ public class UnixPath { return new UnixPath(link); } - public FileSnapshot getFileSnapshot() { return FileSnapshot.forPath(path); } - @Override public String toString() { return path.toString(); } + private FileAttribute<?>[] permissionsAsFileAttributes(String... permissions) { + if (permissions.length == 0) return new FileAttribute<?>[0]; + if (permissions.length > 1) + throw new IllegalArgumentException("Expected permissions to not be set or be a single string"); + + return new FileAttribute<?>[]{PosixFilePermissions.asFileAttribute(getPosixFilePermissionsFromString(permissions[0]))}; + } + private Set<PosixFilePermission> getPosixFilePermissionsFromString(String permissions) { try { return PosixFilePermissions.fromString(permissions); |