Skip to content
Snippets Groups Projects
Commit 76b327ad authored by Malte Bauch's avatar Malte Bauch
Browse files

Plugin store allows to persist plugin data through json file

Plugins will keep their UUIDs after a restart.
parent d4a8cd43
No related branches found
No related tags found
No related merge requests found
[{"id":"e2c358b3-6482-4010-b0d8-679dff73153b","path":"plugins/arista/bundled_plugin.zip","hash":"h1:+ORKoJds8/v25xH4uvd3pPqa1eIs6JXHw/Ef4HMtG6A=","manifest":{"name":"Arista","firmware":"standard","author":"goSDN-Team","version":"1.0.0"}},{"id":"d1c269a2-6482-4010-b0d8-679dff73153b","path":"plugins/openconfig/bundled_plugin.zip","hash":"h1:FpK0b9SSrly8IJMfhbgt/Q8k3f4V5tRlIEX7K9btMrI=","manifest":{"name":"Openconfig","firmware":"standard","author":"goSDN-Team","version":"1.0.0"}}]
...@@ -51,6 +51,11 @@ func registerPlugins() *PluginRegistry { ...@@ -51,6 +51,11 @@ func registerPlugins() *PluginRegistry {
pr := &PluginRegistry{} pr := &PluginRegistry{}
pluginStore := NewStore(pluginStorePath) pluginStore := NewStore(pluginStorePath)
plugins, err := pluginStore.GetAll()
if err != nil {
fmt.Println(err)
}
for _, dir := range dirs { for _, dir := range dirs {
fmt.Printf("File %+v\n", dir) fmt.Printf("File %+v\n", dir)
...@@ -66,29 +71,33 @@ func registerPlugins() *PluginRegistry { ...@@ -66,29 +71,33 @@ func registerPlugins() *PluginRegistry {
panic(err) panic(err)
} }
//var id uuid.UUID var plugin *Plugin
//switch i { for i, p := range plugins {
//case 0: if p.Hash == dirHashed {
// id = uuid.MustParse("e2c358b3-6482-4010-b0d8-679dff73153b") plugin = p
//case 1: plugins[i] = plugins[len(plugins)-1]
// id = uuid.MustParse("d1c269a2-6482-4010-b0d8-679dff73153b") plugins = plugins[:len(plugins)-1]
//case 2: break
// id = uuid.MustParse("f3b474c2-6482-4010-b0d8-679dff73153b") }
//default: }
// break
//} if plugin == nil {
plugin = &Plugin{
plugin := &Plugin{ ID: uuid.New(),
ID: uuid.New(), Path: filepath.Join(dirPath, util.BundledPluginName),
Path: filepath.Join(dirPath, util.BundledPluginName), Hash: dirHashed,
Hash: dirHashed, Manifest: manifest,
Manifest: manifest, }
} }
pr.Plugins = append(pr.Plugins, plugin) pr.Plugins = append(pr.Plugins, plugin)
} }
} }
for _, p := range pr.Plugins {
fmt.Printf("registeredPlugin: %v\n", p)
}
if err := pluginStore.Update(pr.Plugins); err != nil { if err := pluginStore.Update(pr.Plugins); err != nil {
fmt.Println(err) fmt.Println(err)
} }
......
...@@ -20,4 +20,5 @@ EXPOSE 55057 ...@@ -20,4 +20,5 @@ EXPOSE 55057
WORKDIR /app/ WORKDIR /app/
COPY --from=builder /plugin-registry/artifacts/plugin-registry . COPY --from=builder /plugin-registry/artifacts/plugin-registry .
COPY --from=builder /plugin-registry/plugin-registry/plugins ./plugins COPY --from=builder /plugin-registry/plugin-registry/plugins ./plugins
COPY --from=builder /plugin-registry/dev_env_data/plugin-registry/plugin-store.json ./plugin-store.json
ENTRYPOINT ["./plugin-registry", "-socket", "55057"] ENTRYPOINT ["./plugin-registry", "-socket", "55057"]
package main
import (
"encoding/json"
"os"
"sync"
)
type Store struct {
fm sync.Mutex
path string
}
func NewStore(path string) *Store {
return &Store{
path: path,
}
}
func (s *Store) Update(plugins []*Plugin) error {
s.fm.Lock()
defer s.fm.Unlock()
serializedPlugins, err := json.Marshal(plugins)
if err != nil {
return err
}
if err := os.WriteFile(s.path, serializedPlugins, 0600); err != nil {
return err
}
return nil
}
func (s *Store) GetAll() ([]*Plugin, error) {
s.fm.Lock()
defer s.fm.Unlock()
var plugins []*Plugin
j, err := os.ReadFile(s.path)
if err != nil {
return nil, err
}
if err := json.Unmarshal(j, &plugins); err != nil {
return nil, err
}
return plugins, nil
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment