fix(bridge): members are now granular services

They are still part of the bundle, but we can wait on each of them
independently now.

Signed-off-by: Raito Bezarius <masterancpp@gmail.com>
This commit is contained in:
Raito Bezarius 2024-09-05 14:27:47 +02:00
parent 78d0088b65
commit ebcdbf76bc
2 changed files with 19 additions and 8 deletions

View file

@ -43,8 +43,20 @@ in
}; };
members = mkOption { members = mkOption {
type = types.listOf liminix.lib.types.interface; type = types.attrsOf (types.submodule ({ ... }: { options = {
description = "interfaces to add to the bridge"; member = mkOption {
type = liminix.lib.types.interface;
description = "interface to add";
};
dependencies = mkOption {
type = types.listOf liminix.lib.types.service;
default = [];
description = "extra dependencies before attaching this interface to the bridge";
};
}; }));
description = "set of bridge members";
}; };
}; };

View file

@ -7,11 +7,10 @@
{ members, primary } : { members, primary } :
let let
inherit (liminix.networking) interface;
inherit (liminix.services) bundle oneshot; inherit (liminix.services) bundle oneshot;
inherit (lib) mkOption types; inherit (lib) mapAttrs;
addif = member : oneshot { addif = name: { dependencies ? [ ], member }: oneshot {
name = "${primary.name}.member.${member.name}"; name = "${primary.name}.member.${name}";
up = '' up = ''
echo "attaching $(output ${member} ifname) to $(output ${primary} ifname) bridge" echo "attaching $(output ${member} ifname) to $(output ${primary} ifname) bridge"
ip link set dev $(output ${member} ifname) master $(output ${primary} ifname) ip link set dev $(output ${member} ifname) master $(output ${primary} ifname)
@ -21,9 +20,9 @@ let
ip link set dev $(output ${member} ifname) nomaster ip link set dev $(output ${member} ifname) nomaster
''; '';
dependencies = [ primary member ]; dependencies = [ primary member ] ++ dependencies;
}; };
in bundle { in bundle {
name = "${primary.name}.members"; name = "${primary.name}.members";
contents = map addif members; contents = builtins.attrValues (mapAttrs addif members);
} }