liminix/modules/bridge/members.nix
Raito Bezarius ebcdbf76bc 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>
2024-09-05 14:54:12 +02:00

28 lines
746 B
Nix

{
liminix
, ifwait
, lib
, svc
}:
{ members, primary } :
let
inherit (liminix.services) bundle oneshot;
inherit (lib) mapAttrs;
addif = name: { dependencies ? [ ], member }: oneshot {
name = "${primary.name}.member.${name}";
up = ''
echo "attaching $(output ${member} ifname) to $(output ${primary} ifname) bridge"
ip link set dev $(output ${member} ifname) master $(output ${primary} ifname)
'';
down = ''
echo "detaching $(output ${member} ifname) from any bridge"
ip link set dev $(output ${member} ifname) nomaster
'';
dependencies = [ primary member ] ++ dependencies;
};
in bundle {
name = "${primary.name}.members";
contents = builtins.attrValues (mapAttrs addif members);
}