at 25.11-pre 2.1 kB view raw
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.networking.primaryIPAddress}:${toString drbdPort}; 35 } 36 37 on drbd2 { 38 address ${nodes.drbd2.networking.primaryIPAddress}:${toString drbdPort}; 39 } 40 } 41 ''; 42 }; 43 }; 44 in 45 { 46 name = "drbd"; 47 meta = with pkgs.lib.maintainers; { 48 maintainers = [ 49 ryantm 50 astro 51 birkb 52 ]; 53 }; 54 55 nodes.drbd1 = drbdConfig; 56 nodes.drbd2 = drbdConfig; 57 58 testScript = 59 { nodes }: 60 '' 61 drbd1.start() 62 drbd2.start() 63 64 drbd1.wait_for_unit("network.target") 65 drbd2.wait_for_unit("network.target") 66 67 drbd1.succeed( 68 "drbdadm create-md r0", 69 "drbdadm up r0", 70 "drbdadm primary r0 --force", 71 ) 72 73 drbd2.succeed("drbdadm create-md r0", "drbdadm up r0") 74 75 drbd1.succeed( 76 "mkfs.ext4 /dev/drbd0", 77 "mkdir -p /mnt/drbd", 78 "mount /dev/drbd0 /mnt/drbd", 79 "touch /mnt/drbd/hello", 80 "umount /mnt/drbd", 81 "drbdadm secondary r0", 82 ) 83 drbd1.sleep(1) 84 85 drbd2.succeed( 86 "drbdadm primary r0", 87 "mkdir -p /mnt/drbd", 88 "mount /dev/drbd0 /mnt/drbd", 89 "ls /mnt/drbd/hello", 90 ) 91 ''; 92 } 93)