forked from zentralwerk/network
nixos-module/lxc-containers: begin netConfig
This commit is contained in:
parent
681ac0ab5d
commit
465a316192
|
@ -16,6 +16,52 @@ let
|
||||||
);
|
);
|
||||||
enabled = containers != {};
|
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
|
in
|
||||||
{
|
{
|
||||||
virtualisation.lxc = lib.mkIf enabled {
|
virtualisation.lxc = lib.mkIf enabled {
|
||||||
|
@ -39,7 +85,7 @@ in
|
||||||
enable = true;
|
enable = true;
|
||||||
source =
|
source =
|
||||||
let
|
let
|
||||||
inherit (containers.${ctName}) interface;
|
inherit (containers.${ctName}) interfaces;
|
||||||
in builtins.trace ctName builtins.toFile "${ctName}.conf" ''
|
in builtins.trace ctName builtins.toFile "${ctName}.conf" ''
|
||||||
# For lxcfs and sane defaults
|
# For lxcfs and sane defaults
|
||||||
lxc.include = /etc/lxc/common.conf
|
lxc.include = /etc/lxc/common.conf
|
||||||
|
@ -77,12 +123,7 @@ in
|
||||||
# tuntap
|
# tuntap
|
||||||
lxc.cgroup.devices.allow = c 10:200 rw
|
lxc.cgroup.devices.allow = c 10:200 rw
|
||||||
|
|
||||||
lxc.net.0.type = veth
|
${netConfig ctName interfaces}
|
||||||
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
|
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
}) {
|
}) {
|
||||||
|
|
Loading…
Reference in New Issue