1{ pkgs, lib, ... }:
2
3let
4 client =
5 { pkgs, ... }:
6 {
7 environment.systemPackages = [ pkgs.glusterfs ];
8 virtualisation.fileSystems = {
9 "/gluster" = {
10 device = "server1:/gv0";
11 fsType = "glusterfs";
12 };
13 };
14 };
15
16 server =
17 { pkgs, ... }:
18 {
19 networking.firewall.enable = false;
20 services.glusterfs.enable = true;
21
22 virtualisation.emptyDiskImages = [
23 {
24 size = 1024;
25 driveConfig.deviceExtraOpts.serial = "data";
26 }
27 ];
28
29 virtualisation.fileSystems = {
30 "/data" = {
31 device = "/dev/disk/by-id/virtio-data";
32 fsType = "ext4";
33 autoFormat = true;
34 };
35 };
36 };
37in
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}