@@ -2,30 +2,15 @@ package v1alpha1
22
33import (
44 "bytes"
5- "crypto/sha256"
65 "errors"
76 "fmt"
8- "path"
97 "strconv"
108
119 "gopkg.in/yaml.v3"
1210
1311 "github.com/ydb-platform/ydb-kubernetes-operator/internal/configuration/schema"
1412)
1513
16- const (
17- DatabaseEncryptionKeyPath = "/opt/ydb/secrets/database_encryption"
18- DatabaseEncryptionKeyFile = "key"
19- DatastreamsIAMServiceAccountKeyPath = "/opt/ydb/secrets/datastreams"
20- DatastreamsIAMServiceAccountKeyFile = "sa_key.json"
21- )
22-
23- func hash (text string ) string {
24- h := sha256 .New ()
25- h .Write ([]byte (text ))
26- return fmt .Sprintf ("%x" , h .Sum (nil ))
27- }
28-
2914func generateHosts (cr * Storage ) []schema.Host {
3015 var hosts []schema.Host
3116
@@ -62,36 +47,6 @@ func generateHosts(cr *Storage) []schema.Host {
6247 return hosts
6348}
6449
65- func generateKeyConfig (cr * Storage , crDB * Database ) * schema.KeyConfig {
66- var keyConfig * schema.KeyConfig
67- if crDB != nil && crDB .Spec .Encryption != nil && crDB .Spec .Encryption .Enabled {
68- keyConfig = & schema.KeyConfig {
69- Keys : []schema.Key {
70- {
71- ContainerPath : path .Join (DatabaseEncryptionKeyPath , DatabaseEncryptionKeyFile ),
72- ID : hash (cr .Name ),
73- Pin : crDB .Spec .Encryption .Pin ,
74- Version : 1 ,
75- },
76- },
77- }
78- }
79-
80- return keyConfig
81- }
82-
83- func tryFillMissingSections (
84- resultConfig map [string ]interface {},
85- generatedConfig schema.Configuration ,
86- ) {
87- if resultConfig ["hosts" ] == nil {
88- resultConfig ["hosts" ] = generatedConfig .Hosts
89- }
90- if generatedConfig .KeyConfig != nil {
91- resultConfig ["key_config" ] = generatedConfig .KeyConfig
92- }
93- }
94-
9550func BuildConfiguration (cr * Storage , crDB * Database ) ([]byte , error ) {
9651 config := make (map [string ]interface {})
9752
@@ -106,28 +61,29 @@ func BuildConfiguration(cr *Storage, crDB *Database) ([]byte, error) {
10661 rawYamlConfiguration = cr .Spec .Configuration
10762 }
10863
109- hosts := generateHosts (cr )
110- keyConfig := generateKeyConfig (cr , crDB )
111- generatedConfig := schema.Configuration {
112- Hosts : hosts ,
113- KeyConfig : keyConfig ,
114- }
115-
116- success , dynconfig , err := TryParseDynconfig (rawYamlConfiguration )
64+ success , dynConfig , err := ParseDynConfig (rawYamlConfiguration )
11765 if success {
11866 if err != nil {
11967 return nil , fmt .Errorf ("failed to parse dynconfig, error: %w" , err )
12068 }
121- tryFillMissingSections (dynconfig .Config , generatedConfig )
122- return yaml .Marshal (dynconfig )
69+ if dynConfig .Config ["hosts" ] == nil {
70+ hosts := generateHosts (cr )
71+ dynConfig .Config ["hosts" ] = hosts
72+ }
73+
74+ return yaml .Marshal (dynConfig )
12375 }
12476
12577 err = yaml .Unmarshal ([]byte (rawYamlConfiguration ), & config )
12678 if err != nil {
12779 return nil , fmt .Errorf ("failed to serialize YAML config, error: %w" , err )
12880 }
12981
130- tryFillMissingSections (config , generatedConfig )
82+ if config ["hosts" ] == nil {
83+ hosts := generateHosts (cr )
84+ config ["hosts" ] = hosts
85+ }
86+
13187 return yaml .Marshal (config )
13288}
13389
@@ -144,25 +100,25 @@ func ParseConfiguration(rawYamlConfiguration string) (schema.Configuration, erro
144100 return configuration , nil
145101}
146102
147- func TryParseDynconfig (rawYamlConfiguration string ) (bool , schema.Dynconfig , error ) {
103+ func ParseDynConfig (rawYamlConfiguration string ) (bool , schema.DynConfig , error ) {
148104 dec := yaml .NewDecoder (bytes .NewReader ([]byte (rawYamlConfiguration )))
149105 dec .KnownFields (true )
150106
151- var dynconfig schema.Dynconfig
152- err := dec .Decode (& dynconfig )
107+ var dynConfig schema.DynConfig
108+ err := dec .Decode (& dynConfig )
153109 if err != nil {
154- return false , schema.Dynconfig {}, fmt .Errorf ("error unmarshal yaml to dynconfig: %w" , err )
110+ return false , schema.DynConfig {}, fmt .Errorf ("error unmarshal yaml to dynconfig: %w" , err )
155111 }
156112
157- err = validateDynconfig ( dynconfig )
113+ err = validateDynConfig ( dynConfig )
158114 if err != nil {
159- return true , dynconfig , fmt .Errorf ("error validate dynconfig: %w" , err )
115+ return true , dynConfig , fmt .Errorf ("error validate dynconfig: %w" , err )
160116 }
161117
162- return true , dynconfig , nil
118+ return true , dynConfig , err
163119}
164120
165- func validateDynconfig (dynConfig schema.Dynconfig ) error {
121+ func validateDynConfig (dynConfig schema.DynConfig ) error {
166122 if _ , exist := dynConfig .Config ["yaml_config_enabled" ]; ! exist {
167123 return errors .New ("failed to find mandatory `yaml_config_enabled` field inside config" )
168124 }
@@ -182,12 +138,12 @@ func validateDynconfig(dynConfig schema.Dynconfig) error {
182138 return nil
183139}
184140
185- func GetConfigForCMS (dynconfig schema.Dynconfig ) ([]byte , error ) {
186- delete (dynconfig .Config , "static_erasure" )
187- delete (dynconfig .Config , "host_configs" )
188- delete (dynconfig .Config , "nameservice_config" )
189- delete (dynconfig .Config , "blob_storage_config" )
190- delete (dynconfig .Config , "hosts" )
141+ func GetConfigForCMS (dynConfig schema.DynConfig ) ([]byte , error ) {
142+ delete (dynConfig .Config , "static_erasure" )
143+ delete (dynConfig .Config , "host_configs" )
144+ delete (dynConfig .Config , "nameservice_config" )
145+ delete (dynConfig .Config , "blob_storage_config" )
146+ delete (dynConfig .Config , "hosts" )
191147
192- return yaml .Marshal (dynconfig )
148+ return yaml .Marshal (dynConfig )
193149}
0 commit comments