/
extra.go
41 lines (32 loc) · 1.1 KB
/
extra.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package config
import (
"encoding/json"
"github.com/imdario/mergo"
"gopkg.in/yaml.v3"
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
)
// MergeExtraConfigWithConfig overlays configuration from overridesJSON onto templateResults.
func MergeExtraConfigWithConfig(overridesJSON apiextensionsv1.JSON, templateResults []byte) ([]byte, error) {
// mergo.Merge requires that both variables have the same type
renderedTemplateMap := make(map[string]interface{})
overrides := make(map[string]interface{})
if len(overridesJSON.Raw) == 0 {
return templateResults, nil
}
// Unmarshal overlay of type []byte to map[string]interface{}
if err := json.Unmarshal(overridesJSON.Raw, &overrides); err != nil {
return nil, err
}
if err := yaml.Unmarshal(templateResults, &renderedTemplateMap); err != nil {
return nil, err
}
// Override generated config with extra config
if err := mergo.Merge(&renderedTemplateMap, overrides, mergo.WithOverride); err != nil {
return nil, err
}
data, err := yaml.Marshal(renderedTemplateMap)
if err != nil {
return nil, err
}
return data, nil
}