liminix

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

members.nix (822B)


      1 {
      2   liminix,
      3   ifwait,
      4   svc,
      5 }:
      6 { members, primary }:
      7 
      8 let
      9   inherit (liminix.networking) interface;
     10   inherit (liminix.services) bundle oneshot;
     11   addif =
     12     member:
     13     # how do we get sight of services from here? maybe we need to
     14     # implement ifwait as a regualr derivation instead of a
     15     # servicedefinition
     16     svc.ifwait.build {
     17       state = "running";
     18       interface = member;
     19       dependencies = [
     20         primary
     21         member
     22       ];
     23       service = oneshot {
     24         name = "${primary.name}.member.${member.name}";
     25         up = ''
     26           ip link set dev $(output ${member} ifname) master $(output ${primary} ifname)
     27         '';
     28         down = "ip link set dev $(output ${member} ifname) nomaster";
     29       };
     30     };
     31 in
     32 bundle {
     33   name = "${primary.name}.members";
     34   contents = map addif members;
     35 }