@@ -2,6 +2,7 @@ package v1alpha1
22
33import (
44 "bytes"
5+ "errors"
56 "fmt"
67 "strconv"
78
@@ -60,19 +61,22 @@ func BuildConfiguration(cr *Storage, crDB *Database) ([]byte, error) {
6061 rawYamlConfiguration = cr .Spec .Configuration
6162 }
6263
63- dynconfig , err := ParseDynconfig (rawYamlConfiguration )
64- if err == nil {
65- if dynconfig .Config ["hosts" ] == nil {
64+ success , dynConfig , err := ParseDynConfig (rawYamlConfiguration )
65+ if success {
66+ if err != nil {
67+ return nil , fmt .Errorf ("failed to parse dynconfig, error: %w" , err )
68+ }
69+ if dynConfig .Config ["hosts" ] == nil {
6670 hosts := generateHosts (cr )
67- dynconfig .Config ["hosts" ] = hosts
71+ dynConfig .Config ["hosts" ] = hosts
6872 }
6973
70- return yaml .Marshal (dynconfig )
74+ return yaml .Marshal (dynConfig )
7175 }
7276
7377 err = yaml .Unmarshal ([]byte (rawYamlConfiguration ), & config )
7478 if err != nil {
75- return nil , err
79+ return nil , fmt . Errorf ( "failed to serialize YAML config, error: %w" , err )
7680 }
7781
7882 if config ["hosts" ] == nil {
@@ -84,28 +88,62 @@ func BuildConfiguration(cr *Storage, crDB *Database) ([]byte, error) {
8488}
8589
8690func ParseConfiguration (rawYamlConfiguration string ) (schema.Configuration , error ) {
87- configuration := schema.Configuration {}
88-
89- dynconfig , err := ParseDynconfig (rawYamlConfiguration )
90- if err == nil {
91- config , err := yaml .Marshal (dynconfig .Config )
92- if err != nil {
93- return configuration , err
94- }
95- rawYamlConfiguration = string (config )
96- }
97-
9891 dec := yaml .NewDecoder (bytes .NewReader ([]byte (rawYamlConfiguration )))
9992 dec .KnownFields (false )
100- err = dec .Decode (& configuration )
10193
102- return configuration , err
94+ var configuration schema.Configuration
95+ err := dec .Decode (& configuration )
96+ if err != nil {
97+ return schema.Configuration {}, nil
98+ }
99+
100+ return configuration , nil
103101}
104102
105- func ParseDynconfig (rawYamlConfiguration string ) (schema.Dynconfig , error ) {
106- dynconfig := schema.Dynconfig {}
103+ func ParseDynConfig (rawYamlConfiguration string ) (bool , schema.DynConfig , error ) {
107104 dec := yaml .NewDecoder (bytes .NewReader ([]byte (rawYamlConfiguration )))
108105 dec .KnownFields (true )
109- err := dec .Decode (& dynconfig )
110- return dynconfig , err
106+
107+ var dynConfig schema.DynConfig
108+ err := dec .Decode (& dynConfig )
109+ if err != nil {
110+ return false , schema.DynConfig {}, fmt .Errorf ("error unmarshal yaml to dynconfig: %w" , err )
111+ }
112+
113+ err = validateDynConfig (dynConfig )
114+ if err != nil {
115+ return true , dynConfig , fmt .Errorf ("error validate dynconfig: %w" , err )
116+ }
117+
118+ return true , dynConfig , err
119+ }
120+
121+ func validateDynConfig (dynConfig schema.DynConfig ) error {
122+ if _ , exist := dynConfig .Config ["yaml_config_enabled" ]; ! exist {
123+ return errors .New ("failed to find mandatory `yaml_config_enabled` field inside config" )
124+ }
125+
126+ if _ , exist := dynConfig .Config ["static_erasure" ]; ! exist {
127+ return errors .New ("failed to find mandatory `static_erasure` field inside config" )
128+ }
129+
130+ if _ , exist := dynConfig .Config ["host_configs" ]; ! exist {
131+ return errors .New ("failed to find mandatory `host_configs` field inside config" )
132+ }
133+
134+ if _ , exist := dynConfig .Config ["blob_storage_config" ]; ! exist {
135+ return errors .New ("failed to find mandatory `blob_storage_config` field inside config" )
136+ }
137+
138+ return nil
139+ }
140+
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" )
147+
148+ return yaml .Marshal (dynConfig )
111149}
0 commit comments