Secrets: Implement Secret Plugin required flag and fatal crash on startup (#52552)
* add special handling on the plugin gathering side to check whether secrets manager plugins are enabled or not * show disabled badge in front end if the plugin is not enabled * Only show error in disabled badge hover if one is present (otherwise it shows "undefined") * refactor to make use of fields already available in the DTO * fix typo * if there is no error returned for the plugin, just show 'disabled' * fix typo * Update public/app/features/plugins/admin/components/Badges/PluginDisabledBadge.tsx Co-authored-by: Levente Balogh <balogh.levente.hu@gmail.com> * Update frontendsettings.go add clarifying comment * fix unit test * rework task to use new frontend property combined with plugin type to determine if the plugin should be disabled * Update helpers.test.ts revert test change * fix unit test * show custom uninstall message if the plugin is a secrets manager * bogus commit to trigger precommit * undo commit * run precommit manually * add some consts * refactor a bit to pull plugin error management up a level * re-add code squashed in merge * fix compile issues * add code to set plugin error fatal flag after secret migration * refactor to move plugin startup out of Should Check func * re-add important check * make plugin startup errors fatal the first time we set a secret on the plugin * rename func to make intent clearler * remove unnecessary duplicate code from plugin mig * fix compile error * fix more compile errors * add some extra logging to secrets migration * have remote_plugin secret service managed plugin error fatal flag directly * add blank file for eventual unit tests * fix linting issues * changes from PR review * quick bit of cleanup * add comment explaining design decision * move more common test helpers to file * slightly update to first time Get secret call * add unit tests * remove override func from provider * fix linting issues * add test cleanup step * add some comments about refactoring to hacky test function Co-authored-by: Levente Balogh <balogh.levente.hu@gmail.com>
This commit is contained in:
co-authored by
Levente Balogh
parent
06012d51a9
commit
72d9de3a0f
@@ -2,8 +2,10 @@ package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"github.com/grafana/grafana/pkg/infra/kvstore"
|
||||
"github.com/grafana/grafana/pkg/infra/log"
|
||||
"github.com/grafana/grafana/pkg/services/datasources"
|
||||
"github.com/grafana/grafana/pkg/services/featuremgmt"
|
||||
)
|
||||
@@ -21,6 +23,7 @@ type DataSourceSecretMigrationService struct {
|
||||
dataSourcesService datasources.DataSourceService
|
||||
kvStore *kvstore.NamespacedKVStore
|
||||
features featuremgmt.FeatureToggles
|
||||
log log.Logger
|
||||
}
|
||||
|
||||
func ProvideDataSourceMigrationService(
|
||||
@@ -32,6 +35,7 @@ func ProvideDataSourceMigrationService(
|
||||
dataSourcesService: dataSourcesService,
|
||||
kvStore: kvstore.WithNamespace(kvStore, 0, secretType),
|
||||
features: features,
|
||||
log: log.New("secrets.migration"),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,7 +44,7 @@ func (s *DataSourceSecretMigrationService) Migrate(ctx context.Context) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
s.log.Debug(fmt.Sprint("secret migration status is ", migrationStatus))
|
||||
// If this flag is true, delete secrets from the legacy secrets store as they are migrated
|
||||
disableSecretsCompatibility := s.features.IsEnabled(featuremgmt.FlagDisableSecretsCompatibility)
|
||||
// If migration hasn't happened, migrate to unified secrets and keep copy in legacy
|
||||
@@ -51,6 +55,7 @@ func (s *DataSourceSecretMigrationService) Migrate(ctx context.Context) error {
|
||||
needMigration := migrationStatus != completeSecretMigrationValue && disableSecretsCompatibility
|
||||
|
||||
if needCompatibility || needMigration {
|
||||
s.log.Debug("performing secret migration", "needs migration", needMigration, "needs compatibility", needCompatibility)
|
||||
query := &datasources.GetAllDataSourcesQuery{}
|
||||
err := s.dataSourcesService.GetAllDataSources(ctx, query)
|
||||
if err != nil {
|
||||
@@ -85,15 +90,17 @@ func (s *DataSourceSecretMigrationService) Migrate(ctx context.Context) error {
|
||||
}
|
||||
}
|
||||
|
||||
var newMigStatus string
|
||||
if disableSecretsCompatibility {
|
||||
err = s.kvStore.Set(ctx, secretMigrationStatusKey, completeSecretMigrationValue)
|
||||
newMigStatus = completeSecretMigrationValue
|
||||
} else {
|
||||
err = s.kvStore.Set(ctx, secretMigrationStatusKey, compatibleSecretMigrationValue)
|
||||
newMigStatus = compatibleSecretMigrationValue
|
||||
}
|
||||
|
||||
err = s.kvStore.Set(ctx, secretMigrationStatusKey, newMigStatus)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
s.log.Debug(fmt.Sprint("set secret migration status to ", newMigStatus))
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
Reference in New Issue
Block a user