Files
grafana/pkg/plugins/manager/loader/initializer/initializer.go
lean.dev c8bcc96d90 [v10.1.x] Licensing: Pass func to update env variables when starting plugin (#74678)
Licensing: Pass func to update env variables when starting plugin (#74620)

(cherry picked from commit 5e0b20266e)
2023-09-12 10:06:14 -03:00

51 lines
1.3 KiB
Go

package initializer
import (
"context"
"errors"
"github.com/grafana/grafana/pkg/plugins"
"github.com/grafana/grafana/pkg/plugins/config"
"github.com/grafana/grafana/pkg/plugins/envvars"
)
type Initializer struct {
envVarProvider envvars.Provider
backendProvider plugins.BackendFactoryProvider
}
func New(cfg *config.Cfg, backendProvider plugins.BackendFactoryProvider, license plugins.Licensing) Initializer {
return Initializer{
envVarProvider: envvars.NewProvider(cfg, license),
backendProvider: backendProvider,
}
}
func (i *Initializer) Initialize(ctx context.Context, p *plugins.Plugin) error {
if p.Backend {
backendFactory := i.backendProvider.BackendFactory(ctx, p)
if backendFactory == nil {
return errors.New("could not find backend factory for plugin")
}
// this will ensure that the env variables are calculated every time a plugin is started
envFunc := func() []string {
// envvar.Get actually never returns any error, safe to skip
vars, err := i.envVarProvider.Get(ctx, p)
// logging just in case
if err != nil {
p.Logger().Error("error building env variables", "err", err)
}
return vars
}
if backendClient, err := backendFactory(p.ID, p.Logger(), envFunc); err != nil {
return err
} else {
p.RegisterClient(backendClient)
}
}
return nil
}