Skip to content

Commit 15bff8c

Browse files
authored
Light refactorings to parse_yaml.go (#227)
1 parent 64a1f66 commit 15bff8c

File tree

2 files changed

+22
-65
lines changed

2 files changed

+22
-65
lines changed

pkg/lintcontext/create_contexts.go

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,7 @@ func CreateContextsWithOptions(options Options, filesOrDirs ...string) ([]LintCo
6262
if !info.IsDir() {
6363
if strings.HasSuffix(strings.ToLower(currentPath), ".tgz") {
6464
ctx := newCtx(options)
65-
if err := ctx.loadObjectsFromTgzHelmChart(currentPath); err != nil {
66-
return err
67-
}
68-
65+
ctx.loadObjectsFromTgzHelmChart(currentPath)
6966
contextsByDir[currentPath] = ctx
7067
return nil
7168
}
@@ -91,9 +88,7 @@ func CreateContextsWithOptions(options Options, filesOrDirs ...string) ([]LintCo
9188
}
9289
ctx := newCtx(options)
9390
contextsByDir[currentPath] = ctx
94-
if err := ctx.loadObjectsFromHelmChart(currentPath); err != nil {
95-
return err
96-
}
91+
ctx.loadObjectsFromHelmChart(currentPath)
9792
return filepath.SkipDir
9893
}
9994
return nil

pkg/lintcontext/parse_yaml.go

Lines changed: 20 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -119,78 +119,37 @@ func (l *lintContextImpl) renderValues(chrt *chart.Chart, values map[string]inte
119119
return rendered, nil
120120
}
121121

122-
func (l *lintContextImpl) loadObjectsFromHelmChart(dir string) error {
123-
metadata := ObjectMetadata{FilePath: dir}
122+
func (l *lintContextImpl) loadObjectsFromHelmChart(dir string) {
124123
renderedFiles, err := l.renderHelmChart(dir)
125124
if err != nil {
126-
l.addInvalidObjects(InvalidObject{Metadata: metadata, LoadErr: err})
127-
return nil
125+
l.addInvalidObjects(InvalidObject{Metadata: ObjectMetadata{FilePath: dir}, LoadErr: err})
126+
return
128127
}
129128
// Paths returned by helm include redundant directory in front, therefore we strip it out.
130-
for path, contents := range normalizeDirectoryPaths(renderedFiles) {
131-
pathToTemplate := filepath.Join(dir, path)
132-
133-
// Skip NOTES.txt file that may be present among templates but is not a kubernetes resource.
134-
if strings.HasSuffix(pathToTemplate, string(filepath.Separator)+chartutil.NotesName) {
135-
continue
136-
}
137-
138-
if err := l.loadObjectsFromReader(pathToTemplate, strings.NewReader(contents)); err != nil {
139-
loadErr := errors.Wrapf(err, "loading object %s from rendered helm chart %s", pathToTemplate, dir)
140-
l.addInvalidObjects(InvalidObject{Metadata: ObjectMetadata{FilePath: pathToTemplate}, LoadErr: loadErr})
141-
}
142-
}
143-
return nil
129+
l.loadHelmRenderedTemplates(dir, normalizeDirectoryPaths(renderedFiles))
144130
}
145131

146-
func (l *lintContextImpl) loadObjectsFromTgzHelmChart(tgzFile string) error {
147-
metadata := ObjectMetadata{FilePath: tgzFile}
132+
func (l *lintContextImpl) loadObjectsFromTgzHelmChart(tgzFile string) {
148133
renderedFiles, err := l.renderTgzHelmChart(tgzFile)
149134
if err != nil {
150-
l.invalidObjects = append(l.invalidObjects, InvalidObject{Metadata: metadata, LoadErr: err})
151-
return nil
152-
}
153-
for path, contents := range renderedFiles {
154-
pathToTemplate := filepath.Join(tgzFile, path)
155-
156-
// Skip NOTES.txt file that may be present among templates but is not a kubernetes resource.
157-
if strings.HasSuffix(pathToTemplate, string(filepath.Separator)+chartutil.NotesName) {
158-
continue
159-
}
160-
161-
if err := l.loadObjectsFromReader(pathToTemplate, strings.NewReader(contents)); err != nil {
162-
loadErr := errors.Wrapf(err, "loading object %s from rendered helm chart %s", pathToTemplate, tgzFile)
163-
l.addInvalidObjects(InvalidObject{Metadata: ObjectMetadata{FilePath: pathToTemplate}, LoadErr: loadErr})
164-
}
135+
l.addInvalidObjects(InvalidObject{Metadata: ObjectMetadata{FilePath: tgzFile}, LoadErr: err})
136+
return
165137
}
166-
return nil
138+
l.loadHelmRenderedTemplates(tgzFile, renderedFiles)
167139
}
168140

169141
func (l *lintContextImpl) renderTgzHelmChart(tgzFile string) (map[string]string, error) {
170142
log.SetOutput(nopWriter{})
171143
defer log.SetOutput(os.Stderr)
172-
chrt, err := loader.LoadFile(tgzFile)
173144

145+
chrt, err := loader.LoadFile(tgzFile)
174146
if err != nil {
175147
return nil, err
176148
}
177-
if err := chrt.Validate(); err != nil {
178-
return nil, err
179-
}
180149

181150
return l.renderChart(tgzFile, chrt)
182151
}
183152

184-
func (l *lintContextImpl) parseValues(filePath string, bytes []byte) (map[string]interface{}, error) {
185-
currentMap := map[string]interface{}{}
186-
187-
if err := y.Unmarshal(bytes, &currentMap); err != nil {
188-
return nil, errors.Wrapf(err, "failed to parse %s", filePath)
189-
}
190-
191-
return currentMap, nil
192-
}
193-
194153
func (l *lintContextImpl) loadObjectFromYAMLReader(filePath string, r *yaml.YAMLReader) error {
195154
doc, err := r.Read()
196155
if err != nil {
@@ -268,9 +227,9 @@ func (l *lintContextImpl) renderChart(fileName string, chart *chart.Chart) (map[
268227
return nil, errors.Errorf("%s not found", indexName)
269228
}
270229

271-
values, err := l.parseValues(indexName, chart.Raw[valuesIndex].Data)
272-
if err != nil {
273-
return nil, errors.Wrap(err, "loading values.yaml file")
230+
values := map[string]interface{}{}
231+
if err := y.Unmarshal(chart.Raw[valuesIndex].Data, &values); err != nil {
232+
return nil, errors.Wrapf(err, "failed to parse values file %s", indexName)
274233
}
275234

276235
return l.renderValues(chart, values)
@@ -280,8 +239,8 @@ func (l *lintContextImpl) renderTgzHelmChartReader(fileName string, tgzReader io
280239
// Helm doesn't have great logging behaviour, and can spam stderr, so silence their logging.
281240
log.SetOutput(nopWriter{})
282241
defer log.SetOutput(os.Stderr)
283-
chrt, err := loader.LoadArchive(tgzReader)
284242

243+
chrt, err := loader.LoadArchive(tgzReader)
285244
if err != nil {
286245
return nil, err
287246
}
@@ -290,22 +249,25 @@ func (l *lintContextImpl) renderTgzHelmChartReader(fileName string, tgzReader io
290249
}
291250

292251
func (l *lintContextImpl) readObjectsFromTgzHelmChart(fileName string, tgzReader io.Reader) {
293-
metadata := ObjectMetadata{FilePath: fileName}
294252
renderedFiles, err := l.renderTgzHelmChartReader(fileName, tgzReader)
295253
if err != nil {
296-
l.invalidObjects = append(l.invalidObjects, InvalidObject{Metadata: metadata, LoadErr: err})
254+
l.addInvalidObjects(InvalidObject{Metadata: ObjectMetadata{FilePath: fileName}, LoadErr: err})
297255
return
298256
}
257+
l.loadHelmRenderedTemplates(fileName, renderedFiles)
258+
}
259+
260+
func (l *lintContextImpl) loadHelmRenderedTemplates(chartPath string, renderedFiles map[string]string) {
299261
for path, contents := range renderedFiles {
300-
pathToTemplate := filepath.Join(fileName, path)
262+
pathToTemplate := filepath.Join(chartPath, path)
301263

302264
// Skip NOTES.txt file that may be present among templates but is not a kubernetes resource.
303265
if strings.HasSuffix(pathToTemplate, string(filepath.Separator)+chartutil.NotesName) {
304266
continue
305267
}
306268

307269
if err := l.loadObjectsFromReader(pathToTemplate, strings.NewReader(contents)); err != nil {
308-
loadErr := errors.Wrapf(err, "loading object %s from rendered helm chart %s", pathToTemplate, fileName)
270+
loadErr := errors.Wrapf(err, "loading object %s from rendered helm chart %s", pathToTemplate, chartPath)
309271
l.addInvalidObjects(InvalidObject{Metadata: ObjectMetadata{FilePath: pathToTemplate}, LoadErr: loadErr})
310272
}
311273
}

0 commit comments

Comments
 (0)