From a6935e70447927d21599cdd92fdd96c68e99e916 Mon Sep 17 00:00:00 2001 From: Muhamad Azamy Date: Tue, 30 Jan 2024 15:04:38 +0100 Subject: [PATCH] make sure taps are cleaned correctly --- pkg/gridtypes/zos/network.go | 17 +++++++++++++++-- pkg/network/nr/net_resource.go | 21 ++++++++++++++++++++- pkg/primitives/vm/vm.go | 9 ++++++++- 3 files changed, 43 insertions(+), 4 deletions(-) diff --git a/pkg/gridtypes/zos/network.go b/pkg/gridtypes/zos/network.go index 53955c099..854cfbc41 100644 --- a/pkg/gridtypes/zos/network.go +++ b/pkg/gridtypes/zos/network.go @@ -114,6 +114,19 @@ func (c *Mycelium) Challenge(b io.Writer) error { return nil } +func (c *Mycelium) Valid() error { + if len(c.Key) != MyceliumKeyLen { + return fmt.Errorf("invalid mycelium key length, expected %d", MyceliumKeyLen) + } + + // TODO: + // we are not supporting extra peers right now until + if len(c.Peers) != 0 { + return fmt.Errorf("user defined peers list is not supported right now") + } + return nil +} + // Valid checks if the network resource is valid. func (n Network) Valid(getter gridtypes.WorkloadGetter) error { @@ -136,8 +149,8 @@ func (n Network) Valid(getter gridtypes.WorkloadGetter) error { } if n.Mycelium != nil { - if len(n.Mycelium.Key) != MyceliumKeyLen { - return fmt.Errorf("invalid mycelium key length, expected %d", MyceliumKeyLen) + if err := n.Mycelium.Valid(); err != nil { + return err } } diff --git a/pkg/network/nr/net_resource.go b/pkg/network/nr/net_resource.go index c9ebb5abc..6bc156642 100644 --- a/pkg/network/nr/net_resource.go +++ b/pkg/network/nr/net_resource.go @@ -310,7 +310,14 @@ func (nr *NetResource) SetMycelium() (err error) { "--peers", } - // append global peers. + // first append peers from user input. + // right now this is shadowed by Mycelium config validation + // which does not allow custom peer list. + args = AppendFunc(args, config.Peers, func(mp zos.MyceliumPeer) string { + return string(mp) + }) + + // global peers list args = append(args, peers.Mycelium.Peers...) // todo: add custom peers requested by the user @@ -863,3 +870,15 @@ func Convert4to6(netID string, ip net.IP) net.IP { return net.ParseIP(ipv6) } + +// AppendFunc appends arrays with automatic map +func AppendFunc[A any, B any, S []A, D []B](d D, s S, f func(A) B) D { + d = slices.Grow(d, len(s)) + + for _, e := range s { + d = append(d, f(e)) + } + + return d + +} diff --git a/pkg/primitives/vm/vm.go b/pkg/primitives/vm/vm.go index cca3b5ca8..87364decc 100644 --- a/pkg/primitives/vm/vm.go +++ b/pkg/primitives/vm/vm.go @@ -334,7 +334,14 @@ func (p *Manager) Deprovision(ctx context.Context, wl *gridtypes.WorkloadWithID) } if cfg.Network.Planetary { - tapName := wl.ID.Unique("ygg") + var tapName string + if cfg.Network.Mycelium == nil { + // yggdrasil network + tapName = wl.ID.Unique("ygg") + } else { + tapName = wl.ID.Unique("mycelium") + } + if err := network.RemoveTap(ctx, tapName); err != nil { return errors.Wrap(err, "could not clean up tap device") }