mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
FeatureToggls: remove IsFeatureToggleEnabled from SettingsProvider (#44574)
This commit is contained in:
parent
de04f19c47
commit
7ee38af95a
@ -179,7 +179,7 @@ func (s alertingSecret) reencrypt(secretsSrv *manager.SecretsService, sess *xorm
|
|||||||
}
|
}
|
||||||
|
|
||||||
func ReEncryptSecrets(_ utils.CommandLine, runner runner.Runner) error {
|
func ReEncryptSecrets(_ utils.CommandLine, runner runner.Runner) error {
|
||||||
if !runner.SettingsProvider.IsFeatureToggleEnabled(featuremgmt.FlagEnvelopeEncryption) {
|
if !runner.Features.IsEnabled(featuremgmt.FlagEnvelopeEncryption) {
|
||||||
logger.Warn("Envelope encryption is not enabled, quitting...")
|
logger.Warn("Envelope encryption is not enabled, quitting...")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package runner
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/grafana/grafana/pkg/services/encryption"
|
"github.com/grafana/grafana/pkg/services/encryption"
|
||||||
|
"github.com/grafana/grafana/pkg/services/featuremgmt"
|
||||||
"github.com/grafana/grafana/pkg/services/secrets/manager"
|
"github.com/grafana/grafana/pkg/services/secrets/manager"
|
||||||
"github.com/grafana/grafana/pkg/services/sqlstore"
|
"github.com/grafana/grafana/pkg/services/sqlstore"
|
||||||
"github.com/grafana/grafana/pkg/setting"
|
"github.com/grafana/grafana/pkg/setting"
|
||||||
@ -11,17 +12,19 @@ type Runner struct {
|
|||||||
Cfg *setting.Cfg
|
Cfg *setting.Cfg
|
||||||
SQLStore *sqlstore.SQLStore
|
SQLStore *sqlstore.SQLStore
|
||||||
SettingsProvider setting.Provider
|
SettingsProvider setting.Provider
|
||||||
|
Features featuremgmt.FeatureToggles
|
||||||
EncryptionService encryption.Internal
|
EncryptionService encryption.Internal
|
||||||
SecretsService *manager.SecretsService
|
SecretsService *manager.SecretsService
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(cfg *setting.Cfg, sqlStore *sqlstore.SQLStore, settingsProvider setting.Provider,
|
func New(cfg *setting.Cfg, sqlStore *sqlstore.SQLStore, settingsProvider setting.Provider,
|
||||||
encryptionService encryption.Internal, secretsService *manager.SecretsService) Runner {
|
encryptionService encryption.Internal, features featuremgmt.FeatureToggles, secretsService *manager.SecretsService) Runner {
|
||||||
return Runner{
|
return Runner{
|
||||||
Cfg: cfg,
|
Cfg: cfg,
|
||||||
SQLStore: sqlStore,
|
SQLStore: sqlStore,
|
||||||
SettingsProvider: settingsProvider,
|
SettingsProvider: settingsProvider,
|
||||||
EncryptionService: encryptionService,
|
EncryptionService: encryptionService,
|
||||||
SecretsService: secretsService,
|
SecretsService: secretsService,
|
||||||
|
Features: features,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ import (
|
|||||||
"github.com/grafana/grafana/pkg/infra/tracing"
|
"github.com/grafana/grafana/pkg/infra/tracing"
|
||||||
"github.com/grafana/grafana/pkg/infra/usagestats"
|
"github.com/grafana/grafana/pkg/infra/usagestats"
|
||||||
"github.com/grafana/grafana/pkg/services/featuremgmt"
|
"github.com/grafana/grafana/pkg/services/featuremgmt"
|
||||||
|
"github.com/grafana/grafana/pkg/services/hooks"
|
||||||
"github.com/grafana/grafana/pkg/services/secrets"
|
"github.com/grafana/grafana/pkg/services/secrets"
|
||||||
secretsDatabase "github.com/grafana/grafana/pkg/services/secrets/database"
|
secretsDatabase "github.com/grafana/grafana/pkg/services/secrets/database"
|
||||||
secretsManager "github.com/grafana/grafana/pkg/services/secrets/manager"
|
secretsManager "github.com/grafana/grafana/pkg/services/secrets/manager"
|
||||||
@ -36,6 +37,7 @@ var wireSet = wire.NewSet(
|
|||||||
wire.Bind(new(secrets.Store), new(*secretsDatabase.SecretsStoreImpl)),
|
wire.Bind(new(secrets.Store), new(*secretsDatabase.SecretsStoreImpl)),
|
||||||
secretsManager.ProvideSecretsService,
|
secretsManager.ProvideSecretsService,
|
||||||
wire.Bind(new(secrets.Service), new(*secretsManager.SecretsService)),
|
wire.Bind(new(secrets.Service), new(*secretsManager.SecretsService)),
|
||||||
|
hooks.ProvideService,
|
||||||
)
|
)
|
||||||
|
|
||||||
func Initialize(cfg *setting.Cfg) (Runner, error) {
|
func Initialize(cfg *setting.Cfg) (Runner, error) {
|
||||||
|
@ -5,11 +5,13 @@ package runner
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/google/wire"
|
"github.com/google/wire"
|
||||||
|
"github.com/grafana/grafana/pkg/models"
|
||||||
"github.com/grafana/grafana/pkg/registry"
|
"github.com/grafana/grafana/pkg/registry"
|
||||||
"github.com/grafana/grafana/pkg/services/encryption"
|
"github.com/grafana/grafana/pkg/services/encryption"
|
||||||
"github.com/grafana/grafana/pkg/services/encryption/ossencryption"
|
"github.com/grafana/grafana/pkg/services/encryption/ossencryption"
|
||||||
"github.com/grafana/grafana/pkg/services/kmsproviders"
|
"github.com/grafana/grafana/pkg/services/kmsproviders"
|
||||||
"github.com/grafana/grafana/pkg/services/kmsproviders/osskmsproviders"
|
"github.com/grafana/grafana/pkg/services/kmsproviders/osskmsproviders"
|
||||||
|
"github.com/grafana/grafana/pkg/services/licensing"
|
||||||
"github.com/grafana/grafana/pkg/services/sqlstore/migrations"
|
"github.com/grafana/grafana/pkg/services/sqlstore/migrations"
|
||||||
"github.com/grafana/grafana/pkg/setting"
|
"github.com/grafana/grafana/pkg/setting"
|
||||||
)
|
)
|
||||||
@ -17,6 +19,8 @@ import (
|
|||||||
var wireExtsSet = wire.NewSet(
|
var wireExtsSet = wire.NewSet(
|
||||||
wireSet,
|
wireSet,
|
||||||
migrations.ProvideOSSMigrations,
|
migrations.ProvideOSSMigrations,
|
||||||
|
licensing.ProvideService,
|
||||||
|
wire.Bind(new(models.Licensing), new(*licensing.OSSLicensingService)),
|
||||||
wire.Bind(new(registry.DatabaseMigrator), new(*migrations.OSSMigrations)),
|
wire.Bind(new(registry.DatabaseMigrator), new(*migrations.OSSMigrations)),
|
||||||
setting.ProvideProvider,
|
setting.ProvideProvider,
|
||||||
wire.Bind(new(setting.Provider), new(*setting.OSSImpl)),
|
wire.Bind(new(setting.Provider), new(*setting.OSSImpl)),
|
||||||
|
@ -12,17 +12,19 @@ import (
|
|||||||
type Service struct {
|
type Service struct {
|
||||||
enc encryption.Internal
|
enc encryption.Internal
|
||||||
settings setting.Provider
|
settings setting.Provider
|
||||||
|
features featuremgmt.FeatureToggles
|
||||||
}
|
}
|
||||||
|
|
||||||
func ProvideService(enc encryption.Internal, settings setting.Provider) Service {
|
func ProvideService(enc encryption.Internal, settings setting.Provider, features featuremgmt.FeatureToggles) Service {
|
||||||
return Service{
|
return Service{
|
||||||
enc: enc,
|
enc: enc,
|
||||||
settings: settings,
|
settings: settings,
|
||||||
|
features: features,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s Service) Provide() (map[secrets.ProviderID]secrets.Provider, error) {
|
func (s Service) Provide() (map[secrets.ProviderID]secrets.Provider, error) {
|
||||||
if !s.settings.IsFeatureToggleEnabled(featuremgmt.FlagEnvelopeEncryption) {
|
if !s.features.IsEnabled(featuremgmt.FlagEnvelopeEncryption) {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,9 +37,10 @@ func SetupTestService(tb testing.TB, store secrets.Store) *SecretsService {
|
|||||||
encryption := ossencryption.ProvideService()
|
encryption := ossencryption.ProvideService()
|
||||||
secretsService, err := ProvideSecretsService(
|
secretsService, err := ProvideSecretsService(
|
||||||
store,
|
store,
|
||||||
osskmsproviders.ProvideService(encryption, settings),
|
osskmsproviders.ProvideService(encryption, settings, features),
|
||||||
encryption,
|
encryption,
|
||||||
settings,
|
settings,
|
||||||
|
features,
|
||||||
&usagestats.UsageStatsMock{T: tb},
|
&usagestats.UsageStatsMock{T: tb},
|
||||||
)
|
)
|
||||||
require.NoError(tb, err)
|
require.NoError(tb, err)
|
||||||
|
@ -24,6 +24,7 @@ type SecretsService struct {
|
|||||||
store secrets.Store
|
store secrets.Store
|
||||||
enc encryption.Internal
|
enc encryption.Internal
|
||||||
settings setting.Provider
|
settings setting.Provider
|
||||||
|
features featuremgmt.FeatureToggles
|
||||||
usageStats usagestats.Service
|
usageStats usagestats.Service
|
||||||
|
|
||||||
currentProviderID secrets.ProviderID
|
currentProviderID secrets.ProviderID
|
||||||
@ -37,6 +38,7 @@ func ProvideSecretsService(
|
|||||||
kmsProvidersService kmsproviders.Service,
|
kmsProvidersService kmsproviders.Service,
|
||||||
enc encryption.Internal,
|
enc encryption.Internal,
|
||||||
settings setting.Provider,
|
settings setting.Provider,
|
||||||
|
features featuremgmt.FeatureToggles,
|
||||||
usageStats usagestats.Service,
|
usageStats usagestats.Service,
|
||||||
) (*SecretsService, error) {
|
) (*SecretsService, error) {
|
||||||
providers, err := kmsProvidersService.Provide()
|
providers, err := kmsProvidersService.Provide()
|
||||||
@ -45,7 +47,7 @@ func ProvideSecretsService(
|
|||||||
}
|
}
|
||||||
|
|
||||||
logger := log.New("secrets")
|
logger := log.New("secrets")
|
||||||
enabled := settings.IsFeatureToggleEnabled(featuremgmt.FlagEnvelopeEncryption)
|
enabled := features.IsEnabled(featuremgmt.FlagEnvelopeEncryption)
|
||||||
currentProviderID := readCurrentProviderID(settings)
|
currentProviderID := readCurrentProviderID(settings)
|
||||||
|
|
||||||
if _, ok := providers[currentProviderID]; enabled && !ok {
|
if _, ok := providers[currentProviderID]; enabled && !ok {
|
||||||
@ -66,6 +68,7 @@ func ProvideSecretsService(
|
|||||||
providers: providers,
|
providers: providers,
|
||||||
currentProviderID: currentProviderID,
|
currentProviderID: currentProviderID,
|
||||||
dataKeyCache: make(map[string]dataKeyCacheItem),
|
dataKeyCache: make(map[string]dataKeyCacheItem),
|
||||||
|
features: features,
|
||||||
log: logger,
|
log: logger,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,7 +92,7 @@ func (s *SecretsService) registerUsageMetrics() {
|
|||||||
|
|
||||||
// Enabled / disabled
|
// Enabled / disabled
|
||||||
usageMetrics["stats.encryption.envelope_encryption_enabled.count"] = 0
|
usageMetrics["stats.encryption.envelope_encryption_enabled.count"] = 0
|
||||||
if s.settings.IsFeatureToggleEnabled(featuremgmt.FlagEnvelopeEncryption) {
|
if s.features.IsEnabled(featuremgmt.FlagEnvelopeEncryption) {
|
||||||
usageMetrics["stats.encryption.envelope_encryption_enabled.count"] = 1
|
usageMetrics["stats.encryption.envelope_encryption_enabled.count"] = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -132,7 +135,7 @@ func (s *SecretsService) Encrypt(ctx context.Context, payload []byte, opt secret
|
|||||||
|
|
||||||
func (s *SecretsService) EncryptWithDBSession(ctx context.Context, payload []byte, opt secrets.EncryptionOptions, sess *xorm.Session) ([]byte, error) {
|
func (s *SecretsService) EncryptWithDBSession(ctx context.Context, payload []byte, opt secrets.EncryptionOptions, sess *xorm.Session) ([]byte, error) {
|
||||||
// Use legacy encryption service if envelopeEncryptionFeatureToggle toggle is off
|
// Use legacy encryption service if envelopeEncryptionFeatureToggle toggle is off
|
||||||
if !s.settings.IsFeatureToggleEnabled(featuremgmt.FlagEnvelopeEncryption) {
|
if !s.features.IsEnabled(featuremgmt.FlagEnvelopeEncryption) {
|
||||||
return s.enc.Encrypt(ctx, payload, setting.SecretKey)
|
return s.enc.Encrypt(ctx, payload, setting.SecretKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -175,7 +178,7 @@ func (s *SecretsService) keyName(scope string) string {
|
|||||||
|
|
||||||
func (s *SecretsService) Decrypt(ctx context.Context, payload []byte) ([]byte, error) {
|
func (s *SecretsService) Decrypt(ctx context.Context, payload []byte) ([]byte, error) {
|
||||||
// Use legacy encryption service if featuremgmt.FlagEnvelopeEncryption toggle is off
|
// Use legacy encryption service if featuremgmt.FlagEnvelopeEncryption toggle is off
|
||||||
if !s.settings.IsFeatureToggleEnabled(featuremgmt.FlagEnvelopeEncryption) {
|
if !s.features.IsEnabled(featuremgmt.FlagEnvelopeEncryption) {
|
||||||
return s.enc.Decrypt(ctx, payload, setting.SecretKey)
|
return s.enc.Decrypt(ctx, payload, setting.SecretKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -178,15 +178,16 @@ func TestSecretsService_UseCurrentProvider(t *testing.T) {
|
|||||||
raw, err := ini.Load([]byte(rawCfg))
|
raw, err := ini.Load([]byte(rawCfg))
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
features := featuremgmt.WithFeatures(featuremgmt.FlagEnvelopeEncryption)
|
||||||
providerID := secrets.ProviderID("fakeProvider.v1")
|
providerID := secrets.ProviderID("fakeProvider.v1")
|
||||||
settings := &setting.OSSImpl{
|
settings := &setting.OSSImpl{
|
||||||
Cfg: &setting.Cfg{
|
Cfg: &setting.Cfg{
|
||||||
Raw: raw,
|
Raw: raw,
|
||||||
IsFeatureToggleEnabled: featuremgmt.WithFeatures(featuremgmt.FlagEnvelopeEncryption).IsEnabled,
|
IsFeatureToggleEnabled: features.IsEnabled,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
encr := ossencryption.ProvideService()
|
encr := ossencryption.ProvideService()
|
||||||
kms := newFakeKMS(osskmsproviders.ProvideService(encr, settings))
|
kms := newFakeKMS(osskmsproviders.ProvideService(encr, settings, features))
|
||||||
secretStore := database.ProvideSecretsStore(sqlstore.InitTestDB(t))
|
secretStore := database.ProvideSecretsStore(sqlstore.InitTestDB(t))
|
||||||
|
|
||||||
svcEncrypt, err := ProvideSecretsService(
|
svcEncrypt, err := ProvideSecretsService(
|
||||||
@ -194,6 +195,7 @@ func TestSecretsService_UseCurrentProvider(t *testing.T) {
|
|||||||
&kms,
|
&kms,
|
||||||
encr,
|
encr,
|
||||||
settings,
|
settings,
|
||||||
|
features,
|
||||||
&usagestats.UsageStatsMock{T: t},
|
&usagestats.UsageStatsMock{T: t},
|
||||||
)
|
)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@ -211,6 +213,7 @@ func TestSecretsService_UseCurrentProvider(t *testing.T) {
|
|||||||
&kms,
|
&kms,
|
||||||
encr,
|
encr,
|
||||||
settings,
|
settings,
|
||||||
|
features,
|
||||||
&usagestats.UsageStatsMock{T: t},
|
&usagestats.UsageStatsMock{T: t},
|
||||||
)
|
)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
@ -49,8 +49,6 @@ type Provider interface {
|
|||||||
// RegisterReloadHandler registers a handler for validation and reload
|
// RegisterReloadHandler registers a handler for validation and reload
|
||||||
// of configuration updates tied to a specific section
|
// of configuration updates tied to a specific section
|
||||||
RegisterReloadHandler(section string, handler ReloadHandler)
|
RegisterReloadHandler(section string, handler ReloadHandler)
|
||||||
// IsFeatureToggleEnabled checks if the feature's toggle is enabled
|
|
||||||
IsFeatureToggleEnabled(name string) bool
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Section is a settings section copy
|
// Section is a settings section copy
|
||||||
|
Loading…
Reference in New Issue
Block a user