at 23.11-pre 1.4 kB view raw
1import ./make-test-python.nix ({ pkgs, ... }: { 2 name = "keepalived"; 3 4 nodes = { 5 node1 = { pkgs, ... }: { 6 networking.firewall.extraCommands = "iptables -A INPUT -p vrrp -j ACCEPT"; 7 services.keepalived.enable = true; 8 services.keepalived.vrrpInstances.test = { 9 interface = "eth1"; 10 state = "MASTER"; 11 priority = 50; 12 virtualIps = [{ addr = "192.168.1.200"; }]; 13 virtualRouterId = 1; 14 }; 15 environment.systemPackages = [ pkgs.tcpdump ]; 16 }; 17 node2 = { pkgs, ... }: { 18 networking.firewall.extraCommands = "iptables -A INPUT -p vrrp -j ACCEPT"; 19 services.keepalived.enable = true; 20 services.keepalived.vrrpInstances.test = { 21 interface = "eth1"; 22 state = "MASTER"; 23 priority = 100; 24 virtualIps = [{ addr = "192.168.1.200"; }]; 25 virtualRouterId = 1; 26 }; 27 environment.systemPackages = [ pkgs.tcpdump ]; 28 }; 29 }; 30 31 testScript = '' 32 # wait for boot time delay to pass 33 for node in [node1, node2]: 34 node.wait_until_succeeds( 35 "systemctl show -p LastTriggerUSecMonotonic keepalived-boot-delay.timer | grep -vq 'LastTriggerUSecMonotonic=0'" 36 ) 37 node.wait_for_unit("keepalived") 38 node2.wait_until_succeeds("ip addr show dev eth1 | grep -q 192.168.1.200") 39 node1.fail("ip addr show dev eth1 | grep -q 192.168.1.200") 40 node1.succeed("ping -c1 192.168.1.200") 41 ''; 42})