From 1b50d4b76f0afe3681fef4147a54b568dc1e00a1 Mon Sep 17 00:00:00 2001 From: Jiri Tyr Date: Tue, 19 Mar 2024 22:17:50 +0000 Subject: [PATCH 1/3] Adding support for managementPolicies (fixes #209) Signed-off-by: Jiri Tyr --- cmd/provider/main.go | 7 + pkg/controller/release/observe.go | 15 +- pkg/controller/release/observe_test.go | 198 ++++++++++++++++++------- pkg/controller/release/release.go | 18 ++- 4 files changed, 183 insertions(+), 55 deletions(-) diff --git a/cmd/provider/main.go b/cmd/provider/main.go index 39faed0..4749b47 100644 --- a/cmd/provider/main.go +++ b/cmd/provider/main.go @@ -50,6 +50,8 @@ func main() { syncInterval = app.Flag("sync", "How often all resources will be double-checked for drift from the desired state.").Short('s').Default("1h").Duration() pollInterval = app.Flag("poll", "How often individual resources will be checked for drift from the desired state").Default("10m").Duration() maxReconcileRate = app.Flag("max-reconcile-rate", "The global maximum rate per second at which resources may checked for drift from the desired state.").Default("100").Int() + + enableManagementPolicies = app.Flag("enable-management-policies", "Enable support for Management Policies.").Default("true").Envar("ENABLE_MANAGEMENT_POLICIES").Bool() ) kingpin.MustParse(app.Parse(os.Args[1:])) @@ -96,6 +98,11 @@ func main() { Features: &feature.Flags{}, } + if *enableManagementPolicies { + o.Features.Enable(feature.EnableBetaManagementPolicies) + log.Info("Beta feature enabled", "flag", feature.EnableBetaManagementPolicies) + } + kingpin.FatalIfError(template.Setup(mgr, o, *timeout), "Cannot setup Template controllers") kingpin.FatalIfError(mgr.Start(ctrl.SetupSignalHandler()), "Cannot start controller manager") } diff --git a/pkg/controller/release/observe.go b/pkg/controller/release/observe.go index 64ae702..21662c3 100644 --- a/pkg/controller/release/observe.go +++ b/pkg/controller/release/observe.go @@ -23,11 +23,13 @@ import ( "fmt" "strings" + xpv1 "github.com/crossplane/crossplane-runtime/apis/common/v1" "github.com/crossplane/crossplane-runtime/pkg/fieldpath" "github.com/crossplane/crossplane-runtime/pkg/reconciler/managed" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/types" + "k8s.io/apimachinery/pkg/util/sets" "github.com/pkg/errors" "helm.sh/helm/v3/pkg/release" @@ -59,7 +61,7 @@ func generateObservation(in *release.Release) v1beta1.ReleaseObservation { } // isUpToDate checks whether desired spec up to date with the observed state for a given release -func isUpToDate(ctx context.Context, kube client.Client, in *v1beta1.ReleaseParameters, observed *release.Release, s v1beta1.ReleaseStatus) (bool, error) { +func isUpToDate(ctx context.Context, kube client.Client, spec *v1beta1.ReleaseSpec, observed *release.Release, s v1beta1.ReleaseStatus) (bool, error) { // nolint:gocyclo if observed.Info == nil { return false, errors.New(errReleaseInfoNilInObservedRelease) } @@ -77,9 +79,20 @@ func isUpToDate(ctx context.Context, kube client.Client, in *v1beta1.ReleasePara if ocm == nil { return false, errors.New(errChartMetaNilInObservedRelease) } + + in := spec.ForProvider + if in.Chart.Name != ocm.Name { return false, nil } + + mp := sets.New[xpv1.ManagementAction](spec.ManagementPolicies...) + + if len(mp) != 0 && !mp.HasAny(xpv1.ManagementActionUpdate, xpv1.ManagementActionAll) { + // Treated as up-to-date as we don't update or create the resource + return true, nil + } + if in.Chart.Version != ocm.Version && in.Chart.Version != devel { return false, nil } diff --git a/pkg/controller/release/observe_test.go b/pkg/controller/release/observe_test.go index a03a6cd..2894915 100644 --- a/pkg/controller/release/observe_test.go +++ b/pkg/controller/release/observe_test.go @@ -4,6 +4,7 @@ import ( "context" "testing" + xpv1 "github.com/crossplane/crossplane-runtime/apis/common/v1" "github.com/crossplane/crossplane-runtime/pkg/reconciler/managed" "github.com/crossplane/crossplane-runtime/pkg/test" "github.com/google/go-cmp/cmp" @@ -92,7 +93,7 @@ func Test_generateObservation(t *testing.T) { func Test_isUpToDate(t *testing.T) { type args struct { kube client.Client - in *v1beta1.ReleaseParameters + spec *v1beta1.ReleaseSpec observed *release.Release } type want struct { @@ -162,15 +163,17 @@ func Test_isUpToDate(t *testing.T) { kube: &test.MockClient{ MockGet: nil, }, - in: &v1beta1.ReleaseParameters{ - Chart: v1beta1.ChartSpec{ - Name: testChart, - Version: testVersion, - }, - ValuesSpec: v1beta1.ValuesSpec{ - Values: runtime.RawExtension{ - Raw: []byte("invalid-yaml"), - Object: nil, + spec: &v1beta1.ReleaseSpec{ + ForProvider: v1beta1.ReleaseParameters{ + Chart: v1beta1.ChartSpec{ + Name: testChart, + Version: testVersion, + }, + ValuesSpec: v1beta1.ValuesSpec{ + Values: runtime.RawExtension{ + Raw: []byte("invalid-yaml"), + Object: nil, + }, }, }, }, @@ -200,14 +203,16 @@ func Test_isUpToDate(t *testing.T) { kube: &test.MockClient{ MockGet: nil, }, - in: &v1beta1.ReleaseParameters{ - Chart: v1beta1.ChartSpec{ - Name: "another-chart", - Version: testVersion, - }, - ValuesSpec: v1beta1.ValuesSpec{ - Values: runtime.RawExtension{ - Raw: []byte(testReleaseConfigStr), + spec: &v1beta1.ReleaseSpec{ + ForProvider: v1beta1.ReleaseParameters{ + Chart: v1beta1.ChartSpec{ + Name: "another-chart", + Version: testVersion, + }, + ValuesSpec: v1beta1.ValuesSpec{ + Values: runtime.RawExtension{ + Raw: []byte(testReleaseConfigStr), + }, }, }, }, @@ -233,14 +238,16 @@ func Test_isUpToDate(t *testing.T) { kube: &test.MockClient{ MockGet: nil, }, - in: &v1beta1.ReleaseParameters{ - Chart: v1beta1.ChartSpec{ - Name: testChart, - Version: "another-version", - }, - ValuesSpec: v1beta1.ValuesSpec{ - Values: runtime.RawExtension{ - Raw: []byte(testReleaseConfigStr), + spec: &v1beta1.ReleaseSpec{ + ForProvider: v1beta1.ReleaseParameters{ + Chart: v1beta1.ChartSpec{ + Name: testChart, + Version: "another-version", + }, + ValuesSpec: v1beta1.ValuesSpec{ + Values: runtime.RawExtension{ + Raw: []byte(testReleaseConfigStr), + }, }, }, }, @@ -266,14 +273,101 @@ func Test_isUpToDate(t *testing.T) { kube: &test.MockClient{ MockGet: nil, }, - in: &v1beta1.ReleaseParameters{ - Chart: v1beta1.ChartSpec{ - Name: testChart, - Version: testVersion, + spec: &v1beta1.ReleaseSpec{ + ForProvider: v1beta1.ReleaseParameters{ + Chart: v1beta1.ChartSpec{ + Name: testChart, + Version: testVersion, + }, + ValuesSpec: v1beta1.ValuesSpec{ + Values: runtime.RawExtension{ + Raw: []byte("keyA: valX"), + }, + }, + }, + }, + observed: &release.Release{ + Info: &release.Info{}, + Chart: &chart.Chart{ + Raw: nil, + Metadata: &chart.Metadata{ + Name: testChart, + Version: testVersion, + }, + }, + Config: testReleaseConfig, + }, + }, + want: want{ + out: false, + err: nil, + }, + }, + "NotUpToDate_ConfigIsDifferent_ManagementPolicies_DoesApply": { + args: args{ + kube: &test.MockClient{ + MockGet: nil, + }, + spec: &v1beta1.ReleaseSpec{ + ResourceSpec: xpv1.ResourceSpec{ + ManagementPolicies: []xpv1.ManagementAction{ + xpv1.ManagementActionCreate, + xpv1.ManagementActionDelete, + xpv1.ManagementActionObserve, + }, + }, + ForProvider: v1beta1.ReleaseParameters{ + Chart: v1beta1.ChartSpec{ + Name: testChart, + Version: testVersion, + }, + ValuesSpec: v1beta1.ValuesSpec{ + Values: runtime.RawExtension{ + Raw: []byte("keyA: valX"), + }, + }, + }, + }, + observed: &release.Release{ + Info: &release.Info{}, + Chart: &chart.Chart{ + Raw: nil, + Metadata: &chart.Metadata{ + Name: testChart, + Version: testVersion, + }, + }, + Config: testReleaseConfig, + }, + }, + want: want{ + out: true, + err: nil, + }, + }, + "NotUpToDate_ConfigIsDifferent_ManagementPolicies_DoesNotApply": { + args: args{ + kube: &test.MockClient{ + MockGet: nil, + }, + spec: &v1beta1.ReleaseSpec{ + ResourceSpec: xpv1.ResourceSpec{ + ManagementPolicies: []xpv1.ManagementAction{ + xpv1.ManagementActionCreate, + xpv1.ManagementActionDelete, + xpv1.ManagementActionObserve, + xpv1.ManagementActionUpdate, + }, }, - ValuesSpec: v1beta1.ValuesSpec{ - Values: runtime.RawExtension{ - Raw: []byte("keyA: valX"), + ForProvider: v1beta1.ReleaseParameters{ + Chart: v1beta1.ChartSpec{ + Name: testChart, + Version: testVersion, + }, + ValuesSpec: v1beta1.ValuesSpec{ + Values: runtime.RawExtension{ + Raw: []byte("keyA: valX"), + }, }, }, }, @@ -299,14 +393,16 @@ func Test_isUpToDate(t *testing.T) { kube: &test.MockClient{ MockGet: nil, }, - in: &v1beta1.ReleaseParameters{ - Chart: v1beta1.ChartSpec{ - Name: testChart, - Version: testVersion, - }, - ValuesSpec: v1beta1.ValuesSpec{ - Values: runtime.RawExtension{ - Raw: []byte(testReleaseConfigStr), + spec: &v1beta1.ReleaseSpec{ + ForProvider: v1beta1.ReleaseParameters{ + Chart: v1beta1.ChartSpec{ + Name: testChart, + Version: testVersion, + }, + ValuesSpec: v1beta1.ValuesSpec{ + Values: runtime.RawExtension{ + Raw: []byte(testReleaseConfigStr), + }, }, }, }, @@ -332,14 +428,16 @@ func Test_isUpToDate(t *testing.T) { kube: &test.MockClient{ MockGet: nil, }, - in: &v1beta1.ReleaseParameters{ - Chart: v1beta1.ChartSpec{ - Name: testChart, - Version: testVersion, - }, - ValuesSpec: v1beta1.ValuesSpec{ - Values: runtime.RawExtension{ - Raw: []byte(testReleaseConfigStr), + spec: &v1beta1.ReleaseSpec{ + ForProvider: v1beta1.ReleaseParameters{ + Chart: v1beta1.ChartSpec{ + Name: testChart, + Version: testVersion, + }, + ValuesSpec: v1beta1.ValuesSpec{ + Values: runtime.RawExtension{ + Raw: []byte(testReleaseConfigStr), + }, }, }, }, @@ -364,7 +462,7 @@ func Test_isUpToDate(t *testing.T) { for name, tc := range cases { t.Run(name, func(t *testing.T) { - got, gotErr := isUpToDate(context.Background(), tc.args.kube, tc.args.in, tc.args.observed, v1beta1.ReleaseStatus{}) + got, gotErr := isUpToDate(context.Background(), tc.args.kube, tc.args.spec, tc.args.observed, v1beta1.ReleaseStatus{}) if diff := cmp.Diff(tc.want.err, gotErr, test.EquateErrors()); diff != "" { t.Fatalf("isUpToDate(...): -want error, +got error: %s", diff) } diff --git a/pkg/controller/release/release.go b/pkg/controller/release/release.go index 89d09ae..cf08e12 100644 --- a/pkg/controller/release/release.go +++ b/pkg/controller/release/release.go @@ -39,6 +39,7 @@ import ( xpv1 "github.com/crossplane/crossplane-runtime/apis/common/v1" "github.com/crossplane/crossplane-runtime/pkg/controller" "github.com/crossplane/crossplane-runtime/pkg/event" + "github.com/crossplane/crossplane-runtime/pkg/feature" "github.com/crossplane/crossplane-runtime/pkg/meta" "github.com/crossplane/crossplane-runtime/pkg/reconciler/managed" "github.com/crossplane/crossplane-runtime/pkg/resource" @@ -91,8 +92,7 @@ func Setup(mgr ctrl.Manager, o controller.Options, timeout time.Duration) error name := managed.ControllerName(v1beta1.ReleaseGroupKind) cps := []managed.ConnectionPublisher{managed.NewAPISecretPublisher(mgr.GetClient(), mgr.GetScheme())} - r := managed.NewReconciler(mgr, - resource.ManagedKind(v1beta1.ReleaseGroupVersionKind), + reconcilerOptions := []managed.ReconcilerOption{ managed.WithExternalConnecter(&connector{ client: mgr.GetClient(), logger: o.Logger, @@ -110,7 +110,17 @@ func Setup(mgr ctrl.Manager, o controller.Options, timeout time.Duration) error managed.WithLogger(o.Logger.WithValues("controller", name)), managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), managed.WithTimeout(timeout), - managed.WithConnectionPublishers(cps...)) + managed.WithConnectionPublishers(cps...), + } + + if o.Features.Enabled(feature.EnableBetaManagementPolicies) { + reconcilerOptions = append(reconcilerOptions, managed.WithManagementPolicies()) + } + + r := managed.NewReconciler(mgr, + resource.ManagedKind(v1beta1.ReleaseGroupVersionKind), + reconcilerOptions..., + ) return ctrl.NewControllerManagedBy(mgr). Named(name). @@ -291,7 +301,7 @@ func (e *helmExternal) Observe(ctx context.Context, mg resource.Managed) (manage return managed.ExternalObservation{ResourceExists: true}, nil } - s, err := isUpToDate(ctx, e.localKube, &cr.Spec.ForProvider, rel, cr.Status) + s, err := isUpToDate(ctx, e.localKube, &cr.Spec, rel, cr.Status) if err != nil { return managed.ExternalObservation{}, errors.Wrap(err, errFailedToCheckIfUpToDate) } From 93567c4cd5045814443027953b3db66f21c19a62 Mon Sep 17 00:00:00 2001 From: Jiri Tyr Date: Fri, 29 Mar 2024 19:38:51 +0000 Subject: [PATCH 2/3] Observe logic only when the feature is enabled Signed-off-by: Jiri Tyr --- pkg/controller/release/observe.go | 4 +-- pkg/controller/release/release.go | 54 +++++++++++++++++-------------- 2 files changed, 31 insertions(+), 27 deletions(-) diff --git a/pkg/controller/release/observe.go b/pkg/controller/release/observe.go index 21662c3..366dcc0 100644 --- a/pkg/controller/release/observe.go +++ b/pkg/controller/release/observe.go @@ -61,7 +61,7 @@ func generateObservation(in *release.Release) v1beta1.ReleaseObservation { } // isUpToDate checks whether desired spec up to date with the observed state for a given release -func isUpToDate(ctx context.Context, kube client.Client, spec *v1beta1.ReleaseSpec, observed *release.Release, s v1beta1.ReleaseStatus) (bool, error) { // nolint:gocyclo +func isUpToDate(ctx context.Context, kube client.Client, managementPoliciesEnabled bool, spec *v1beta1.ReleaseSpec, observed *release.Release, s v1beta1.ReleaseStatus) (bool, error) { // nolint:gocyclo if observed.Info == nil { return false, errors.New(errReleaseInfoNilInObservedRelease) } @@ -88,7 +88,7 @@ func isUpToDate(ctx context.Context, kube client.Client, spec *v1beta1.ReleaseSp mp := sets.New[xpv1.ManagementAction](spec.ManagementPolicies...) - if len(mp) != 0 && !mp.HasAny(xpv1.ManagementActionUpdate, xpv1.ManagementActionAll) { + if managementPoliciesEnabled && len(mp) != 0 && !mp.HasAny(xpv1.ManagementActionUpdate, xpv1.ManagementActionAll) { // Treated as up-to-date as we don't update or create the resource return true, nil } diff --git a/pkg/controller/release/release.go b/pkg/controller/release/release.go index cf08e12..af17b04 100644 --- a/pkg/controller/release/release.go +++ b/pkg/controller/release/release.go @@ -94,17 +94,18 @@ func Setup(mgr ctrl.Manager, o controller.Options, timeout time.Duration) error reconcilerOptions := []managed.ReconcilerOption{ managed.WithExternalConnecter(&connector{ - client: mgr.GetClient(), - logger: o.Logger, - usage: resource.NewProviderConfigUsageTracker(mgr.GetClient(), &helmv1beta1.ProviderConfigUsage{}), - kcfgExtractorFn: resource.CommonCredentialExtractor, - gcpExtractorFn: resource.CommonCredentialExtractor, - gcpInjectorFn: gke.WrapRESTConfig, - azureExtractorFn: resource.CommonCredentialExtractor, - azureInjectorFn: azure.WrapRESTConfig, - newRestConfigFn: clients.NewRESTConfig, - newKubeClientFn: clients.NewKubeClient, - newHelmClientFn: helmClient.NewClient, + client: mgr.GetClient(), + logger: o.Logger, + usage: resource.NewProviderConfigUsageTracker(mgr.GetClient(), &helmv1beta1.ProviderConfigUsage{}), + managementPoliciesEnabled: o.Features.Enabled(feature.EnableBetaManagementPolicies), + kcfgExtractorFn: resource.CommonCredentialExtractor, + gcpExtractorFn: resource.CommonCredentialExtractor, + gcpInjectorFn: gke.WrapRESTConfig, + azureExtractorFn: resource.CommonCredentialExtractor, + azureInjectorFn: azure.WrapRESTConfig, + newRestConfigFn: clients.NewRESTConfig, + newKubeClientFn: clients.NewKubeClient, + newHelmClientFn: helmClient.NewClient, }), managed.WithPollInterval(o.PollInterval), managed.WithLogger(o.Logger.WithValues("controller", name)), @@ -130,9 +131,10 @@ func Setup(mgr ctrl.Manager, o controller.Options, timeout time.Duration) error } type connector struct { - logger logging.Logger - client client.Client - usage resource.Tracker + logger logging.Logger + client client.Client + usage resource.Tracker + managementPoliciesEnabled bool kcfgExtractorFn func(ctx context.Context, src xpv1.CredentialsSource, c client.Client, ccs xpv1.CommonCredentialSelectors) ([]byte, error) gcpExtractorFn func(ctx context.Context, src xpv1.CredentialsSource, c client.Client, ccs xpv1.CommonCredentialSelectors) ([]byte, error) @@ -251,20 +253,22 @@ func (c *connector) Connect(ctx context.Context, mg resource.Managed) (managed.E } return &helmExternal{ - logger: l, - localKube: c.client, - kube: k, - helm: h, - patch: newPatcher(), + logger: l, + localKube: c.client, + kube: k, + helm: h, + patch: newPatcher(), + managementPoliciesEnabled: c.managementPoliciesEnabled, }, nil } type helmExternal struct { - logger logging.Logger - localKube client.Client - kube client.Client - helm helmClient.Client - patch Patcher + logger logging.Logger + localKube client.Client + kube client.Client + helm helmClient.Client + patch Patcher + managementPoliciesEnabled bool } func (e *helmExternal) Observe(ctx context.Context, mg resource.Managed) (managed.ExternalObservation, error) { @@ -301,7 +305,7 @@ func (e *helmExternal) Observe(ctx context.Context, mg resource.Managed) (manage return managed.ExternalObservation{ResourceExists: true}, nil } - s, err := isUpToDate(ctx, e.localKube, &cr.Spec, rel, cr.Status) + s, err := isUpToDate(ctx, e.localKube, e.managementPoliciesEnabled, &cr.Spec, rel, cr.Status) if err != nil { return managed.ExternalObservation{}, errors.Wrap(err, errFailedToCheckIfUpToDate) } From 5d2fcbef1811763e4690d648bbfd251962a740b4 Mon Sep 17 00:00:00 2001 From: Jiri Tyr Date: Sun, 7 Apr 2024 16:12:59 +0100 Subject: [PATCH 3/3] Reverting the last commit Signed-off-by: Jiri Tyr --- pkg/controller/release/observe.go | 4 +-- pkg/controller/release/release.go | 54 ++++++++++++++----------------- 2 files changed, 27 insertions(+), 31 deletions(-) diff --git a/pkg/controller/release/observe.go b/pkg/controller/release/observe.go index 366dcc0..21662c3 100644 --- a/pkg/controller/release/observe.go +++ b/pkg/controller/release/observe.go @@ -61,7 +61,7 @@ func generateObservation(in *release.Release) v1beta1.ReleaseObservation { } // isUpToDate checks whether desired spec up to date with the observed state for a given release -func isUpToDate(ctx context.Context, kube client.Client, managementPoliciesEnabled bool, spec *v1beta1.ReleaseSpec, observed *release.Release, s v1beta1.ReleaseStatus) (bool, error) { // nolint:gocyclo +func isUpToDate(ctx context.Context, kube client.Client, spec *v1beta1.ReleaseSpec, observed *release.Release, s v1beta1.ReleaseStatus) (bool, error) { // nolint:gocyclo if observed.Info == nil { return false, errors.New(errReleaseInfoNilInObservedRelease) } @@ -88,7 +88,7 @@ func isUpToDate(ctx context.Context, kube client.Client, managementPoliciesEnabl mp := sets.New[xpv1.ManagementAction](spec.ManagementPolicies...) - if managementPoliciesEnabled && len(mp) != 0 && !mp.HasAny(xpv1.ManagementActionUpdate, xpv1.ManagementActionAll) { + if len(mp) != 0 && !mp.HasAny(xpv1.ManagementActionUpdate, xpv1.ManagementActionAll) { // Treated as up-to-date as we don't update or create the resource return true, nil } diff --git a/pkg/controller/release/release.go b/pkg/controller/release/release.go index af17b04..cf08e12 100644 --- a/pkg/controller/release/release.go +++ b/pkg/controller/release/release.go @@ -94,18 +94,17 @@ func Setup(mgr ctrl.Manager, o controller.Options, timeout time.Duration) error reconcilerOptions := []managed.ReconcilerOption{ managed.WithExternalConnecter(&connector{ - client: mgr.GetClient(), - logger: o.Logger, - usage: resource.NewProviderConfigUsageTracker(mgr.GetClient(), &helmv1beta1.ProviderConfigUsage{}), - managementPoliciesEnabled: o.Features.Enabled(feature.EnableBetaManagementPolicies), - kcfgExtractorFn: resource.CommonCredentialExtractor, - gcpExtractorFn: resource.CommonCredentialExtractor, - gcpInjectorFn: gke.WrapRESTConfig, - azureExtractorFn: resource.CommonCredentialExtractor, - azureInjectorFn: azure.WrapRESTConfig, - newRestConfigFn: clients.NewRESTConfig, - newKubeClientFn: clients.NewKubeClient, - newHelmClientFn: helmClient.NewClient, + client: mgr.GetClient(), + logger: o.Logger, + usage: resource.NewProviderConfigUsageTracker(mgr.GetClient(), &helmv1beta1.ProviderConfigUsage{}), + kcfgExtractorFn: resource.CommonCredentialExtractor, + gcpExtractorFn: resource.CommonCredentialExtractor, + gcpInjectorFn: gke.WrapRESTConfig, + azureExtractorFn: resource.CommonCredentialExtractor, + azureInjectorFn: azure.WrapRESTConfig, + newRestConfigFn: clients.NewRESTConfig, + newKubeClientFn: clients.NewKubeClient, + newHelmClientFn: helmClient.NewClient, }), managed.WithPollInterval(o.PollInterval), managed.WithLogger(o.Logger.WithValues("controller", name)), @@ -131,10 +130,9 @@ func Setup(mgr ctrl.Manager, o controller.Options, timeout time.Duration) error } type connector struct { - logger logging.Logger - client client.Client - usage resource.Tracker - managementPoliciesEnabled bool + logger logging.Logger + client client.Client + usage resource.Tracker kcfgExtractorFn func(ctx context.Context, src xpv1.CredentialsSource, c client.Client, ccs xpv1.CommonCredentialSelectors) ([]byte, error) gcpExtractorFn func(ctx context.Context, src xpv1.CredentialsSource, c client.Client, ccs xpv1.CommonCredentialSelectors) ([]byte, error) @@ -253,22 +251,20 @@ func (c *connector) Connect(ctx context.Context, mg resource.Managed) (managed.E } return &helmExternal{ - logger: l, - localKube: c.client, - kube: k, - helm: h, - patch: newPatcher(), - managementPoliciesEnabled: c.managementPoliciesEnabled, + logger: l, + localKube: c.client, + kube: k, + helm: h, + patch: newPatcher(), }, nil } type helmExternal struct { - logger logging.Logger - localKube client.Client - kube client.Client - helm helmClient.Client - patch Patcher - managementPoliciesEnabled bool + logger logging.Logger + localKube client.Client + kube client.Client + helm helmClient.Client + patch Patcher } func (e *helmExternal) Observe(ctx context.Context, mg resource.Managed) (managed.ExternalObservation, error) { @@ -305,7 +301,7 @@ func (e *helmExternal) Observe(ctx context.Context, mg resource.Managed) (manage return managed.ExternalObservation{ResourceExists: true}, nil } - s, err := isUpToDate(ctx, e.localKube, e.managementPoliciesEnabled, &cr.Spec, rel, cr.Status) + s, err := isUpToDate(ctx, e.localKube, &cr.Spec, rel, cr.Status) if err != nil { return managed.ExternalObservation{}, errors.Wrap(err, errFailedToCheckIfUpToDate) }