From 6e040b722752ba214f74de6e6743685b06d7b4cd Mon Sep 17 00:00:00 2001 From: Fabian Seidl <fabian.b.seidl@stud.h-da.de> Date: Fri, 22 Jul 2022 09:52:35 +0000 Subject: [PATCH] Resolve "Implement management component with automatic subscriptions to NEs" See merge request danet/gosdn!358 --- .gitignore | 3 +- controller/config/gnmiSubscriptionConfig.go | 48 +++++++++++++++++++ .../configs/gNMISubscriptions.txt.example | 2 + controller/controller.go | 10 +++- 4 files changed, 60 insertions(+), 3 deletions(-) create mode 100644 controller/config/gnmiSubscriptionConfig.go create mode 100644 controller/configs/gNMISubscriptions.txt.example diff --git a/.gitignore b/.gitignore index 159fd2d04..7dfe9ba22 100644 --- a/.gitignore +++ b/.gitignore @@ -23,12 +23,13 @@ cli/gosdnc csbi/resources/csbi # controller +controller/config/*_test.toml controller/configs/testing-gosdn.toml controller/configs/gosdn.toml controller/configs/development-gosdn.toml controller/configs/containerlab-gosdn.toml -controller/config/*_test.toml controller/configs/ci-testing-gosdn.toml +controller/configs/gNMISubscriptions.txt controller/stores_testing controller/stores/** controller/cmd/gosdn/stores/ diff --git a/controller/config/gnmiSubscriptionConfig.go b/controller/config/gnmiSubscriptionConfig.go new file mode 100644 index 000000000..fa433e3d8 --- /dev/null +++ b/controller/config/gnmiSubscriptionConfig.go @@ -0,0 +1,48 @@ +package config + +import ( + "bufio" + "fmt" + "os" + "path/filepath" + "strings" +) + +const ( + defaultGnmiSubscriptionFilePath = "controller/configs/gNMISubscriptions.txt" +) + +var gnmiSubscriptionPaths [][]string + +// ReadGnmiSubscriptionPaths reads the paths the watcher should subscribe to provided in a file. +func ReadGnmiSubscriptionPaths() error { + currentDir, err := os.Getwd() + if err != nil { + return err + } + + filePath := filepath.Join(currentDir, defaultGnmiSubscriptionFilePath) + + f, err := os.Open(filePath) + if err != nil { + return err + } + + defer f.Close() + + scanner := bufio.NewScanner(f) + + for scanner.Scan() { + path := strings.Split(scanner.Text(), "/") + gnmiSubscriptionPaths = append(gnmiSubscriptionPaths, path) + } + + fmt.Println(gnmiSubscriptionPaths) + + return nil +} + +// GetGnmiSubscriptionPaths returns the paths the watcher should subscribe to. +func GetGnmiSubscriptionPaths() [][]string { + return gnmiSubscriptionPaths +} diff --git a/controller/configs/gNMISubscriptions.txt.example b/controller/configs/gNMISubscriptions.txt.example new file mode 100644 index 000000000..46b4f0456 --- /dev/null +++ b/controller/configs/gNMISubscriptions.txt.example @@ -0,0 +1,2 @@ +system/config/hostname +system/config/domain-name diff --git a/controller/controller.go b/controller/controller.go index 7b48477b1..d2f9f454c 100644 --- a/controller/controller.go +++ b/controller/controller.go @@ -74,6 +74,11 @@ func initialize() error { return err } + err = config.ReadGnmiSubscriptionPaths() + if err != nil { + log.Error("Error reading in gNMI subscription paths, can not watch devices automatically: ", err) + } + eventService, err := eventservice.NewEventService() if err != nil { return err @@ -107,8 +112,9 @@ func initialize() error { } c.deviceWatcher = nucleus.NewDeviceWatcher(c.pndStore) - // TODO: udpate with actual paths to subscribe to using template/config - c.deviceWatcher.SubToDevices([][]string{{"system", "config", "hostname"}}, nil) + // TODO: udpate with actual paths to subscribe when using template/config + fmt.Println(config.GetGnmiSubscriptionPaths()) + c.deviceWatcher.SubToDevices(config.GetGnmiSubscriptionPaths(), nil) err = ensureDefaultRoleExists() if err != nil { -- GitLab