mirror of
https://github.com/grafana/grafana.git
synced 2025-08-06 02:23:28 +08:00
Plugins: Make Installer responsible for removing plugins from file system (#73323)
* installer is responsible for removing from file system * take plugin as arg * remove resolve step * return plugin in test
This commit is contained in:
@ -2,7 +2,6 @@ package termination
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
|
||||
"github.com/grafana/grafana/pkg/plugins"
|
||||
"github.com/grafana/grafana/pkg/plugins/config"
|
||||
@ -11,57 +10,41 @@ import (
|
||||
|
||||
// Terminator is responsible for the Termination stage of the plugin loader pipeline.
|
||||
type Terminator interface {
|
||||
Terminate(ctx context.Context, pluginID string) error
|
||||
Terminate(ctx context.Context, p *plugins.Plugin) (*plugins.Plugin, error)
|
||||
}
|
||||
|
||||
// ResolveFunc is the function used for the Resolve step of the Termination stage.
|
||||
type ResolveFunc func(ctx context.Context, pluginID string) (*plugins.Plugin, error)
|
||||
|
||||
// TerminateFunc is the function used for the Terminate step of the Termination stage.
|
||||
type TerminateFunc func(ctx context.Context, p *plugins.Plugin) error
|
||||
|
||||
type Terminate struct {
|
||||
cfg *config.Cfg
|
||||
resolveStep ResolveFunc
|
||||
terminateSteps []TerminateFunc
|
||||
log log.Logger
|
||||
}
|
||||
|
||||
type Opts struct {
|
||||
ResolveFunc ResolveFunc
|
||||
TerminateFuncs []TerminateFunc
|
||||
}
|
||||
|
||||
// New returns a new Termination stage.
|
||||
func New(cfg *config.Cfg, opts Opts) (*Terminate, error) {
|
||||
// without a resolve function, we can't do anything so return an error
|
||||
if opts.ResolveFunc == nil && opts.TerminateFuncs != nil {
|
||||
return nil, errors.New("resolve function is required")
|
||||
}
|
||||
|
||||
if opts.TerminateFuncs == nil {
|
||||
opts.TerminateFuncs = []TerminateFunc{}
|
||||
}
|
||||
|
||||
return &Terminate{
|
||||
cfg: cfg,
|
||||
resolveStep: opts.ResolveFunc,
|
||||
terminateSteps: opts.TerminateFuncs,
|
||||
log: log.New("plugins.termination"),
|
||||
}, nil
|
||||
}
|
||||
|
||||
// Terminate will execute the Terminate steps of the Termination stage.
|
||||
func (t *Terminate) Terminate(ctx context.Context, pluginID string) error {
|
||||
p, err := t.resolveStep(ctx, pluginID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
func (t *Terminate) Terminate(ctx context.Context, p *plugins.Plugin) (*plugins.Plugin, error) {
|
||||
for _, terminate := range t.terminateSteps {
|
||||
if err = terminate(ctx, p); err != nil {
|
||||
return err
|
||||
if err := terminate(ctx, p); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
return p, nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user