diff --git a/.gitignore b/.gitignore index 159fd2d040dbb2bc31b032e93a50d5089aa2212f..7dfe9ba22312fc5c77e3652cb458e3dca30e7e6c 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 0000000000000000000000000000000000000000..fa433e3d8fce96733c4b0f55d5fc99b3ed47396b --- /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 0000000000000000000000000000000000000000..46b4f0456aff4350275a64c46efb1a4c6431f81d --- /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 7b48477b18b757da291167d04e19711e7ba9b9af..d2f9f454cea7f279f4209a11d5cd06bd900eecc9 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 {