Merge pull request #104420 from danielfullmer/syncoid-perm-fix

This commit is contained in:
Sandro 2021-05-22 17:57:56 +02:00 committed by GitHub
commit 7be85b5090
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 23 deletions

View File

@ -197,14 +197,14 @@ in {
])) (attrValues cfg.commands); ])) (attrValues cfg.commands);
after = [ "zfs.target" ]; after = [ "zfs.target" ];
serviceConfig = { serviceConfig = {
ExecStartPre = (map (pool: lib.escapeShellArgs [ ExecStartPre = let
"+/run/booted-system/sw/bin/zfs" "allow" allowCmd = permissions: pool: lib.escapeShellArgs [
cfg.user "hold,send" pool "+/run/booted-system/sw/bin/zfs" "allow"
]) (getPools "source")) ++ cfg.user (concatStringsSep "," permissions) pool
(map (pool: lib.escapeShellArgs [ ];
"+/run/booted-system/sw/bin/zfs" "allow" in
cfg.user "create,mount,receive,rollback" pool (map (allowCmd [ "hold" "send" "snapshot" "destroy" ]) (getPools "source")) ++
]) (getPools "target")); (map (allowCmd [ "create" "mount" "receive" "rollback" ]) (getPools "target"));
User = cfg.user; User = cfg.user;
Group = cfg.group; Group = cfg.group;
}; };

View File

@ -33,14 +33,22 @@ in {
autosnap = true; autosnap = true;
}; };
datasets."pool/test".useTemplate = [ "test" ]; datasets."pool/sanoid".useTemplate = [ "test" ];
extraArgs = [ "--verbose" ];
}; };
services.syncoid = { services.syncoid = {
enable = true; enable = true;
sshKey = "/var/lib/syncoid/id_ecdsa"; sshKey = "/var/lib/syncoid/id_ecdsa";
commonArgs = [ "--no-sync-snap" ]; commands = {
commands."pool/test".target = "root@target:pool/test"; # Sync snapshot taken by sanoid
"pool/sanoid" = {
target = "root@target:pool/sanoid";
extraArgs = [ "--no-sync-snap" ];
};
# Take snapshot and sync
"pool/syncoid".target = "root@target:pool/syncoid";
};
}; };
}; };
target = { ... }: { target = { ... }: {
@ -54,18 +62,19 @@ in {
testScript = '' testScript = ''
source.succeed( source.succeed(
"mkdir /tmp/mnt", "mkdir /mnt",
"parted --script /dev/vdb -- mklabel msdos mkpart primary 1024M -1s", "parted --script /dev/vdb -- mklabel msdos mkpart primary 1024M -1s",
"udevadm settle", "udevadm settle",
"zpool create pool /dev/vdb1", "zpool create pool -R /mnt /dev/vdb1",
"zfs create -o mountpoint=legacy pool/test", "zfs create pool/sanoid",
"mount -t zfs pool/test /tmp/mnt", "zfs create pool/syncoid",
"udevadm settle", "udevadm settle",
) )
target.succeed( target.succeed(
"mkdir /mnt",
"parted --script /dev/vdb -- mklabel msdos mkpart primary 1024M -1s", "parted --script /dev/vdb -- mklabel msdos mkpart primary 1024M -1s",
"udevadm settle", "udevadm settle",
"zpool create pool /dev/vdb1", "zpool create pool -R /mnt /dev/vdb1",
"udevadm settle", "udevadm settle",
) )
@ -76,16 +85,15 @@ in {
"chown -R syncoid:syncoid /var/lib/syncoid/", "chown -R syncoid:syncoid /var/lib/syncoid/",
) )
source.succeed("touch /tmp/mnt/test.txt") # Take snapshot with sanoid
source.succeed("touch /mnt/pool/sanoid/test.txt")
source.systemctl("start --wait sanoid.service") source.systemctl("start --wait sanoid.service")
# Sync snapshots
target.wait_for_open_port(22) target.wait_for_open_port(22)
source.succeed("touch /mnt/pool/syncoid/test.txt")
source.systemctl("start --wait syncoid.service") source.systemctl("start --wait syncoid.service")
target.succeed( target.succeed("cat /mnt/pool/sanoid/test.txt")
"mkdir /tmp/mnt", target.succeed("cat /mnt/pool/syncoid/test.txt")
"zfs set mountpoint=legacy pool/test",
"mount -t zfs pool/test /tmp/mnt",
)
target.succeed("cat /tmp/mnt/test.txt")
''; '';
}) })