mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
* Created PluginSecretMigrationService to be able to migrate from the secrets table from the database to the secret plugin. Added migration which takes all the secrets at the sql store and stores it in the plugin. Then deletes all the secrets from the sql * Added secretsKVStoreSQL.GetAll() method to return all the secrets at the sql table * Renaming kvstore_test.go as sql_test.go, adding GetAll test case. Fixing decryption of keys
57 lines
1.9 KiB
Go
57 lines
1.9 KiB
Go
package migrations
|
|
|
|
import (
|
|
"context"
|
|
"reflect"
|
|
"time"
|
|
|
|
"github.com/grafana/grafana/pkg/infra/log"
|
|
"github.com/grafana/grafana/pkg/infra/serverlock"
|
|
datasources "github.com/grafana/grafana/pkg/services/datasources/service"
|
|
"github.com/grafana/grafana/pkg/services/secrets/kvstore"
|
|
)
|
|
|
|
var logger = log.New("secret.migration")
|
|
|
|
// SecretMigrationService is used to migrate legacy secrets to new unified secrets.
|
|
type SecretMigrationService interface {
|
|
Migrate(ctx context.Context) error
|
|
}
|
|
|
|
type SecretMigrationServiceImpl struct {
|
|
Services []SecretMigrationService
|
|
ServerLockService *serverlock.ServerLockService
|
|
}
|
|
|
|
func ProvideSecretMigrationService(
|
|
serverLockService *serverlock.ServerLockService,
|
|
dataSourceSecretMigrationService *datasources.DataSourceSecretMigrationService,
|
|
pluginSecretMigrationService *kvstore.PluginSecretMigrationService,
|
|
) *SecretMigrationServiceImpl {
|
|
services := make([]SecretMigrationService, 0)
|
|
services = append(services, dataSourceSecretMigrationService)
|
|
// pluginMigrationService should always be the last one
|
|
services = append(services, pluginSecretMigrationService)
|
|
|
|
return &SecretMigrationServiceImpl{
|
|
ServerLockService: serverLockService,
|
|
Services: services,
|
|
}
|
|
}
|
|
|
|
// Migrate Run migration services. This will block until all services have exited.
|
|
func (s *SecretMigrationServiceImpl) Migrate(ctx context.Context) error {
|
|
// Start migration services.
|
|
return s.ServerLockService.LockAndExecute(ctx, "migrate secrets to unified secrets", time.Minute*10, func(context.Context) {
|
|
for _, service := range s.Services {
|
|
serviceName := reflect.TypeOf(service).String()
|
|
logger.Debug("Starting secret migration service", "service", serviceName)
|
|
err := service.Migrate(ctx)
|
|
if err != nil {
|
|
logger.Error("Stopped secret migration service", "service", serviceName, "reason", err)
|
|
}
|
|
logger.Debug("Finished secret migration service", "service", serviceName)
|
|
}
|
|
})
|
|
}
|