crossplane-contrib / provider-helm

Crossplane Helm Provider
Apache License 2.0
102 stars 65 forks source link

Release Ready status should be aggregation of readines of object deployed within a release #214

Open pedjak opened 6 months ago

pedjak commented 6 months ago

What problem are you facing?

Ready status of a Helm release becomes equal to true as soon as Helm creates objects that are a part of the given release. However, this does not necessary means that the workload is really ready, because images need to be pulled from registries, pods scheduled and started, etc.

In a complex compositions, quite often deployment of another chart or objects depends on readiness of their dependencies. Semantically would make sense to mark a Helm release ready when the enclosed resources are really ready. Making the equivalence with being deployed is imprecise.

Even today, the initial readiness could be emulated by setting .spec.forProvider.wait to true. In that case, the provider is going to block and wait until Helm checks and returns back when all resources become ready.

Given that wait:true is blocking the reconcile loop, it has impact on other releases sitting in the queue and waiting to be reconciled. Also, once readiness is detected, we do not try to perform any future checks - a Helm release remains ready even if the workload crashes and does not recover at all.

How could Crossplane help solve your problem?

Helm release should become ready only when all deployed objects part of the release becomes ready. This check should be performed on every release reconciliation and ready condition should be updated accordingly.