11package v1alpha1
22
33import (
4+ "bytes"
45 "crypto/sha256"
56 "fmt"
67 "path"
@@ -24,7 +25,7 @@ func hash(text string) string {
2425 return fmt .Sprintf ("%x" , h .Sum (nil ))
2526}
2627
27- func generateSomeDefaults (cr * Storage , crDB * Database ) schema.Configuration {
28+ func generateHosts (cr * Storage ) [] schema.Host {
2829 var hosts []schema.Host
2930
3031 for i := 0 ; i < int (cr .Spec .Nodes ); i ++ {
@@ -57,6 +58,10 @@ func generateSomeDefaults(cr *Storage, crDB *Database) schema.Configuration {
5758 }
5859 }
5960
61+ return hosts
62+ }
63+
64+ func generateKeyConfig (cr * Storage , crDB * Database ) * schema.KeyConfig {
6065 var keyConfig * schema.KeyConfig
6166 if crDB != nil && crDB .Spec .Encryption != nil && crDB .Spec .Encryption .Enabled {
6267 keyConfig = & schema.KeyConfig {
@@ -71,25 +76,10 @@ func generateSomeDefaults(cr *Storage, crDB *Database) schema.Configuration {
7176 }
7277 }
7378
74- return schema.Configuration {
75- Hosts : hosts ,
76- KeyConfig : keyConfig ,
77- }
79+ return keyConfig
7880}
7981
80- func tryFillMissingSections (
81- resultConfig map [string ]interface {},
82- generatedConfig schema.Configuration ,
83- ) {
84- if resultConfig ["hosts" ] == nil {
85- resultConfig ["hosts" ] = generatedConfig .Hosts
86- }
87- if generatedConfig .KeyConfig != nil {
88- resultConfig ["key_config" ] = generatedConfig .KeyConfig
89- }
90- }
91-
92- func BuildConfiguration (cr * Storage , crDB * Database ) (string , error ) {
82+ func BuildConfiguration (cr * Storage , crDB * Database ) ([]byte , error ) {
9383 config := make (map [string ]interface {})
9484
9585 // If any kind of configuration exists on Database object, then
@@ -103,18 +93,47 @@ func BuildConfiguration(cr *Storage, crDB *Database) (string, error) {
10393 rawYamlConfiguration = cr .Spec .Configuration
10494 }
10595
106- err := yaml .Unmarshal ([]byte (rawYamlConfiguration ), & config )
96+ dynconfig , err := ParseDynconfig (rawYamlConfiguration )
97+ if err == nil {
98+ if dynconfig .Config ["hosts" ] == nil {
99+ hosts := generateHosts (cr )
100+ dynconfig .Config ["hosts" ] = hosts
101+ }
102+
103+ return yaml .Marshal (dynconfig )
104+ }
105+
106+ err = yaml .Unmarshal ([]byte (rawYamlConfiguration ), & config )
107107 if err != nil {
108- return "" , err
108+ return nil , err
109109 }
110110
111- generatedConfig := generateSomeDefaults (cr , crDB )
112- tryFillMissingSections (config , generatedConfig )
111+ if config ["hosts" ] == nil {
112+ hosts := generateHosts (cr )
113+ config ["hosts" ] = hosts
114+ }
113115
114- data , err := yaml .Marshal (config )
115- if err != nil {
116- return "" , err
116+ // Will be removed by YDBOPS-9692
117+ keyConfig := generateKeyConfig (cr , crDB )
118+ if keyConfig != nil {
119+ config ["key_config" ] = keyConfig
117120 }
118121
119- return string (data ), nil
122+ return yaml .Marshal (config )
123+ }
124+
125+ func ParseConfig (rawYamlConfiguration string ) (schema.Configuration , error ) {
126+ config := schema.Configuration {}
127+ dec := yaml .NewDecoder (bytes .NewReader ([]byte (rawYamlConfiguration )))
128+ dec .KnownFields (false )
129+ err := dec .Decode (& config )
130+ return config , err
131+ }
132+
133+ func ParseDynconfig (rawYamlConfiguration string ) (schema.Dynconfig , error ) {
134+ dynconfig := schema.Dynconfig {}
135+ dec := yaml .NewDecoder (bytes .NewReader ([]byte (rawYamlConfiguration )))
136+ dec .KnownFields (true )
137+ err := dec .Decode (& dynconfig )
138+ return dynconfig , err
120139}
0 commit comments