@@ -160,15 +160,15 @@ func (h *LibClient) LastReleaseStatus(releaseName string) (string /*revision*/,
160
160
return strconv .FormatInt (int64 (lastRelease .Version ), 10 ), lastRelease .Info .Status .String (), nil
161
161
}
162
162
163
- func (h * LibClient ) UpgradeRelease (releaseName string , chartName string , valuesPaths []string , setValues []string , namespace string ) error {
164
- err := h .upgradeRelease (releaseName , chartName , valuesPaths , setValues , namespace )
163
+ func (h * LibClient ) UpgradeRelease (releaseName string , chartName string , valuesPaths []string , setValues []string , labels map [ string ] string , namespace string ) error {
164
+ err := h .upgradeRelease (releaseName , chartName , valuesPaths , setValues , labels , namespace )
165
165
if err != nil {
166
166
// helm validation can fail because FeatureGate was enabled for example
167
167
// handling this case we can reinitialize kubeClient and repeat one more time by backoff
168
168
if err := actionConfigInit (h .Logger ); err != nil {
169
169
return err
170
170
}
171
- return h .upgradeRelease (releaseName , chartName , valuesPaths , setValues , namespace )
171
+ return h .upgradeRelease (releaseName , chartName , valuesPaths , setValues , labels , namespace )
172
172
}
173
173
h .Logger .Debug ("helm release upgraded" , slog .String ("version" , releaseName ))
174
174
return nil
@@ -178,7 +178,7 @@ func (h *LibClient) hasLabelsToApply() bool {
178
178
return len (h .labels ) > 0
179
179
}
180
180
181
- func (h * LibClient ) upgradeRelease (releaseName string , chartName string , valuesPaths []string , setValues []string , namespace string ) error {
181
+ func (h * LibClient ) upgradeRelease (releaseName string , chartName string , valuesPaths []string , setValues []string , labels map [ string ] string , namespace string ) error {
182
182
upg := action .NewUpgrade (actionConfig )
183
183
if namespace != "" {
184
184
upg .Namespace = namespace
@@ -191,6 +191,7 @@ func (h *LibClient) upgradeRelease(releaseName string, chartName string, valuesP
191
191
upg .SkipCRDs = true
192
192
upg .MaxHistory = int (options .HistoryMax )
193
193
upg .Timeout = options .Timeout
194
+ upg .Labels = labels
194
195
195
196
chart , err := loader .Load (chartName )
196
197
if err != nil {
@@ -240,6 +241,7 @@ func (h *LibClient) upgradeRelease(releaseName string, chartName string, valuesP
240
241
instClient .Timeout = options .Timeout
241
242
instClient .ReleaseName = releaseName
242
243
instClient .UseReleaseName = true
244
+ instClient .Labels = labels
243
245
244
246
_ , err = instClient .Run (chart , resultValues )
245
247
return err
@@ -356,6 +358,30 @@ func (h *LibClient) GetReleaseValues(releaseName string) (utils.Values, error) {
356
358
return gv .Run (releaseName )
357
359
}
358
360
361
+ func (h * LibClient ) GetReleaseChecksum (releaseName string ) (string , error ) {
362
+ gv := action .NewGet (actionConfig )
363
+ rel , err := gv .Run (releaseName )
364
+ if err != nil {
365
+ return "" , fmt .Errorf ("helm get failed: %s" , err )
366
+ }
367
+ if checksum , ok := rel .Labels ["moduleChecksum" ]; ok {
368
+ return checksum , nil
369
+ }
370
+
371
+ // fallback to old behavior
372
+ releaseValues , err := h .GetReleaseValues (releaseName )
373
+ if err != nil {
374
+ return "" , fmt .Errorf ("helm get failed: %s" , err )
375
+ }
376
+ if recordedChecksum , hasKey := releaseValues ["_addonOperatorModuleChecksum" ]; hasKey {
377
+ if recordedChecksumStr , ok := recordedChecksum .(string ); ok {
378
+ return recordedChecksumStr , nil
379
+ }
380
+ }
381
+
382
+ return "" , fmt .Errorf ("moduleChecksum label not found in release %s" , releaseName )
383
+ }
384
+
359
385
func (h * LibClient ) DeleteRelease (releaseName string ) error {
360
386
h .Logger .Debug ("helm release: execute helm uninstall" , slog .String ("release" , releaseName ))
361
387
0 commit comments