at 21.11-pre 4.5 kB view raw
1import ./make-test-python.nix ({ pkgs, lib, ... }: { 2 name = "containers-physical_interfaces"; 3 meta = { 4 maintainers = with lib.maintainers; [ kampfschlaefer ]; 5 }; 6 7 nodes = { 8 server = { ... }: 9 { 10 virtualisation.memorySize = 256; 11 virtualisation.vlans = [ 1 ]; 12 13 containers.server = { 14 privateNetwork = true; 15 interfaces = [ "eth1" ]; 16 17 config = { 18 networking.interfaces.eth1.ipv4.addresses = [ 19 { address = "10.10.0.1"; prefixLength = 24; } 20 ]; 21 networking.firewall.enable = false; 22 }; 23 }; 24 }; 25 bridged = { ... }: { 26 virtualisation.memorySize = 128; 27 virtualisation.vlans = [ 1 ]; 28 29 containers.bridged = { 30 privateNetwork = true; 31 interfaces = [ "eth1" ]; 32 33 config = { 34 networking.bridges.br0.interfaces = [ "eth1" ]; 35 networking.interfaces.br0.ipv4.addresses = [ 36 { address = "10.10.0.2"; prefixLength = 24; } 37 ]; 38 networking.firewall.enable = false; 39 }; 40 }; 41 }; 42 43 bonded = { ... }: { 44 virtualisation.memorySize = 128; 45 virtualisation.vlans = [ 1 ]; 46 47 containers.bonded = { 48 privateNetwork = true; 49 interfaces = [ "eth1" ]; 50 51 config = { 52 networking.bonds.bond0 = { 53 interfaces = [ "eth1" ]; 54 driverOptions.mode = "active-backup"; 55 }; 56 networking.interfaces.bond0.ipv4.addresses = [ 57 { address = "10.10.0.3"; prefixLength = 24; } 58 ]; 59 networking.firewall.enable = false; 60 }; 61 }; 62 }; 63 64 bridgedbond = { ... }: { 65 virtualisation.memorySize = 128; 66 virtualisation.vlans = [ 1 ]; 67 68 containers.bridgedbond = { 69 privateNetwork = true; 70 interfaces = [ "eth1" ]; 71 72 config = { 73 networking.bonds.bond0 = { 74 interfaces = [ "eth1" ]; 75 driverOptions.mode = "active-backup"; 76 }; 77 networking.bridges.br0.interfaces = [ "bond0" ]; 78 networking.interfaces.br0.ipv4.addresses = [ 79 { address = "10.10.0.4"; prefixLength = 24; } 80 ]; 81 networking.firewall.enable = false; 82 }; 83 }; 84 }; 85 }; 86 87 testScript = '' 88 start_all() 89 90 with subtest("Prepare server"): 91 server.wait_for_unit("default.target") 92 server.succeed("ip link show dev eth1 >&2") 93 94 with subtest("Simple physical interface is up"): 95 server.succeed("nixos-container start server") 96 server.wait_for_unit("container@server") 97 server.succeed( 98 "systemctl -M server list-dependencies network-addresses-eth1.service >&2" 99 ) 100 101 # The other tests will ping this container on its ip. Here we just check 102 # that the device is present in the container. 103 server.succeed("nixos-container run server -- ip a show dev eth1 >&2") 104 105 with subtest("Physical device in bridge in container can ping server"): 106 bridged.wait_for_unit("default.target") 107 bridged.succeed("nixos-container start bridged") 108 bridged.wait_for_unit("container@bridged") 109 bridged.succeed( 110 "systemctl -M bridged list-dependencies network-addresses-br0.service >&2", 111 "systemctl -M bridged status -n 30 -l network-addresses-br0.service", 112 "nixos-container run bridged -- ping -w 10 -c 1 -n 10.10.0.1", 113 ) 114 115 with subtest("Physical device in bond in container can ping server"): 116 bonded.wait_for_unit("default.target") 117 bonded.succeed("nixos-container start bonded") 118 bonded.wait_for_unit("container@bonded") 119 bonded.succeed( 120 "systemctl -M bonded list-dependencies network-addresses-bond0 >&2", 121 "systemctl -M bonded status -n 30 -l network-addresses-bond0 >&2", 122 "nixos-container run bonded -- ping -w 10 -c 1 -n 10.10.0.1", 123 ) 124 125 with subtest("Physical device in bond in bridge in container can ping server"): 126 bridgedbond.wait_for_unit("default.target") 127 bridgedbond.succeed("nixos-container start bridgedbond") 128 bridgedbond.wait_for_unit("container@bridgedbond") 129 bridgedbond.succeed( 130 "systemctl -M bridgedbond list-dependencies network-addresses-br0.service >&2", 131 "systemctl -M bridgedbond status -n 30 -l network-addresses-br0.service", 132 "nixos-container run bridgedbond -- ping -w 10 -c 1 -n 10.10.0.1", 133 ) 134 ''; 135})