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