1import ./make-test-python.nix (
2 { pkgs, lib, ... }:
3 let
4 drbdPort = 7789;
5
6 drbdConfig =
7 { nodes, ... }:
8 {
9 virtualisation.emptyDiskImages = [ 1 ];
10 networking.firewall.allowedTCPPorts = [ drbdPort ];
11
12 services.drbd = {
13 enable = true;
14 config = ''
15 global {
16 usage-count yes;
17 }
18
19 common {
20 net {
21 protocol C;
22 ping-int 1;
23 }
24 }
25
26 resource r0 {
27 volume 0 {
28 device /dev/drbd0;
29 disk /dev/vdb;
30 meta-disk internal;
31 }
32
33 on drbd1 {
34 address ${nodes.drbd1.config.networking.primaryIPAddress}:${toString drbdPort};
35 }
36
37 on drbd2 {
38 address ${nodes.drbd2.config.networking.primaryIPAddress}:${toString drbdPort};
39 }
40 }
41 '';
42 };
43 };
44 in
45 {
46 name = "drbd";
47 meta = with pkgs.lib.maintainers; {
48 maintainers = [ ryantm astro ];
49 };
50
51 nodes.drbd1 = drbdConfig;
52 nodes.drbd2 = drbdConfig;
53
54 testScript = { nodes }: ''
55 drbd1.start()
56 drbd2.start()
57
58 drbd1.wait_for_unit("network.target")
59 drbd2.wait_for_unit("network.target")
60
61 drbd1.succeed(
62 "drbdadm create-md r0",
63 "drbdadm up r0",
64 "drbdadm primary r0 --force",
65 )
66
67 drbd2.succeed("drbdadm create-md r0", "drbdadm up r0")
68
69 drbd1.succeed(
70 "mkfs.ext4 /dev/drbd0",
71 "mkdir -p /mnt/drbd",
72 "mount /dev/drbd0 /mnt/drbd",
73 "touch /mnt/drbd/hello",
74 "umount /mnt/drbd",
75 "drbdadm secondary r0",
76 )
77 drbd1.sleep(1)
78
79 drbd2.succeed(
80 "drbdadm primary r0",
81 "mkdir -p /mnt/drbd",
82 "mount /dev/drbd0 /mnt/drbd",
83 "ls /mnt/drbd/hello",
84 )
85 '';
86 }
87)