Skip to content
Snippets Groups Projects
Commit 4a52e92e 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 8694ce92
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 { ...@@ -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