-
Notifications
You must be signed in to change notification settings - Fork 46
/
template.go
121 lines (98 loc) · 2.95 KB
/
template.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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package template
import (
json "github.com/json-iterator/go"
helmchart "helm.sh/helm/v3/pkg/chart"
"helm.sh/helm/v3/pkg/registry"
"github.com/cyclops-ui/cyclops/cyclops-ctrl/internal/auth"
"github.com/cyclops-ui/cyclops/cyclops-ctrl/internal/models"
)
type Repo struct {
credResolver auth.TemplatesResolver
cache templateCache
}
type templateCache interface {
GetTemplate(repo, path, version string) (*models.Template, bool)
SetTemplate(repo, path, version string, template *models.Template)
GetTemplateInitialValues(repo, path, version string) (map[interface{}]interface{}, bool)
SetTemplateInitialValues(repo, path, version string, values map[interface{}]interface{})
}
func NewRepo(credResolver auth.TemplatesResolver, tc templateCache) *Repo {
return &Repo{
credResolver: credResolver,
cache: tc,
}
}
func (r Repo) GetTemplate(repo, path, version string) (*models.Template, error) {
// region load OCI chart
if registry.IsOCI(repo) {
return r.LoadOCIHelmChart(repo, path, version)
}
// endregion
// region load from Helm repo
isHelmRepo, err := IsHelmRepo(repo)
if err != nil {
return nil, err
}
if isHelmRepo {
return r.LoadHelmChart(repo, path, version)
}
// endregion
// fallback to cloning from git
return r.LoadTemplate(repo, path, version)
}
func (r Repo) GetTemplateInitialValues(repo, path, version string) ([]byte, error) {
// region load OCI chart
if registry.IsOCI(repo) {
initial, err := r.LoadOCIHelmChartInitialValues(repo, path, version)
if err != nil {
return nil, err
}
return json.Marshal(initial)
}
// endregion
// region load from Helm repo
isHelmRepo, err := IsHelmRepo(repo)
if err != nil {
return nil, err
}
if isHelmRepo {
initial, err := r.LoadHelmChartInitialValues(repo, path, version)
if err != nil {
return nil, err
}
return json.Marshal(initial)
}
// endregion
// fallback to cloning from git
initial, err := r.LoadInitialTemplateValues(repo, path, version)
if err != nil {
return nil, err
}
return json.Marshal(initial)
}
func (r Repo) loadDependencies(metadata helmchart.Metadata) ([]*models.Template, error) {
deps := make([]*models.Template, 0)
for _, dependency := range metadata.Dependencies {
dep, err := r.GetTemplate(dependency.Repository, dependency.Name, dependency.Version)
if err != nil {
return nil, err
}
deps = append(deps, dep)
}
return deps, nil
}
func (r Repo) loadDependenciesInitialValues(metadata helmchart.Metadata) (map[interface{}]interface{}, error) {
initialValues := make(map[interface{}]interface{})
for _, dependency := range metadata.Dependencies {
depInitialValuesData, err := r.GetTemplateInitialValues(dependency.Repository, dependency.Name, dependency.Version)
if err != nil {
return nil, err
}
var depInitialValues interface{}
if err := json.Unmarshal(depInitialValuesData, &depInitialValues); err != nil {
panic(err)
}
initialValues[dependency.Name] = depInitialValues
}
return initialValues, nil
}