at master 2.2 kB view raw
1{ pkgs, ... }: 2 3let 4 master = 5 { pkgs, ... }: 6 { 7 # data base is stored in memory 8 # server crashes with default memory size 9 virtualisation.memorySize = 1024; 10 11 services.moosefs.master = { 12 enable = true; 13 openFirewall = true; 14 autoInit = true; 15 exports = [ 16 "* / rw,alldirs,admin,maproot=0:0" 17 "* . rw" 18 ]; 19 }; 20 }; 21 22 chunkserver = 23 { pkgs, ... }: 24 { 25 virtualisation.emptyDiskImages = [ 26 { 27 size = 4096; 28 driveConfig.deviceExtraOpts.serial = "data"; 29 } 30 ]; 31 32 fileSystems = pkgs.lib.mkVMOverride { 33 "/data" = { 34 device = "/dev/disk/by-id/virtio-data"; 35 fsType = "ext4"; 36 autoFormat = true; 37 }; 38 }; 39 40 services.moosefs = { 41 masterHost = "master"; 42 chunkserver = { 43 openFirewall = true; 44 enable = true; 45 hdds = [ "~/data" ]; 46 }; 47 }; 48 }; 49 50 metalogger = 51 { pkgs, ... }: 52 { 53 services.moosefs = { 54 masterHost = "master"; 55 metalogger.enable = true; 56 }; 57 }; 58 59 client = 60 { pkgs, ... }: 61 { 62 services.moosefs.client.enable = true; 63 }; 64 65in 66{ 67 name = "moosefs"; 68 69 nodes = { 70 inherit master; 71 inherit metalogger; 72 chunkserver1 = chunkserver; 73 chunkserver2 = chunkserver; 74 client1 = client; 75 client2 = client; 76 }; 77 78 testScript = '' 79 # prepare master server 80 master.start() 81 master.wait_for_unit("multi-user.target") 82 master.wait_for_unit("mfs-master.service") 83 84 metalogger.wait_for_unit("mfs-metalogger.service") 85 86 for chunkserver in [chunkserver1, chunkserver2]: 87 chunkserver.wait_for_unit("multi-user.target") 88 chunkserver.succeed("chown moosefs:moosefs /data") 89 chunkserver.succeed("systemctl restart mfs-chunkserver") 90 chunkserver.wait_for_unit("mfs-chunkserver.service") 91 92 for client in [client1, client2]: 93 client.wait_for_unit("multi-user.target") 94 client.succeed("mkdir /moosefs") 95 client.succeed("mount -t moosefs master:/ /moosefs") 96 97 client1.succeed("echo test > /moosefs/file") 98 client2.succeed("grep test /moosefs/file") 99 ''; 100}