diff options
Diffstat (limited to 'nixos/tests/containers-macvlans.nix')
-rw-r--r-- | nixos/tests/containers-macvlans.nix | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/nixos/tests/containers-macvlans.nix b/nixos/tests/containers-macvlans.nix new file mode 100644 index 00000000000..a0cea8db4a1 --- /dev/null +++ b/nixos/tests/containers-macvlans.nix @@ -0,0 +1,82 @@ +let + # containers IP on VLAN 1 + containerIp1 = "192.168.1.253"; + containerIp2 = "192.168.1.254"; +in + +import ./make-test-python.nix ({ pkgs, lib, ... }: { + name = "containers-macvlans"; + meta = { + maintainers = with lib.maintainers; [ montag451 ]; + }; + + nodes = { + + machine1 = + { lib, ... }: + { + virtualisation.vlans = [ 1 ]; + + # To be able to ping containers from the host, it is necessary + # to create a macvlan on the host on the VLAN 1 network. + networking.macvlans.mv-eth1-host = { + interface = "eth1"; + mode = "bridge"; + }; + networking.interfaces.eth1.ipv4.addresses = lib.mkForce []; + networking.interfaces.mv-eth1-host = { + ipv4.addresses = [ { address = "192.168.1.1"; prefixLength = 24; } ]; + }; + + containers.test1 = { + autoStart = true; + macvlans = [ "eth1" ]; + + config = { + networking.interfaces.mv-eth1 = { + ipv4.addresses = [ { address = containerIp1; prefixLength = 24; } ]; + }; + }; + }; + + containers.test2 = { + autoStart = true; + macvlans = [ "eth1" ]; + + config = { + networking.interfaces.mv-eth1 = { + ipv4.addresses = [ { address = containerIp2; prefixLength = 24; } ]; + }; + }; + }; + }; + + machine2 = + { ... }: + { + virtualisation.vlans = [ 1 ]; + }; + + }; + + testScript = '' + start_all() + machine1.wait_for_unit("default.target") + machine2.wait_for_unit("default.target") + + with subtest( + "Ping between containers to check that macvlans are created in bridge mode" + ): + machine1.succeed("nixos-container run test1 -- ping -n -c 1 ${containerIp2}") + + with subtest("Ping containers from the host (machine1)"): + machine1.succeed("ping -n -c 1 ${containerIp1}") + machine1.succeed("ping -n -c 1 ${containerIp2}") + + with subtest( + "Ping containers from the second machine to check that containers are reachable from the outside" + ): + machine2.succeed("ping -n -c 1 ${containerIp1}") + machine2.succeed("ping -n -c 1 ${containerIp2}") + ''; +}) |