members.nix (823B)
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 regular derivation instead of a 15 # service definition 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 }