nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
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}