summaryrefslogtreecommitdiffstats
path: root/node-admin
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@yahooinc.com>2022-04-05 14:35:31 +0200
committerValerij Fredriksen <valerijf@yahooinc.com>2022-04-05 17:01:56 +0200
commit0487ad0e9ef3042c2e5f0f52c257560420e4dbd7 (patch)
tree412e4a7b42313f2d58efc4b9b5efefd32488bbfa /node-admin
parent7cc19acd16eefc3b8843a0b1b8c3e676f68b075a (diff)
Support setting permission on all create directory/file methods in UnixPath
Diffstat (limited to 'node-admin')
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/file/MakeDirectory.java10
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/file/UnixPath.java39
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);