From bccc6742d638bae4a10c8bd6004c553bf2c5b1dc Mon Sep 17 00:00:00 2001
From: Fabian Seidl <fabian.seidl@h-da.de>
Date: Wed, 7 Feb 2024 13:59:40 +0000
Subject: [PATCH] Add optional uuid to mne creation

See merge request danet/gosdn!736
---
 cli/adapter/PndAdapter.go               | 4 ++--
 cli/adapter/PndAdapter_test.go          | 9 +++++----
 cli/cmd/networkElementCreate.go         | 6 ++++--
 controller/api/managedNetworkElement.go | 3 ++-
 4 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/cli/adapter/PndAdapter.go b/cli/adapter/PndAdapter.go
index 99379d0a9..5797e250f 100644
--- a/cli/adapter/PndAdapter.go
+++ b/cli/adapter/PndAdapter.go
@@ -47,8 +47,8 @@ func (p *PndAdapter) RemoveSbi(uuid.UUID) error {
 
 // AddNetworkElement adds a new device to the controller. The device name is optional.
 // If no name is provided a name will be generated upon device creation.
-func (p *PndAdapter) AddNetworkElement(ctx context.Context, name string, opts *tpb.TransportOption, pluginId uuid.UUID, gNMISubscribePaths []string) (*mnepb.AddListResponse, error) {
-	return api.AddNetworkElement(ctx, p.endpoint, name, opts, pluginId, p.ID(), gNMISubscribePaths)
+func (p *PndAdapter) AddNetworkElement(ctx context.Context, name, mneUUID string, opts *tpb.TransportOption, pluginId uuid.UUID, gNMISubscribePaths []string) (*mnepb.AddListResponse, error) {
+	return api.AddNetworkElement(ctx, p.endpoint, name, mneUUID, opts, pluginId, p.ID(), gNMISubscribePaths)
 }
 
 // GetPluginSchemaTree requests a plugin schema tree.
diff --git a/cli/adapter/PndAdapter_test.go b/cli/adapter/PndAdapter_test.go
index 25686416f..45fbf7145 100644
--- a/cli/adapter/PndAdapter_test.go
+++ b/cli/adapter/PndAdapter_test.go
@@ -75,9 +75,10 @@ func TestPndAdapter_AddNetworkElement(t *testing.T) {
 		endpoint string
 	}
 	type args struct {
-		name string
-		opts *tpb.TransportOption
-		sid  uuid.UUID
+		name    string
+		opts    *tpb.TransportOption
+		sid     uuid.UUID
+		mneUUID string
 	}
 	tests := []struct {
 		name    string
@@ -93,7 +94,7 @@ func TestPndAdapter_AddNetworkElement(t *testing.T) {
 				id:       tt.fields.id,
 				endpoint: tt.fields.endpoint,
 			}
-			if _, err := p.AddNetworkElement(context.TODO(), tt.args.name, tt.args.opts, tt.args.sid, []string{}); (err != nil) != tt.wantErr {
+			if _, err := p.AddNetworkElement(context.TODO(), tt.args.name, tt.args.mneUUID, tt.args.opts, tt.args.sid, []string{}); (err != nil) != tt.wantErr {
 				t.Errorf("PndAdapter.AddNetworkElement() error = %v, wantErr %v", err, tt.wantErr)
 			}
 		})
diff --git a/cli/cmd/networkElementCreate.go b/cli/cmd/networkElementCreate.go
index 6811e0397..4d0b4e555 100644
--- a/cli/cmd/networkElementCreate.go
+++ b/cli/cmd/networkElementCreate.go
@@ -71,7 +71,7 @@ if they diverge from the default credentials (user:'admin' and pw:'arista').`,
 			return
 		}
 
-		resp, err := pndAdapter.AddNetworkElement(createContextWithAuthorization(), mneName, opt, pluginUUID, []string{"system/config/hostname", "system/config/domain-name"})
+		resp, err := pndAdapter.AddNetworkElement(createContextWithAuthorization(), mneName, mneUUID, opt, pluginUUID, []string{"system/config/hostname", "system/config/domain-name"})
 		if err != nil {
 			spinner.Fail(err)
 			return
@@ -85,12 +85,13 @@ if they diverge from the default credentials (user:'admin' and pw:'arista').`,
 		// Necessary for prompt mode. The flag variables have to be resetted,
 		// since in prompt mode the program keeps running.
 
-		mneName, pluginID, address, username, password = "", "", "", "", ""
+		mneName, mneUUID, pluginID, address, username, password = "", "", "", "", "", ""
 		tls = false
 	},
 }
 
 var mneName string
+var mneUUID string
 var pluginID string
 var tls bool
 
@@ -103,4 +104,5 @@ func init() {
 	networkElementCreateCmd.Flags().StringVarP(&username, "username", "u", "", "username for a gnmi resource")
 	networkElementCreateCmd.Flags().StringVarP(&password, "password", "p", "", "password for a gnmi resource")
 	networkElementCreateCmd.Flags().BoolVarP(&tls, "tls", "t", false, "use flag to enable the controller to send requests to network elements using tls")
+	networkElementCreateCmd.Flags().StringVar(&mneUUID, "uuid", "", "add a network element UUID (optional)")
 }
diff --git a/controller/api/managedNetworkElement.go b/controller/api/managedNetworkElement.go
index 71d6dd062..b07ad58e0 100644
--- a/controller/api/managedNetworkElement.go
+++ b/controller/api/managedNetworkElement.go
@@ -20,7 +20,7 @@ import (
 
 // AddNetworkElement adds a new network element to the controller. The network element name is optional.
 // If no name is provided a name will be generated upon network element creation.
-func AddNetworkElement(ctx context.Context, addr, mneName string, opt *tpb.TransportOption, pluginID, pid uuid.UUID, gNMISubscribePaths []string) (*mnepb.AddListResponse, error) {
+func AddNetworkElement(ctx context.Context, addr, mneName, mneUUID string, opt *tpb.TransportOption, pluginID, pid uuid.UUID, gNMISubscribePaths []string) (*mnepb.AddListResponse, error) {
 	client, err := nbi.NetworkElementClient(addr, dialOptions...)
 	if err != nil {
 		return nil, err
@@ -36,6 +36,7 @@ func AddNetworkElement(ctx context.Context, addr, mneName string, opt *tpb.Trans
 				Pid:                pid.String(),
 				TransportOption:    opt,
 				GnmiSubscribePaths: gNMISubscribePaths,
+				MneId:              mneUUID,
 			},
 		},
 		Pid: pid.String(),
-- 
GitLab