Skip to content

Commit 228eb0e

Browse files
committed
refactoring
1 parent 2493093 commit 228eb0e

File tree

4 files changed

+49
-25
lines changed

4 files changed

+49
-25
lines changed

pkg/manifests/helm.go

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -146,14 +146,14 @@ func NewHelmGenerator(name string, fsys fs.FS, chartPath string, client client.C
146146
// because the 'Template' builtin needs that to work properly
147147
if t == nil {
148148
t = template.New(manifest)
149+
t.Option("missingkey=zero").
150+
Funcs(sprig.TxtFuncMap()).
151+
Funcs(templatex.FuncMap()).
152+
Funcs(templatex.FuncMapForTemplate(t)).
153+
Funcs(templatex.FuncMapForClient(client))
149154
} else {
150155
t = t.New(manifest)
151156
}
152-
t.Option("missingkey=zero").
153-
Funcs(sprig.TxtFuncMap()).
154-
Funcs(templatex.FuncMap()).
155-
Funcs(templatex.FuncMapForTemplate(t)).
156-
Funcs(templatex.FuncMapForClient(client))
157157
if _, err := t.Parse(string(raw)); err != nil {
158158
return nil, err
159159
}
@@ -167,11 +167,6 @@ func NewHelmGenerator(name string, fsys fs.FS, chartPath string, client client.C
167167
// Note: we use absolute paths (instead of relative ones) as template names
168168
// because the 'Template' builtin needs that to work properly
169169
t = t.New(include)
170-
t.Option("missingkey=zero").
171-
Funcs(sprig.TxtFuncMap()).
172-
Funcs(templatex.FuncMap()).
173-
Funcs(templatex.FuncMapForTemplate(t)).
174-
Funcs(templatex.FuncMapForClient(client))
175170
if _, err := t.Parse(string(raw)); err != nil {
176171
return nil, err
177172
}
@@ -180,7 +175,7 @@ func NewHelmGenerator(name string, fsys fs.FS, chartPath string, client client.C
180175
return &g, nil
181176
}
182177

183-
// Create a new HelmGenerator as TransformableGenerator
178+
// Create a new HelmGenerator as TransformableGenerator.
184179
func NewTransformableHelmGenerator(name string, fsys fs.FS, chartPath string, client client.Client, discoveryClient discovery.DiscoveryInterface) (TransformableGenerator, error) {
185180
g, err := NewHelmGenerator(name, fsys, chartPath, client, discoveryClient)
186181
if err != nil {
@@ -257,6 +252,14 @@ func (g *HelmGenerator) Generate(namespace string, name string, parameters types
257252
}
258253
}
259254

255+
var t0 *template.Template
256+
if len(g.templates) > 0 {
257+
t0, err = g.templates[0].Clone()
258+
if err != nil {
259+
return nil, err
260+
}
261+
t0.Option("missingkey=zero")
262+
}
260263
for _, t := range g.templates {
261264
data["Template"] = &helm.TemplateData{
262265
Name: t.Name(),
@@ -272,7 +275,7 @@ func (g *HelmGenerator) Generate(namespace string, name string, parameters types
272275
}(t.Name()),
273276
}
274277
var buf bytes.Buffer
275-
if err := t.Execute(&buf, data); err != nil {
278+
if err := t0.ExecuteTemplate(&buf, t.Name(), data); err != nil {
276279
return nil, err
277280
}
278281
decoder := utilyaml.NewYAMLToJSONDecoder(&buf)

pkg/manifests/kustomize.go

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -72,14 +72,15 @@ func NewKustomizeGenerator(fsys fs.FS, kustomizationPath string, templateSuffix
7272
}
7373
if t == nil {
7474
t = template.New(name)
75+
t.Option("missingkey=zero").
76+
Funcs(sprig.TxtFuncMap()).
77+
Funcs(templatex.FuncMap()).
78+
Funcs(templatex.FuncMapForTemplate(t)).
79+
Funcs(templatex.FuncMapForClient(client)).
80+
Funcs(funcMapForGenerateContext("", ""))
7581
} else {
7682
t = t.New(name)
7783
}
78-
t.Option("missingkey=zero").
79-
Funcs(sprig.TxtFuncMap()).
80-
Funcs(templatex.FuncMap()).
81-
Funcs(templatex.FuncMapForTemplate(t)).
82-
Funcs(templatex.FuncMapForClient(client))
8384
if _, err := t.Parse(string(raw)); err != nil {
8485
return nil, err
8586
}
@@ -89,7 +90,7 @@ func NewKustomizeGenerator(fsys fs.FS, kustomizationPath string, templateSuffix
8990
return &g, nil
9091
}
9192

92-
// Create a new KustomizeGenerator as TransformableGenerator
93+
// Create a new KustomizeGenerator as TransformableGenerator.
9394
func NewTransformableKustomizeGenerator(fsys fs.FS, kustomizationPath string, templateSuffix string, client client.Client) (TransformableGenerator, error) {
9495
g, err := NewKustomizeGenerator(fsys, kustomizationPath, templateSuffix, client)
9596
if err != nil {
@@ -123,9 +124,19 @@ func (g *KustomizeGenerator) Generate(namespace string, name string, parameters
123124
data := parameters.ToUnstructured()
124125
fsys := kustfsys.MakeFsInMemory()
125126

127+
var t0 *template.Template
128+
var err error
129+
if len(g.templates) > 0 {
130+
t0, err = g.templates[0].Clone()
131+
if err != nil {
132+
return nil, err
133+
}
134+
t0.Option("missingkey=zero").
135+
Funcs(funcMapForGenerateContext(namespace, name))
136+
}
126137
for _, t := range g.templates {
127138
var buf bytes.Buffer
128-
if err := t.Execute(&buf, data); err != nil {
139+
if err := t0.ExecuteTemplate(&buf, t.Name(), data); err != nil {
129140
return nil, err
130141
}
131142
if err := fsys.WriteFile(t.Name(), buf.Bytes()); err != nil {
@@ -160,3 +171,10 @@ func (g *KustomizeGenerator) Generate(namespace string, name string, parameters
160171

161172
return objects, nil
162173
}
174+
175+
func funcMapForGenerateContext(namespace string, name string) template.FuncMap {
176+
return template.FuncMap{
177+
"namespace": func() string { return namespace },
178+
"name": func() string { return name },
179+
}
180+
}

pkg/manifests/types.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,8 @@ import (
1212
)
1313

1414
// Resource generator interface.
15-
// When called from the reconciler, namespace and name will match the respective values in the
16-
// reconciled Component's spec, and parameters will be a pointer to the whole Component spec.
17-
// Therefore, implementations which are directly called from the reconciler,
18-
// can safely cast parameters back to their concrete spec struct.
15+
// When called from the reconciler, the arguments namespace, name and parameters will match the return values
16+
// of the component's GetDeploymentNamespace(), GetDeploymentName() and GetSpec() methods, respectively.
1917
type Generator interface {
2018
Generate(namespace string, name string, parameters types.Unstructurable) ([]client.Object, error)
2119
}

pkg/manifests/util.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"fmt"
1111
"io/fs"
1212
"path"
13+
"path/filepath"
1314
"strings"
1415

1516
"k8s.io/apimachinery/pkg/runtime"
@@ -84,6 +85,9 @@ func fileTypeFromMode(mode fs.FileMode) uint {
8485
}
8586

8687
func find(fsys fs.FS, dir string, namePattern string, fileType uint, maxDepth uint) ([]string, error) {
88+
if dir == "" {
89+
dir = "."
90+
}
8791
if strings.Contains(namePattern, "/") {
8892
return nil, fmt.Errorf("invalid name pattern; must not contain slashes")
8993
}
@@ -113,15 +117,16 @@ func find(fsys fs.FS, dir string, namePattern string, fileType uint, maxDepth ui
113117
for _, entry := range entries {
114118
entryName := entry.Name()
115119
entryType := entry.Type()
120+
entryPath := filepath.Clean(dir + "/" + entryName)
116121
match, err := path.Match(namePattern, entryName)
117122
if err != nil {
118123
return nil, err
119124
}
120125
if match && (fileTypeFromMode(entryType)&fileType != 0) {
121-
result = append(result, dir+"/"+entryName)
126+
result = append(result, entryPath)
122127
}
123128
if entry.IsDir() && maxDepth > 1 {
124-
entryResult, err := find(fsys, dir+"/"+entryName, namePattern, fileType, maxDepth-1)
129+
entryResult, err := find(fsys, entryPath, namePattern, fileType, maxDepth-1)
125130
if err != nil {
126131
return nil, err
127132
}

0 commit comments

Comments
 (0)