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