15
15
package helm
16
16
17
17
import (
18
+ "bytes"
18
19
"fmt"
19
20
"io/ioutil"
20
21
"os"
@@ -116,7 +117,7 @@ func CreateChart(projectDir string, opts CreateChartOptions) (*scaffold.Resource
116
117
chartsDir := filepath .Join (projectDir , HelmChartsDir )
117
118
err := os .MkdirAll (chartsDir , 0755 )
118
119
if err != nil {
119
- return nil , nil , err
120
+ return nil , nil , fmt . Errorf ( "failed to create helm-charts directory: %s" , err )
120
121
}
121
122
122
123
var (
@@ -128,13 +129,29 @@ func CreateChart(projectDir string, opts CreateChartOptions) (*scaffold.Resource
128
129
// from Helm's default template. Otherwise, fetch it.
129
130
if len (opts .Chart ) == 0 {
130
131
r , c , err = scaffoldChart (chartsDir , opts .ResourceAPIVersion , opts .ResourceKind )
132
+ if err != nil {
133
+ return nil , nil , fmt .Errorf ("failed to scaffold default chart: %s" , err )
134
+ }
131
135
} else {
132
136
r , c , err = fetchChart (chartsDir , opts )
137
+ if err != nil {
138
+ return nil , nil , fmt .Errorf ("failed to fetch chart: %s" , err )
139
+ }
140
+ }
141
+
142
+ relChartPath := filepath .Join (HelmChartsDir , c .GetMetadata ().GetName ())
143
+ absChartPath := filepath .Join (projectDir , relChartPath )
144
+ if err := fetchChartDependencies (absChartPath ); err != nil {
145
+ return nil , nil , fmt .Errorf ("failed to fetch chart dependencies: %s" , err )
133
146
}
147
+
148
+ // Reload chart in case dependencies changed
149
+ c , err = chartutil .Load (absChartPath )
134
150
if err != nil {
135
- return nil , nil , err
151
+ return nil , nil , fmt . Errorf ( "failed to load chart: %s" , err )
136
152
}
137
- log .Infof ("Created %s/%s/" , HelmChartsDir , c .GetMetadata ().GetName ())
153
+
154
+ log .Infof ("Created %s" , relChartPath )
138
155
return r , c , nil
139
156
}
140
157
@@ -159,7 +176,7 @@ func scaffoldChart(destDir, apiVersion, kind string) (*scaffold.Resource, *chart
159
176
return nil , nil , err
160
177
}
161
178
162
- chart , err := chartutil .LoadDir (chartPath )
179
+ chart , err := chartutil .Load (chartPath )
163
180
if err != nil {
164
181
return nil , nil , err
165
182
}
@@ -198,17 +215,7 @@ func fetchChart(destDir string, opts CreateChartOptions) (*scaffold.Resource, *c
198
215
}
199
216
200
217
func createChartFromDisk (destDir , source string , isDir bool ) (* chart.Chart , error ) {
201
- var (
202
- chart * chart.Chart
203
- err error
204
- )
205
-
206
- // If source is a file or directory, attempt to load it
207
- if isDir {
208
- chart , err = chartutil .LoadDir (source )
209
- } else {
210
- chart , err = chartutil .LoadFile (source )
211
- }
218
+ chart , err := chartutil .Load (source )
212
219
if err != nil {
213
220
return nil , err
214
221
}
@@ -265,3 +272,24 @@ func createChartFromRemote(destDir string, opts CreateChartOptions) (*chart.Char
265
272
266
273
return createChartFromDisk (destDir , chartArchive , false )
267
274
}
275
+
276
+ func fetchChartDependencies (chartPath string ) error {
277
+ helmHome , ok := os .LookupEnv (environment .HomeEnvVar )
278
+ if ! ok {
279
+ helmHome = environment .DefaultHelmHome
280
+ }
281
+ getters := getter .All (environment.EnvSettings {})
282
+
283
+ out := & bytes.Buffer {}
284
+ man := & downloader.Manager {
285
+ Out : out ,
286
+ ChartPath : chartPath ,
287
+ HelmHome : helmpath .Home (helmHome ),
288
+ Getters : getters ,
289
+ }
290
+ if err := man .Build (); err != nil {
291
+ fmt .Println (out .String ())
292
+ return err
293
+ }
294
+ return nil
295
+ }
0 commit comments