modules/external-storage: support local backends that aren't underlays

This commit is contained in:
Max Headroom 2024-06-05 23:04:33 +02:00
parent cb15c55220
commit 1283d32691

View file

@ -72,11 +72,12 @@ in
name = fs.unitName; name = fs.unitName;
value = let value = let
isUnderlay = fs.underlay != null; isUnderlay = fs.underlay != null;
underlayPath = cfg.underlays.${fs.underlay}.mountpoint;
backendUrl = if isUnderlay then "local://${underlayPath}" else fs.backend; backendUrl = if isUnderlay then "local://${localBackendPath}" else fs.backend;
fsType = if isUnderlay then "local" else lib.head (lib.strings.match "([a-z0-9]*)://.*" backendUrl); fsType = if isUnderlay then "local" else lib.head (lib.strings.match "([a-z0-9]*)://.*" backendUrl);
localBackendPath = if isUnderlay then cfg.underlays.${fs.underlay}.mountpoint else lib.head (lib.strings.match "[a-z0-9]*://(/.*)" backendUrl);
in { in {
description = fs.unitDescription; description = fs.unitDescription;
wantedBy = [ "multi-user.target" ]; wantedBy = [ "multi-user.target" ];
@ -89,7 +90,7 @@ in
util-linux util-linux
]; ];
unitConfig.RequiresMountsFor = lib.mkIf isUnderlay underlayPath; unitConfig.RequiresMountsFor = lib.mkIf isUnderlay localBackendPath;
serviceConfig = let serviceConfig = let
commonOptions = [ commonOptions = [
@ -113,7 +114,7 @@ in
''; '';
detectFs = { detectFs = {
local = "test -e ${underlayPath}/s3ql_metadata"; local = "test -e ${localBackendPath}/s3ql_metadata";
}.${fsType} or null; }.${fsType} or null;
in pkgs.writeShellScript "create-s3ql-filesystem" (lib.optionalString (detectFs != null) '' in pkgs.writeShellScript "create-s3ql-filesystem" (lib.optionalString (detectFs != null) ''
if ! ${detectFs}; then if ! ${detectFs}; then