at master 1.5 kB view raw
1{ pkgs, lib, ... }: 2{ 3 name = "keepalived"; 4 meta.maintainers = [ lib.maintainers.raitobezarius ]; 5 6 nodes = { 7 node1 = 8 { pkgs, ... }: 9 { 10 services.keepalived.enable = true; 11 services.keepalived.openFirewall = true; 12 services.keepalived.vrrpInstances.test = { 13 interface = "eth1"; 14 state = "MASTER"; 15 priority = 50; 16 virtualIps = [ { addr = "192.168.1.200"; } ]; 17 virtualRouterId = 1; 18 }; 19 environment.systemPackages = [ pkgs.tcpdump ]; 20 }; 21 node2 = 22 { pkgs, ... }: 23 { 24 services.keepalived.enable = true; 25 services.keepalived.openFirewall = true; 26 services.keepalived.vrrpInstances.test = { 27 interface = "eth1"; 28 state = "MASTER"; 29 priority = 100; 30 virtualIps = [ { addr = "192.168.1.200"; } ]; 31 virtualRouterId = 1; 32 }; 33 environment.systemPackages = [ pkgs.tcpdump ]; 34 }; 35 }; 36 37 testScript = '' 38 # wait for boot time delay to pass 39 for node in [node1, node2]: 40 node.wait_until_succeeds( 41 "systemctl show -p LastTriggerUSecMonotonic keepalived-boot-delay.timer | grep -vq 'LastTriggerUSecMonotonic=0'" 42 ) 43 node.wait_for_unit("keepalived") 44 node2.wait_until_succeeds("ip addr show dev eth1 | grep -q 192.168.1.200") 45 node1.fail("ip addr show dev eth1 | grep -q 192.168.1.200") 46 node1.succeed("ping -c1 192.168.1.200") 47 ''; 48}