at master 2.4 kB view raw
1{ ... }: 2 3let 4 server = 5 { pkgs, ... }: 6 { 7 networking.firewall.allowedTCPPorts = [ 3334 ]; 8 9 virtualisation.emptyDiskImages = [ 10 { 11 size = 4096; 12 driveConfig.deviceExtraOpts.serial = "data"; 13 } 14 ]; 15 16 virtualisation.fileSystems = { 17 "/data" = { 18 device = "/dev/disk/by-id/virtio-data"; 19 fsType = "ext4"; 20 autoFormat = true; 21 }; 22 }; 23 24 services.orangefs.server = { 25 enable = true; 26 dataStorageSpace = "/data/storage"; 27 metadataStorageSpace = "/data/meta"; 28 servers = { 29 server1 = "tcp://server1:3334"; 30 server2 = "tcp://server2:3334"; 31 }; 32 }; 33 }; 34 35 client = 36 { lib, ... }: 37 { 38 networking.firewall.enable = true; 39 40 services.orangefs.client = { 41 enable = true; 42 fileSystems = [ 43 { 44 target = "tcp://server1:3334/orangefs"; 45 mountPoint = "/orangefs"; 46 } 47 ]; 48 }; 49 }; 50 51in 52{ 53 name = "orangefs"; 54 55 nodes = { 56 server1 = server; 57 server2 = server; 58 59 client1 = client; 60 client2 = client; 61 }; 62 63 testScript = '' 64 # format storage 65 for server in server1, server2: 66 server.start() 67 server.wait_for_unit("multi-user.target") 68 server.succeed("mkdir -p /data/storage /data/meta") 69 server.succeed("chown orangefs:orangefs /data/storage /data/meta") 70 server.succeed("chmod 0770 /data/storage /data/meta") 71 server.succeed( 72 "sudo -g orangefs -u orangefs pvfs2-server -f /etc/orangefs/server.conf" 73 ) 74 75 # start services after storage is formatted on all machines 76 for server in server1, server2: 77 server.succeed("systemctl start orangefs-server.service") 78 79 with subtest("clients can reach and mount the FS"): 80 for client in client1, client2: 81 client.start() 82 client.wait_for_unit("orangefs-client.service") 83 # Both servers need to be reachable 84 client.succeed("pvfs2-check-server -h server1 -f orangefs -n tcp -p 3334") 85 client.succeed("pvfs2-check-server -h server2 -f orangefs -n tcp -p 3334") 86 client.wait_for_unit("orangefs.mount") 87 88 with subtest("R/W test between clients"): 89 client1.succeed("echo test > /orangefs/file1") 90 client2.succeed("grep test /orangefs/file1") 91 ''; 92}