@@ -119,78 +119,37 @@ func (l *lintContextImpl) renderValues(chrt *chart.Chart, values map[string]inte
119
119
return rendered , nil
120
120
}
121
121
122
- func (l * lintContextImpl ) loadObjectsFromHelmChart (dir string ) error {
123
- metadata := ObjectMetadata {FilePath : dir }
122
+ func (l * lintContextImpl ) loadObjectsFromHelmChart (dir string ) {
124
123
renderedFiles , err := l .renderHelmChart (dir )
125
124
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
128
127
}
129
128
// 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 ))
144
130
}
145
131
146
- func (l * lintContextImpl ) loadObjectsFromTgzHelmChart (tgzFile string ) error {
147
- metadata := ObjectMetadata {FilePath : tgzFile }
132
+ func (l * lintContextImpl ) loadObjectsFromTgzHelmChart (tgzFile string ) {
148
133
renderedFiles , err := l .renderTgzHelmChart (tgzFile )
149
134
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
165
137
}
166
- return nil
138
+ l . loadHelmRenderedTemplates ( tgzFile , renderedFiles )
167
139
}
168
140
169
141
func (l * lintContextImpl ) renderTgzHelmChart (tgzFile string ) (map [string ]string , error ) {
170
142
log .SetOutput (nopWriter {})
171
143
defer log .SetOutput (os .Stderr )
172
- chrt , err := loader .LoadFile (tgzFile )
173
144
145
+ chrt , err := loader .LoadFile (tgzFile )
174
146
if err != nil {
175
147
return nil , err
176
148
}
177
- if err := chrt .Validate (); err != nil {
178
- return nil , err
179
- }
180
149
181
150
return l .renderChart (tgzFile , chrt )
182
151
}
183
152
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
-
194
153
func (l * lintContextImpl ) loadObjectFromYAMLReader (filePath string , r * yaml.YAMLReader ) error {
195
154
doc , err := r .Read ()
196
155
if err != nil {
@@ -268,9 +227,9 @@ func (l *lintContextImpl) renderChart(fileName string, chart *chart.Chart) (map[
268
227
return nil , errors .Errorf ("%s not found" , indexName )
269
228
}
270
229
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 )
274
233
}
275
234
276
235
return l .renderValues (chart , values )
@@ -280,8 +239,8 @@ func (l *lintContextImpl) renderTgzHelmChartReader(fileName string, tgzReader io
280
239
// Helm doesn't have great logging behaviour, and can spam stderr, so silence their logging.
281
240
log .SetOutput (nopWriter {})
282
241
defer log .SetOutput (os .Stderr )
283
- chrt , err := loader .LoadArchive (tgzReader )
284
242
243
+ chrt , err := loader .LoadArchive (tgzReader )
285
244
if err != nil {
286
245
return nil , err
287
246
}
@@ -290,22 +249,25 @@ func (l *lintContextImpl) renderTgzHelmChartReader(fileName string, tgzReader io
290
249
}
291
250
292
251
func (l * lintContextImpl ) readObjectsFromTgzHelmChart (fileName string , tgzReader io.Reader ) {
293
- metadata := ObjectMetadata {FilePath : fileName }
294
252
renderedFiles , err := l .renderTgzHelmChartReader (fileName , tgzReader )
295
253
if err != nil {
296
- l .invalidObjects = append ( l . invalidObjects , InvalidObject {Metadata : metadata , LoadErr : err })
254
+ l .addInvalidObjects ( InvalidObject {Metadata : ObjectMetadata { FilePath : fileName } , LoadErr : err })
297
255
return
298
256
}
257
+ l .loadHelmRenderedTemplates (fileName , renderedFiles )
258
+ }
259
+
260
+ func (l * lintContextImpl ) loadHelmRenderedTemplates (chartPath string , renderedFiles map [string ]string ) {
299
261
for path , contents := range renderedFiles {
300
- pathToTemplate := filepath .Join (fileName , path )
262
+ pathToTemplate := filepath .Join (chartPath , path )
301
263
302
264
// Skip NOTES.txt file that may be present among templates but is not a kubernetes resource.
303
265
if strings .HasSuffix (pathToTemplate , string (filepath .Separator )+ chartutil .NotesName ) {
304
266
continue
305
267
}
306
268
307
269
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 )
309
271
l .addInvalidObjects (InvalidObject {Metadata : ObjectMetadata {FilePath : pathToTemplate }, LoadErr : loadErr })
310
272
}
311
273
}
0 commit comments