diff --git a/controller/api/managedNetworkElement.go b/controller/api/managedNetworkElement.go index f9b5eb57a3e4705f36e9303b09a3ca04c813fd36..7719016733524d95994c09ae3c84566187e9cb87 100644 --- a/controller/api/managedNetworkElement.go +++ b/controller/api/managedNetworkElement.go @@ -6,6 +6,7 @@ import ( "io" "time" + "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/conflict" mnepb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/networkelement" pipb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/plugin-internal" spb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/southbound" @@ -250,3 +251,29 @@ func DeleteNetworkElement(ctx context.Context, addr, pid, mneid string) (*mnepb. return client.Delete(ctx, req) } + +// UpdateNetworkElement changes the metadata of the network element which is stored in the controller storage. +// Correct resource version needs to be provided to allow a change of the object in the storage. +func UpdateNetworkElement(ctx context.Context, addr, mneid, updatedName, updatedTransportAddress, updatedPid string, resourceVersion *conflict.Metadata) (*mnepb.UpdateNetworkElementResponse, error) { + client, err := nbi.NetworkElementClient(addr, dialOptions...) + if err != nil { + return nil, err + } + + // Note: Consider changing what to update. Some values are quite iffy to change. + req := &mnepb.UpdateNetworkElementRequest{ + Timestamp: time.Now().UnixNano(), + NetworkElement: &mnepb.ManagedNetworkElement{ + Id: mneid, + Name: updatedName, + TransportAddress: updatedTransportAddress, + TransportOption: &tpb.TransportOption{ + Address: updatedTransportAddress, + }, + Metadata: resourceVersion, + AssociatedPnd: updatedPid, + }, + } + + return client.Update(ctx, req) +}