nixpkgs-custom/nixos/tests/containers-macvlans.nix

83 lines
2.2 KiB
Nix

# Test for NixOS' container support.
let
# containers IP on VLAN 1
containerIp1 = "192.168.1.253";
containerIp2 = "192.168.1.254";
in
import ./make-test.nix ({ pkgs, ...} : {
name = "containers-macvlans";
meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ montag451 ];
};
nodes = {
machine1 =
{ config, pkgs, lib, ... }:
{
virtualisation.memorySize = 256;
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 =
{ config, pkgs, ... }:
{
virtualisation.memorySize = 256;
virtualisation.vlans = [ 1 ];
};
};
testScript = ''
startAll;
$machine1->waitForUnit("default.target");
$machine2->waitForUnit("default.target");
# Ping between containers to check that macvlans are created in bridge mode
$machine1->succeed("nixos-container run test1 -- ping -n -c 1 ${containerIp2}");
# Ping containers from the host (machine1)
$machine1->succeed("ping -n -c 1 ${containerIp1}");
$machine1->succeed("ping -n -c 1 ${containerIp2}");
# 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}");
'';
})