From c7c2a56d793178e6e66b80a725adad747f127757 Mon Sep 17 00:00:00 2001 From: Qiu Jian Date: Mon, 3 Apr 2023 11:11:45 +0800 Subject: [PATCH] fix: host remove netif also remove baremnetal server netif --- pkg/compute/models/hosts.go | 38 ++++++++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 7 deletions(-) diff --git a/pkg/compute/models/hosts.go b/pkg/compute/models/hosts.go index a88209e5c8..443121baf5 100644 --- a/pkg/compute/models/hosts.go +++ b/pkg/compute/models/hosts.go @@ -4905,12 +4905,6 @@ func (self *SHost) RemoveNetif(ctx context.Context, userCred mcclient.TokenCrede if err != nil { return errors.Wrap(err, "netif.Remove") } - if nicType == api.NIC_TYPE_ADMIN && self.AccessMac == mac { - err := self.setAccessMac(userCred, "") - if err != nil { - return errors.Wrap(err, "self.setAccessMac") - } - } if wire != nil { others := self.GetNetifsOnWire(wire) if len(others) == 0 { @@ -4918,10 +4912,40 @@ func (self *SHost) RemoveNetif(ctx context.Context, userCred mcclient.TokenCrede if hw != nil { db.OpsLog.LogDetachEvent(ctx, self, wire, userCred, jsonutils.NewString(fmt.Sprintf("disable netif %s", self.AccessMac))) log.Debugf("Detach host wire because of remove netif %s", netif.Mac) - return hw.Delete(ctx, userCred) + err := hw.Delete(ctx, userCred) + if err != nil { + return errors.Wrap(err, "remove host wire") + } } } } + // is this a converted host? + if self.HostType == api.HOST_TYPE_HYPERVISOR && self.IsBaremetal { + guests, err := self.GetGuests() + if err != nil { + return errors.Wrap(err, "GetGuests") + } + for i := range guests { + guest := &guests[i] + if guest.Hypervisor == api.HYPERVISOR_BAREMETAL { + gn, err := guest.GetGuestnetworkByMac(netif.Mac) + if err != nil && errors.Cause(err) != sql.ErrNoRows { + return errors.Wrap(err, "GetGuestnetworkByMac") + } else if gn != nil { + err = gn.Detach(ctx, userCred) + if err != nil { + return errors.Wrap(err, "detach guest nic") + } + } + } + } + } + if nicType == api.NIC_TYPE_ADMIN && self.AccessMac == mac { + err := self.setAccessMac(userCred, "") + if err != nil { + return errors.Wrap(err, "setAccessMac") + } + } self.ClearSchedDescCache() return nil }