diff --git a/cli/cmd/deviceRemove.go b/cli/cmd/deviceRemove.go index 6cbdf8125fb4750ce1d2c3b6f893ed539e86604c..af1346fbade09be3b97a48b6ea410f5646c62fd6 100644 --- a/cli/cmd/deviceRemove.go +++ b/cli/cmd/deviceRemove.go @@ -59,7 +59,7 @@ The device UUID must be specified as a positional argument.`, spinner.Fail(err) return err } - spinner.Success("PND has been deleted, ID: ", did.String()) + spinner.Success("Device has been deleted, ID: ", did.String()) return nil }, } diff --git a/controller/nucleus/deviceService.go b/controller/nucleus/deviceService.go index 30caff6dccec364d4f58b7fc98de7689f3c392cd..c565274e85199fa1e0a383b395d7c7bd8f75cce4 100644 --- a/controller/nucleus/deviceService.go +++ b/controller/nucleus/deviceService.go @@ -90,7 +90,12 @@ func (s *DeviceService) Delete(deviceToDelete device.Device) error { if err != nil { return err } - + if deviceToDelete.SBI().Type() == spb.Type_TYPE_PLUGIN { + err = s.sbiService.Delete(deviceToDelete.SBI()) + if err != nil { + return err + } + } return nil } diff --git a/controller/nucleus/principalNetworkDomain.go b/controller/nucleus/principalNetworkDomain.go index 4aca330603922b7f8eb2bc0deea1e167269f4cdc..3c75a1ae1fdbab46977dc636f72e2e30b8d608ef 100644 --- a/controller/nucleus/principalNetworkDomain.go +++ b/controller/nucleus/principalNetworkDomain.go @@ -342,7 +342,7 @@ func (pnd *pndImplementation) removeDevice(id uuid.UUID) error { defer metrics.FinishHook(labels, start, deviceDeletionDurationSecondsTotal, deviceDeletionDurationSeconds) switch d.(type) { case *CsbiDevice: - return pnd.handleCsbiDeletion(id) + return pnd.handleCsbiDeletion(d) default: return pnd.deviceService.Delete(d) } @@ -507,20 +507,24 @@ func handleRollbackError(id uuid.UUID, err error) { // TODO: Notion of invalid state needed. } -func (pnd *pndImplementation) handleCsbiDeletion(id uuid.UUID) error { - log.Infof("csbi deletion triggered for %v", id) +func (pnd *pndImplementation) handleCsbiDeletion(d device.Device) error { + log.Infof("csbi deletion triggered for %v", d.ID().String()) ctx, cancel := context.WithTimeout(context.Background(), time.Minute) defer cancel() req := &cpb.DeleteRequest{ Timestamp: time.Now().UnixNano(), - Did: []string{id.String()}, + Did: []string{d.ID().String()}, } resp, err := pnd.csbiClient.Delete(ctx, req) if err != nil { return err } + err = pnd.southboundService.Delete(d.SBI()) + if err != nil { + return err + } log.WithFields(log.Fields{ - "uuid": id, + "uuid": d.ID().String(), "status": resp.Status, }).Info("csbi deleted") return nil diff --git a/controller/nucleus/sbiService.go b/controller/nucleus/sbiService.go index a92a3be32b159ee32173bbf295adab6ad7a6e61f..f00247f790a23add96cc00b0abc34008fe184326 100644 --- a/controller/nucleus/sbiService.go +++ b/controller/nucleus/sbiService.go @@ -1,6 +1,8 @@ package nucleus import ( + "os" + "code.fbi.h-da.de/danet/gosdn/controller/interfaces/southbound" "code.fbi.h-da.de/danet/gosdn/controller/store" "github.com/google/uuid" @@ -71,6 +73,13 @@ func (s *SbiService) Delete(sbiToDelete southbound.SouthboundInterface) error { return err } + sbiPlugin, ok := sbiToDelete.(*SouthboundPlugin) + if ok { + if err := os.RemoveAll(sbiPlugin.Path()); err != nil { + return err + } + } + return nil }