at master 1.7 kB view raw
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}