Skip to content
Snippets Groups Projects
Commit 84c78cd8 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 929ef816
Branches
No related tags found
1 merge request!690Add a file storage to plugin registry
[{"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