diff options
author | Ryan Mulligan <ryan@ryantm.com> | 2021-12-05 09:10:22 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-05 09:10:22 -0800 |
commit | 542e917e994cd5f96ede5e53a6db1df8f06ceddb (patch) | |
tree | 2f01ab885781792203673dc1b793fb4d14c02fc3 /nixos | |
parent | 4722a8e10edcf46aaeb0b9f887bb756e25c6930e (diff) | |
parent | 7f4e071274424c3e37847fc26bd7e4343ce9522c (diff) | |
download | nixpkgs-542e917e994cd5f96ede5e53a6db1df8f06ceddb.tar nixpkgs-542e917e994cd5f96ede5e53a6db1df8f06ceddb.tar.gz nixpkgs-542e917e994cd5f96ede5e53a6db1df8f06ceddb.tar.bz2 nixpkgs-542e917e994cd5f96ede5e53a6db1df8f06ceddb.tar.lz nixpkgs-542e917e994cd5f96ede5e53a6db1df8f06ceddb.tar.xz nixpkgs-542e917e994cd5f96ede5e53a6db1df8f06ceddb.tar.zst nixpkgs-542e917e994cd5f96ede5e53a6db1df8f06ceddb.zip |
Merge pull request #148061 from astro/drbd_upstream
drbd: update, fix, add test
Diffstat (limited to 'nixos')
-rw-r--r-- | nixos/modules/services/network-filesystems/drbd.nix | 12 | ||||
-rw-r--r-- | nixos/tests/all-tests.nix | 1 | ||||
-rw-r--r-- | nixos/tests/drbd.nix | 87 |
3 files changed, 93 insertions, 7 deletions
diff --git a/nixos/modules/services/network-filesystems/drbd.nix b/nixos/modules/services/network-filesystems/drbd.nix index 916e7eaaaa9..c730e0b34e9 100644 --- a/nixos/modules/services/network-filesystems/drbd.nix +++ b/nixos/modules/services/network-filesystems/drbd.nix @@ -47,19 +47,17 @@ let cfg = config.services.drbd; in options drbd usermode_helper=/run/current-system/sw/bin/drbdadm ''; - environment.etc.drbd.conf = + environment.etc."drbd.conf" = { source = pkgs.writeText "drbd.conf" cfg.config; }; systemd.services.drbd = { after = [ "systemd-udev.settle.service" "network.target" ]; wants = [ "systemd-udev.settle.service" ]; wantedBy = [ "multi-user.target" ]; - script = '' - ${pkgs.drbd}/sbin/drbdadm up all - ''; - serviceConfig.ExecStop = '' - ${pkgs.drbd}/sbin/drbdadm down all - ''; + serviceConfig = { + ExecStart = "${pkgs.drbd}/sbin/drbdadm up all"; + ExecStop = "${pkgs.drbd}/sbin/drbdadm down all"; + }; }; }; } diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index 1ff1b8d5864..a6672134692 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -111,6 +111,7 @@ in dokuwiki = handleTest ./dokuwiki.nix {}; domination = handleTest ./domination.nix {}; dovecot = handleTest ./dovecot.nix {}; + drbd = handleTest ./drbd.nix {}; ec2-config = (handleTestOn ["x86_64-linux"] ./ec2.nix {}).boot-ec2-config or {}; ec2-nixops = (handleTestOn ["x86_64-linux"] ./ec2.nix {}).boot-ec2-nixops or {}; ecryptfs = handleTest ./ecryptfs.nix {}; diff --git a/nixos/tests/drbd.nix b/nixos/tests/drbd.nix new file mode 100644 index 00000000000..bede7206d70 --- /dev/null +++ b/nixos/tests/drbd.nix @@ -0,0 +1,87 @@ +import ./make-test-python.nix ( + { pkgs, lib, ... }: + let + drbdPort = 7789; + + drbdConfig = + { nodes, ... }: + { + virtualisation.emptyDiskImages = [ 1 ]; + networking.firewall.allowedTCPPorts = [ drbdPort ]; + + services.drbd = { + enable = true; + config = '' + global { + usage-count yes; + } + + common { + net { + protocol C; + ping-int 1; + } + } + + resource r0 { + volume 0 { + device /dev/drbd0; + disk /dev/vdb; + meta-disk internal; + } + + on drbd1 { + address ${nodes.drbd1.config.networking.primaryIPAddress}:${toString drbdPort}; + } + + on drbd2 { + address ${nodes.drbd2.config.networking.primaryIPAddress}:${toString drbdPort}; + } + } + ''; + }; + }; + in + { + name = "drbd"; + meta = with pkgs.lib.maintainers; { + maintainers = [ ryantm astro ]; + }; + + nodes.drbd1 = drbdConfig; + nodes.drbd2 = drbdConfig; + + testScript = { nodes }: '' + drbd1.start() + drbd2.start() + + drbd1.wait_for_unit("network.target") + drbd2.wait_for_unit("network.target") + + drbd1.succeed( + "drbdadm create-md r0", + "drbdadm up r0", + "drbdadm primary r0 --force", + ) + + drbd2.succeed("drbdadm create-md r0", "drbdadm up r0") + + drbd1.succeed( + "mkfs.ext4 /dev/drbd0", + "mkdir -p /mnt/drbd", + "mount /dev/drbd0 /mnt/drbd", + "touch /mnt/drbd/hello", + "umount /mnt/drbd", + "drbdadm secondary r0", + ) + drbd1.sleep(1) + + drbd2.succeed( + "drbdadm primary r0", + "mkdir -p /mnt/drbd", + "mount /dev/drbd0 /mnt/drbd", + "ls /mnt/drbd/hello", + ) + ''; + } +) |