Skip to content

Commit 1c603dc

Browse files
authored
Merge pull request #115 from fluxcd/helmchart-update-fix
Change chart reconciliation and readiness logic
2 parents 6e61963 + 236e78d commit 1c603dc

File tree

1 file changed

+17
-25
lines changed

1 file changed

+17
-25
lines changed

controllers/helmrelease_controller.go

Lines changed: 17 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ func (r *HelmReleaseReconciler) reconcile(ctx context.Context, log logr.Logger,
172172
return v2.HelmReleaseNotReady(hr, meta.SuspendedReason, msg), ctrl.Result{}, nil
173173
}
174174

175-
// record reconciliation duration
175+
// Record reconciliation duration
176176
if r.MetricsRecorder != nil {
177177
objRef, err := reference.GetReference(r.Scheme, &hr)
178178
if err != nil {
@@ -182,25 +182,19 @@ func (r *HelmReleaseReconciler) reconcile(ctx context.Context, log logr.Logger,
182182
}
183183

184184
// Reconcile chart based on the HelmChartTemplate
185-
hc, ok, reconcileErr := r.reconcileChart(ctx, &hr)
186-
if !ok {
187-
var msg string
188-
if reconcileErr != nil {
189-
msg = fmt.Sprintf("chart reconciliation failed: %s", reconcileErr.Error())
190-
r.event(hr, hr.Status.LastAttemptedRevision, events.EventSeverityError, msg)
191-
} else {
192-
msg = "HelmChart is not ready"
193-
r.event(hr, hr.Status.LastAttemptedRevision, events.EventSeverityInfo, msg)
194-
}
195-
return v2.HelmReleaseNotReady(hr, v2.ArtifactFailedReason, msg), ctrl.Result{}, reconcileErr
185+
hc, reconcileErr := r.reconcileChart(ctx, &hr)
186+
if reconcileErr != nil {
187+
msg := fmt.Sprintf("chart reconciliation failed: %s", reconcileErr.Error())
188+
r.event(hr, hr.Status.LastAttemptedRevision, events.EventSeverityError, msg)
189+
return v2.HelmReleaseNotReady(hr, v2.ArtifactFailedReason, msg), ctrl.Result{Requeue: true}, reconcileErr
196190
}
197191

198-
// Check chart artifact readiness
199-
if hc.GetArtifact() == nil {
200-
msg := "HelmChart is not ready"
192+
// Check chart readiness
193+
if hc.Generation != hc.Status.ObservedGeneration || !meta.HasReadyCondition(hc.Status.Conditions) {
194+
msg := fmt.Sprintf("HelmChart '%s/%s' is not ready", hc.GetNamespace(), hc.GetName())
201195
r.event(hr, hr.Status.LastAttemptedRevision, events.EventSeverityInfo, msg)
202196
log.Info(msg)
203-
return v2.HelmReleaseNotReady(hr, v2.ArtifactFailedReason, msg), ctrl.Result{}, nil
197+
return v2.HelmReleaseNotReady(hr, v2.ArtifactFailedReason, msg), ctrl.Result{Requeue: true}, nil
204198
}
205199

206200
// Check dependencies
@@ -256,7 +250,7 @@ func (r *HelmReleaseReconciler) SetupWithManager(mgr ctrl.Manager, opts HelmRele
256250
Complete(r)
257251
}
258252

259-
func (r *HelmReleaseReconciler) reconcileChart(ctx context.Context, hr *v2.HelmRelease) (*sourcev1.HelmChart, bool, error) {
253+
func (r *HelmReleaseReconciler) reconcileChart(ctx context.Context, hr *v2.HelmRelease) (*sourcev1.HelmChart, error) {
260254
chartName := types.NamespacedName{
261255
Namespace: hr.Spec.Chart.GetNamespace(hr.Namespace),
262256
Name: hr.GetHelmChartName(),
@@ -265,35 +259,33 @@ func (r *HelmReleaseReconciler) reconcileChart(ctx context.Context, hr *v2.HelmR
265259
// Garbage collect the previous HelmChart if the namespace named changed.
266260
if hr.Status.HelmChart != "" && hr.Status.HelmChart != chartName.String() {
267261
if err := r.garbageCollectHelmChart(ctx, *hr); err != nil {
268-
return nil, false, err
262+
return nil, err
269263
}
270264
}
271265

272266
// Continue with the reconciliation of the current template.
273267
var helmChart sourcev1.HelmChart
274268
err := r.Client.Get(ctx, chartName, &helmChart)
275269
if err != nil && !apierrors.IsNotFound(err) {
276-
return nil, false, err
270+
return nil, err
277271
}
278272
hc := helmChartFromTemplate(*hr)
279273
switch {
280274
case apierrors.IsNotFound(err):
281275
if err = r.Client.Create(ctx, hc); err != nil {
282-
return nil, false, err
276+
return nil, err
283277
}
284278
hr.Status.HelmChart = chartName.String()
285-
return nil, false, nil
279+
return hc, nil
286280
case helmChartRequiresUpdate(*hr, helmChart):
287281
r.Log.Info("chart diverged from template", strings.ToLower(sourcev1.HelmChartKind), chartName.String())
288282
helmChart.Spec = hc.Spec
289283
if err = r.Client.Update(ctx, &helmChart); err != nil {
290-
return nil, false, err
284+
return nil, err
291285
}
292286
hr.Status.HelmChart = chartName.String()
293-
return nil, false, nil
294287
}
295-
296-
return &helmChart, true, nil
288+
return &helmChart, nil
297289
}
298290

299291
func (r *HelmReleaseReconciler) reconcileRelease(ctx context.Context, log logr.Logger,

0 commit comments

Comments
 (0)