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
No related branches found
No related tags found
1 merge request!690Add a file storage to plugin registry
This commit is part of merge request !690. Comments created here will be created in the context of that merge request.
[{"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 {
pr := &PluginRegistry{}
pluginStore := NewStore(pluginStorePath)
plugins, err := pluginStore.GetAll()
if err != nil {
fmt.Println(err)
}
for _, dir := range dirs {
fmt.Printf("File %+v\n", dir)
......@@ -66,29 +71,33 @@ func registerPlugins() *PluginRegistry {
panic(err)
}
//var id uuid.UUID
//switch i {
//case 0:
// id = uuid.MustParse("e2c358b3-6482-4010-b0d8-679dff73153b")
//case 1:
// id = uuid.MustParse("d1c269a2-6482-4010-b0d8-679dff73153b")
//case 2:
// id = uuid.MustParse("f3b474c2-6482-4010-b0d8-679dff73153b")
//default:
// break
//}
plugin := &Plugin{
ID: uuid.New(),
Path: filepath.Join(dirPath, util.BundledPluginName),
Hash: dirHashed,
Manifest: manifest,
var plugin *Plugin
for i, p := range plugins {
if p.Hash == dirHashed {
plugin = p
plugins[i] = plugins[len(plugins)-1]
plugins = plugins[:len(plugins)-1]
break
}
}
if plugin == nil {
plugin = &Plugin{
ID: uuid.New(),
Path: filepath.Join(dirPath, util.BundledPluginName),
Hash: dirHashed,
Manifest: manifest,
}
}
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 {
fmt.Println(err)
}
......
......@@ -20,4 +20,5 @@ EXPOSE 55057
WORKDIR /app/
COPY --from=builder /plugin-registry/artifacts/plugin-registry .
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"]
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