mirror of
https://github.com/grafana/grafana.git
synced 2026-08-26 21:37:31 -05:00
Use dw dynamic config (#91882)
* Remove kubernetesPlaylists feature_toggle * Remove unified_storage_mode * Remove double import * Read from config instead from feature_toggle * cover scenario for when unified storage is not defined * Be temporarily retro compatible with previous feature toggle * Properly read unified_storage section * [WIP] Read new format of config * Fix test * Fix other tests * Generate feature flags file * Use <group>.<resource> schema * Use <group>.resource format on the FE as well * Hide UniStore config from Frontend Signed-off-by: Maicon Costa <maiconscosta@gmail.com> * unwanted changes * Use feature toggles in the FE. Enforce FTs are present before enabling dual writing Co-authored-by: Ryan McKinley <ryantxu@users.noreply.github.com> * use kubernetes playlists feature toggle on the FE * Remove unwanted code * Remove configs from the FE * Remove commented code * Add more explicit example --------- Signed-off-by: Maicon Costa <maiconscosta@gmail.com> Co-authored-by: Maicon Costa <maiconscosta@gmail.com>
This commit is contained in:
co-authored by
Ryan McKinley
Maicon Costa
parent
f8765087b5
commit
2e451b2ed7
@@ -29,6 +29,7 @@ import (
|
||||
"github.com/grafana/grafana-plugin-sdk-go/backend/gtime"
|
||||
|
||||
"github.com/grafana/grafana/pkg/apimachinery/identity"
|
||||
"github.com/grafana/grafana/pkg/apiserver/rest"
|
||||
"github.com/grafana/grafana/pkg/infra/log"
|
||||
"github.com/grafana/grafana/pkg/util"
|
||||
"github.com/grafana/grafana/pkg/util/osutil"
|
||||
@@ -523,6 +524,13 @@ type Cfg struct {
|
||||
|
||||
//Short Links
|
||||
ShortLinkExpiration int
|
||||
|
||||
// Unified Storage
|
||||
UnifiedStorage map[string]UnifiedStorageConfig
|
||||
}
|
||||
|
||||
type UnifiedStorageConfig struct {
|
||||
DualWriterMode rest.DualWriterMode
|
||||
}
|
||||
|
||||
type InstallPlugin struct {
|
||||
@@ -1324,6 +1332,9 @@ func (cfg *Cfg) parseINIFile(iniFile *ini.File) error {
|
||||
cfg.ScopesListScopesURL = scopesSection.Key("list_scopes_endpoint").MustString("")
|
||||
cfg.ScopesListDashboardsURL = scopesSection.Key("list_dashboards_endpoint").MustString("")
|
||||
|
||||
// read unifed storage config
|
||||
cfg.setUnifiedStorageConfig()
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
package setting
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/grafana/grafana/pkg/apiserver/rest"
|
||||
)
|
||||
|
||||
// read storage configs from ini file. They look like:
|
||||
// [unified_storage.<group>.<resource>]
|
||||
// <field> = <value>
|
||||
// e.g.
|
||||
// [unified_storage.playlists.playlist.grafana.app]
|
||||
// dualWriterMode = 2
|
||||
func (cfg *Cfg) setUnifiedStorageConfig() {
|
||||
storageConfig := make(map[string]UnifiedStorageConfig)
|
||||
sections := cfg.Raw.Sections()
|
||||
for _, section := range sections {
|
||||
sectionName := section.Name()
|
||||
if !strings.HasPrefix(sectionName, "unified_storage.") {
|
||||
continue
|
||||
}
|
||||
// the resource name is the part after the first dot
|
||||
resourceName := strings.SplitAfterN(sectionName, ".", 2)[1]
|
||||
|
||||
// parse dualWriter modes from the section
|
||||
dualWriterMode := section.Key("dualWriterMode").MustInt(0)
|
||||
storageConfig[resourceName] = UnifiedStorageConfig{DualWriterMode: rest.DualWriterMode(dualWriterMode)}
|
||||
}
|
||||
cfg.UnifiedStorage = storageConfig
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package setting
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestCfg_setUnifiedStorageConfig(t *testing.T) {
|
||||
t.Run("read unified_storage configs", func(t *testing.T) {
|
||||
cfg := NewCfg()
|
||||
err := cfg.Load(CommandLineArgs{HomePath: "../../", Config: "../../conf/defaults.ini"})
|
||||
assert.NoError(t, err)
|
||||
|
||||
s, err := cfg.Raw.NewSection("unified_storage.playlists.playlist.grafana.app")
|
||||
assert.NoError(t, err)
|
||||
|
||||
_, err = s.NewKey("dualWriterMode", "2")
|
||||
assert.NoError(t, err)
|
||||
|
||||
cfg.setUnifiedStorageConfig()
|
||||
|
||||
value, exists := cfg.UnifiedStorage["playlists.playlist.grafana.app"]
|
||||
|
||||
assert.Equal(t, exists, true)
|
||||
assert.Equal(t, value, UnifiedStorageConfig{DualWriterMode: 2})
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user