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