at 25.11-pre 3.1 kB view raw
1import ./make-test-python.nix ( 2 { pkgs, lib, ... }: 3 4 let 5 master = 6 { pkgs, ... }: 7 { 8 # data base is stored in memory 9 # server may crash with default memory size 10 virtualisation.memorySize = 1024; 11 12 services.saunafs.master = { 13 enable = true; 14 openFirewall = true; 15 exports = [ 16 "* / rw,alldirs,maproot=0:0" 17 ]; 18 }; 19 }; 20 21 chunkserver = 22 { pkgs, ... }: 23 { 24 virtualisation.emptyDiskImages = [ 4096 ]; 25 boot.initrd.postDeviceCommands = '' 26 ${pkgs.e2fsprogs}/bin/mkfs.ext4 -L data /dev/vdb 27 ''; 28 29 fileSystems = pkgs.lib.mkVMOverride { 30 "/data" = { 31 device = "/dev/disk/by-label/data"; 32 fsType = "ext4"; 33 }; 34 }; 35 36 services.saunafs = { 37 masterHost = "master"; 38 chunkserver = { 39 openFirewall = true; 40 enable = true; 41 hdds = [ "/data" ]; 42 43 # The test image is too small and gets set to "full" 44 settings.HDD_LEAVE_SPACE_DEFAULT = "100M"; 45 }; 46 }; 47 }; 48 49 metalogger = 50 { pkgs, ... }: 51 { 52 services.saunafs = { 53 masterHost = "master"; 54 metalogger.enable = true; 55 }; 56 }; 57 58 client = 59 { pkgs, lib, ... }: 60 { 61 services.saunafs.client.enable = true; 62 # systemd.tmpfiles.rules = [ "d /sfs 755 root root -" ]; 63 systemd.network.enable = true; 64 65 # Use networkd to have properly functioning 66 # network-online.target 67 networking = { 68 useDHCP = false; 69 useNetworkd = true; 70 }; 71 72 systemd.mounts = [ 73 { 74 requires = [ "network-online.target" ]; 75 after = [ "network-online.target" ]; 76 wantedBy = [ "remote-fs.target" ]; 77 type = "saunafs"; 78 what = "master:/"; 79 where = "/sfs"; 80 } 81 ]; 82 }; 83 84 in 85 { 86 name = "saunafs"; 87 88 meta.maintainers = [ lib.maintainers.markuskowa ]; 89 90 nodes = { 91 inherit master metalogger; 92 chunkserver1 = chunkserver; 93 chunkserver2 = chunkserver; 94 client1 = client; 95 client2 = client; 96 }; 97 98 testScript = '' 99 # prepare master server 100 master.start() 101 master.wait_for_unit("multi-user.target") 102 master.succeed("sfsmaster-init") 103 master.succeed("systemctl restart sfs-master") 104 master.wait_for_unit("sfs-master.service") 105 106 metalogger.wait_for_unit("sfs-metalogger.service") 107 108 # Setup chunkservers 109 for chunkserver in [chunkserver1, chunkserver2]: 110 chunkserver.wait_for_unit("multi-user.target") 111 chunkserver.succeed("chown saunafs:saunafs /data") 112 chunkserver.succeed("systemctl restart sfs-chunkserver") 113 chunkserver.wait_for_unit("sfs-chunkserver.service") 114 115 for client in [client1, client2]: 116 client.wait_for_unit("multi-user.target") 117 118 client1.succeed("echo test > /sfs/file") 119 client2.succeed("grep test /sfs/file") 120 ''; 121 } 122)