1import ./make-test-python.nix (
2 { pkgs, lib, ... }:
3
4 let
5 client =
6 { pkgs, ... }:
7 {
8 environment.systemPackages = [ pkgs.glusterfs ];
9 virtualisation.fileSystems = {
10 "/gluster" = {
11 device = "server1:/gv0";
12 fsType = "glusterfs";
13 };
14 };
15 };
16
17 server =
18 { pkgs, ... }:
19 {
20 networking.firewall.enable = false;
21 services.glusterfs.enable = true;
22
23 # create a mount point for the volume
24 boot.initrd.postDeviceCommands = ''
25 ${pkgs.e2fsprogs}/bin/mkfs.ext4 -L data /dev/vdb
26 '';
27
28 virtualisation.emptyDiskImages = [ 1024 ];
29
30 virtualisation.fileSystems = {
31 "/data" = {
32 device = "/dev/disk/by-label/data";
33 fsType = "ext4";
34 };
35 };
36 };
37 in
38 {
39 name = "glusterfs";
40
41 nodes = {
42 server1 = server;
43 server2 = server;
44 client1 = client;
45 client2 = client;
46 };
47
48 testScript = ''
49 server1.wait_for_unit("glusterd.service")
50 server2.wait_for_unit("glusterd.service")
51
52 server1.wait_until_succeeds("gluster peer status")
53 server2.wait_until_succeeds("gluster peer status")
54
55 # establish initial contact
56 server1.succeed("gluster peer probe server2")
57 server1.succeed("gluster peer probe server1")
58
59 server1.succeed("gluster peer status | grep Connected")
60
61 # create volumes
62 server1.succeed("mkdir -p /data/vg0")
63 server2.succeed("mkdir -p /data/vg0")
64 server1.succeed("gluster volume create gv0 server1:/data/vg0 server2:/data/vg0")
65 server1.succeed("gluster volume start gv0")
66
67 # test clients
68 client1.wait_for_unit("gluster.mount")
69 client2.wait_for_unit("gluster.mount")
70
71 client1.succeed("echo test > /gluster/file1")
72 client2.succeed("grep test /gluster/file1")
73 '';
74 }
75)