Merge pull request #1266 from fluxcd/fix-source-index
Fix watch index conflict between HelmChart and OCIRepository kinds
This commit is contained in:
commit
5a28a7610e
|
|
@ -127,13 +127,23 @@ func (r *HelmReleaseReconciler) SetupWithManager(ctx context.Context, mgr ctrl.M
|
|||
if err := mgr.GetFieldIndexer().IndexField(ctx, &v2.HelmRelease{}, v2.SourceIndexKey,
|
||||
func(o client.Object) []string {
|
||||
obj := o.(*v2.HelmRelease)
|
||||
namespacedName, err := getNamespacedName(obj)
|
||||
if err != nil {
|
||||
var kind, name, namespace string
|
||||
switch {
|
||||
case obj.HasChartRef() && !obj.HasChartTemplate():
|
||||
kind = obj.Spec.ChartRef.Kind
|
||||
name = obj.Spec.ChartRef.Name
|
||||
namespace = obj.Spec.ChartRef.Namespace
|
||||
if namespace == "" {
|
||||
namespace = obj.GetNamespace()
|
||||
}
|
||||
case !obj.HasChartRef() && obj.HasChartTemplate():
|
||||
kind = sourcev1.HelmChartKind
|
||||
name = obj.GetHelmChartName()
|
||||
namespace = obj.Spec.Chart.GetNamespace(obj.GetNamespace())
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
return []string{
|
||||
namespacedName.String(),
|
||||
}
|
||||
return []string{fmt.Sprintf("%s/%s/%s", kind, namespace, name)}
|
||||
},
|
||||
); err != nil {
|
||||
return err
|
||||
|
|
@ -193,7 +203,7 @@ func (r *HelmReleaseReconciler) SetupWithManager(ctx context.Context, mgr ctrl.M
|
|||
).
|
||||
Watches(
|
||||
&sourcev1.OCIRepository{},
|
||||
handler.EnqueueRequestsFromMapFunc(r.requestsForOCIRrepositoryChange),
|
||||
handler.EnqueueRequestsFromMapFunc(r.requestsForOCIRepositoryChange),
|
||||
builder.WithPredicates(intpredicates.SourceRevisionChangePredicate{}),
|
||||
).
|
||||
WatchesMetadata(
|
||||
|
|
@ -875,7 +885,7 @@ func (r *HelmReleaseReconciler) requestsForHelmChartChange(ctx context.Context,
|
|||
|
||||
var list v2.HelmReleaseList
|
||||
if err := r.List(ctx, &list, client.MatchingFields{
|
||||
v2.SourceIndexKey: client.ObjectKeyFromObject(hc).String(),
|
||||
v2.SourceIndexKey: sourcev1.HelmChartKind + "/" + client.ObjectKeyFromObject(hc).String(),
|
||||
}); err != nil {
|
||||
ctrl.LoggerFrom(ctx).Error(err, "failed to list HelmReleases for HelmChart change")
|
||||
return nil
|
||||
|
|
@ -893,7 +903,7 @@ func (r *HelmReleaseReconciler) requestsForHelmChartChange(ctx context.Context,
|
|||
return reqs
|
||||
}
|
||||
|
||||
func (r *HelmReleaseReconciler) requestsForOCIRrepositoryChange(ctx context.Context, o client.Object) []reconcile.Request {
|
||||
func (r *HelmReleaseReconciler) requestsForOCIRepositoryChange(ctx context.Context, o client.Object) []reconcile.Request {
|
||||
or, ok := o.(*sourcev1.OCIRepository)
|
||||
if !ok {
|
||||
err := fmt.Errorf("expected an OCIRepository, got %T", o)
|
||||
|
|
@ -907,7 +917,7 @@ func (r *HelmReleaseReconciler) requestsForOCIRrepositoryChange(ctx context.Cont
|
|||
|
||||
var list v2.HelmReleaseList
|
||||
if err := r.List(ctx, &list, client.MatchingFields{
|
||||
v2.SourceIndexKey: client.ObjectKeyFromObject(or).String(),
|
||||
v2.SourceIndexKey: sourcev1.OCIRepositoryKind + "/" + client.ObjectKeyFromObject(or).String(),
|
||||
}); err != nil {
|
||||
ctrl.LoggerFrom(ctx).Error(err, "failed to list HelmReleases for OCIRepository change")
|
||||
return nil
|
||||
|
|
@ -1003,25 +1013,6 @@ func isValidChartRef(obj *v2.HelmRelease) bool {
|
|||
(!obj.HasChartRef() && obj.HasChartTemplate())
|
||||
}
|
||||
|
||||
func getNamespacedName(obj *v2.HelmRelease) (types.NamespacedName, error) {
|
||||
namespacedName := types.NamespacedName{}
|
||||
switch {
|
||||
case obj.HasChartRef() && !obj.HasChartTemplate():
|
||||
namespacedName.Namespace = obj.Spec.ChartRef.Namespace
|
||||
if namespacedName.Namespace == "" {
|
||||
namespacedName.Namespace = obj.GetNamespace()
|
||||
}
|
||||
namespacedName.Name = obj.Spec.ChartRef.Name
|
||||
case !obj.HasChartRef() && obj.HasChartTemplate():
|
||||
namespacedName.Namespace = obj.Spec.Chart.GetNamespace(obj.GetNamespace())
|
||||
namespacedName.Name = obj.GetHelmChartName()
|
||||
default:
|
||||
return namespacedName, fmt.Errorf("one of chartRef or chart must be present")
|
||||
}
|
||||
|
||||
return namespacedName, nil
|
||||
}
|
||||
|
||||
func (r *HelmReleaseReconciler) mutateChartWithSourceRevision(chart *chart.Chart, source sourcev1.Source) (string, error) {
|
||||
// If the source is an OCIRepository, we can try to mutate the chart version
|
||||
// with the artifact revision. The revision is either a <tag>@<digest> or
|
||||
|
|
|
|||
Loading…
Reference in New Issue