diff --git a/api/v2beta1/helmrelease_types.go b/api/v2beta1/helmrelease_types.go index 9a6cbd608..24d0e1d0e 100644 --- a/api/v2beta1/helmrelease_types.go +++ b/api/v2beta1/helmrelease_types.go @@ -236,7 +236,7 @@ func (in HelmReleaseSpec) GetUninstall() Uninstall { type HelmChartTemplate struct { // ObjectMeta holds the template for metadata like labels and annotations. // +optional - ObjectMeta HelmChartTemplateObjectMeta `json:"metadata,omitempty"` + ObjectMeta *HelmChartTemplateObjectMeta `json:"metadata,omitempty"` // Spec holds the template for the v1beta2.HelmChartSpec for this HelmRelease. // +required diff --git a/api/v2beta1/zz_generated.deepcopy.go b/api/v2beta1/zz_generated.deepcopy.go index 314b34d3f..5fb7ee4db 100644 --- a/api/v2beta1/zz_generated.deepcopy.go +++ b/api/v2beta1/zz_generated.deepcopy.go @@ -47,7 +47,11 @@ func (in *CrossNamespaceObjectReference) DeepCopy() *CrossNamespaceObjectReferen // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *HelmChartTemplate) DeepCopyInto(out *HelmChartTemplate) { *out = *in - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + if in.ObjectMeta != nil { + in, out := &in.ObjectMeta, &out.ObjectMeta + *out = new(HelmChartTemplateObjectMeta) + (*in).DeepCopyInto(*out) + } in.Spec.DeepCopyInto(&out.Spec) } diff --git a/docs/spec/v2beta1/helmreleases.md b/docs/spec/v2beta1/helmreleases.md index 7ff257aa3..c396146e5 100644 --- a/docs/spec/v2beta1/helmreleases.md +++ b/docs/spec/v2beta1/helmreleases.md @@ -151,7 +151,7 @@ type KubeConfig struct { type HelmChartTemplate struct { // ObjectMeta holds the template for metadata like labels and annotations. // +optional - ObjectMeta HelmChartTemplateObjectMeta `json:"metadata,omitempty"` + ObjectMeta *HelmChartTemplateObjectMeta `json:"metadata,omitempty"` // Spec holds the template for the v1beta1.HelmChartSpec for this HelmRelease. // +required diff --git a/internal/controllers/helmrelease_controller_chart.go b/internal/controllers/helmrelease_controller_chart.go index 893816d5a..661fce268 100644 --- a/internal/controllers/helmrelease_controller_chart.go +++ b/internal/controllers/helmrelease_controller_chart.go @@ -199,12 +199,10 @@ func (r *HelmReleaseReconciler) deleteHelmChart(ctx context.Context, hr *v2.Helm // v2beta1.HelmChartTemplate of the given v2beta1.HelmRelease. func buildHelmChartFromTemplate(hr *v2.HelmRelease) *sourcev1b2.HelmChart { template := hr.Spec.Chart - return &sourcev1b2.HelmChart{ + result := &sourcev1b2.HelmChart{ ObjectMeta: metav1.ObjectMeta{ - Name: hr.GetHelmChartName(), - Namespace: hr.Spec.Chart.GetNamespace(hr.Namespace), - Labels: hr.Spec.Chart.ObjectMeta.Labels, - Annotations: hr.Spec.Chart.ObjectMeta.Annotations, + Name: hr.GetHelmChartName(), + Namespace: hr.Spec.Chart.GetNamespace(hr.Namespace), }, Spec: sourcev1b2.HelmChartSpec{ Chart: template.Spec.Chart, @@ -220,6 +218,11 @@ func buildHelmChartFromTemplate(hr *v2.HelmRelease) *sourcev1b2.HelmChart { Verify: templateVerificationToSourceVerification(template.Spec.Verify), }, } + if hr.Spec.Chart.ObjectMeta != nil { + result.ObjectMeta.Labels = hr.Spec.Chart.ObjectMeta.Labels + result.ObjectMeta.Annotations = hr.Spec.Chart.ObjectMeta.Annotations + } + return result } // helmChartRequiresUpdate compares the v2beta1.HelmChartTemplate of the @@ -246,9 +249,9 @@ func helmChartRequiresUpdate(hr *v2.HelmRelease, chart *sourcev1b2.HelmChart) bo return true case template.Spec.ValuesFile != chart.Spec.ValuesFile: return true - case !apiequality.Semantic.DeepEqual(template.ObjectMeta.Annotations, chart.Annotations): + case template.ObjectMeta != nil && !apiequality.Semantic.DeepEqual(template.ObjectMeta.Annotations, chart.Annotations): return true - case !apiequality.Semantic.DeepEqual(template.ObjectMeta.Labels, chart.Labels): + case template.ObjectMeta != nil && !apiequality.Semantic.DeepEqual(template.ObjectMeta.Labels, chart.Labels): return true case !reflect.DeepEqual(templateVerificationToSourceVerification(template.Spec.Verify), chart.Spec.Verify): return true diff --git a/internal/controllers/helmrelease_controller_chart_test.go b/internal/controllers/helmrelease_controller_chart_test.go index bd676c72a..b4f8632b3 100644 --- a/internal/controllers/helmrelease_controller_chart_test.go +++ b/internal/controllers/helmrelease_controller_chart_test.go @@ -517,14 +517,14 @@ func Test_helmChartRequiresUpdate(t *testing.T) { { name: "detects labels change", modify: func(hr *v2.HelmRelease, hc *sourcev1.HelmChart) { - hr.Spec.Chart.ObjectMeta.Labels = map[string]string{"foo": "bar"} + hr.Spec.Chart.ObjectMeta = &v2.HelmChartTemplateObjectMeta{Labels: map[string]string{"foo": "bar"}} }, want: true, }, { name: "detects annotations change", modify: func(hr *v2.HelmRelease, hc *sourcev1.HelmChart) { - hr.Spec.Chart.ObjectMeta.Annotations = map[string]string{"foo": "bar"} + hr.Spec.Chart.ObjectMeta = &v2.HelmChartTemplateObjectMeta{Annotations: map[string]string{"foo": "bar"}} }, want: true, },