nixos-module/lxc-containers: begin netConfig

This commit is contained in:
Astro 2021-03-23 00:27:32 +01:00
parent 681ac0ab5d
commit 465a316192
1 changed files with 48 additions and 7 deletions

View File

@ -16,6 +16,52 @@ let
);
enabled = containers != {};
netConfig = ctName: interfaces:
let
config = map (netName:
let
ifData = interfaces.${netName};
in {
type = ifData.type;
flags = "up";
hwaddr = if ifData ? hwaddr
then ifData.hwaddr
else "0A:14:48:01:26:00";
} // (lib.optionalAttrs (ifData.type == "veth") {
veth.pair = "${ctName}-${netName}";
veth.mode = "bridge";
link = "br-${netName}";
}) // (lib.optionalAttrs (ifData.type == "phys") {
link = "bond0.TODO";
})
# TODO: addrs
) (builtins.attrNames interfaces);
serialize = name: x:
if builtins.isString x
then "${name} = ${x}\n"
else if builtins.isAttrs x
then builtins.concatStringsSep "" (
map (n: serialize "${name}.${n}" x.${n}) (builtins.attrNames x)
)
else if builtins.isList x
then
let
enumerate = xs: n:
if xs == []
then []
else [ {
e = builtins.head xs;
i = n;
} ] ++ enumerate (builtins.tail xs) (n + 1);
in
builtins.concatStringsSep "" (
map ({ e, i }: serialize "${name}.${toString i}" e) (enumerate x 0)
)
else throw "Invalid data in lxc net config: ${lib.generators.toPretty {} x}";
in
builtins.trace "config: ${lib.generators.toPretty {} config}" (
serialize "lxc.net" config);
in
{
virtualisation.lxc = lib.mkIf enabled {
@ -39,7 +85,7 @@ in
enable = true;
source =
let
inherit (containers.${ctName}) interface;
inherit (containers.${ctName}) interfaces;
in builtins.trace ctName builtins.toFile "${ctName}.conf" ''
# For lxcfs and sane defaults
lxc.include = /etc/lxc/common.conf
@ -77,12 +123,7 @@ in
# tuntap
lxc.cgroup.devices.allow = c 10:200 rw
lxc.net.0.type = veth
lxc.net.0.flags = up
lxc.net.0.veth.mode = bridge
lxc.net.0.veth.pair = test
lxc.net.0.link = virbr0
lxc.net.0.hwaddr = 00:23:de:ad:be:ef
${netConfig ctName interfaces}
'';
};
}) {