@@ -36,6 +36,7 @@ import (
3636 "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/krmtotf"
3737 "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/lease/leaser"
3838 "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/managementconflict"
39+ metricstransport "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/metrics/transport"
3940 "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/resourceoverrides"
4041 "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/resourceoverrides/operations"
4142 "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/servicemapping/servicemappingloader"
@@ -44,6 +45,7 @@ import (
4445 "github.com/go-logr/logr"
4546 tfschema "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
4647 "github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
48+
4749 "golang.org/x/sync/semaphore"
4850 corev1 "k8s.io/api/core/v1"
4951 apiextensions "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
@@ -60,6 +62,8 @@ import (
6062 "sigs.k8s.io/controller-runtime/pkg/predicate"
6163 "sigs.k8s.io/controller-runtime/pkg/reconcile"
6264 "sigs.k8s.io/controller-runtime/pkg/source"
65+
66+ tpgconfig "github.com/hashicorp/terraform-provider-google-beta/google-beta/transport"
6367)
6468
6569var logger = log .Log
@@ -76,6 +80,7 @@ type Reconciler struct {
7680 smLoader * servicemappingloader.ServiceMappingLoader
7781 logger logr.Logger
7882 jitterGenerator jitter.Generator
83+ controllerName string
7984 // Fields used for triggering reconciliations when dependencies are ready
8085 immediateReconcileRequests chan event.GenericEvent
8186 resourceWatcherRoutines * semaphore.Weighted // Used to cap number of goroutines watching unready dependencies
@@ -160,10 +165,12 @@ func NewReconciler(mgr manager.Manager,
160165 immediateReconcileRequests : immediateReconcileRequests ,
161166 resourceWatcherRoutines : resourceWatcherRoutines ,
162167 jitterGenerator : jitterGenerator ,
168+ controllerName : controllerName ,
163169 }, nil
164170}
165171
166172func (r * Reconciler ) Reconcile (ctx context.Context , req reconcile.Request ) (res reconcile.Result , err error ) {
173+
167174 r .schemaRefMu .RLock ()
168175 defer r .schemaRefMu .RUnlock ()
169176 r .logger .Info ("starting reconcile" , "resource" , req .NamespacedName )
@@ -247,7 +254,15 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (res
247254 if err := resourceoverrides .Handler .PreActuationTransform (& resource .Resource ); err != nil {
248255 return reconcile.Result {}, r .HandlePreActuationTransformFailed (ctx , & resource .Resource , fmt .Errorf ("error applying pre-actuation transformation to resource '%v': %w" , req .NamespacedName .String (), err ))
249256 }
250- requeue , err := r .sync (ctx , resource )
257+
258+ meta := r .provider .Meta ()
259+ if baseConfig , ok := meta .(* tpgconfig.Config ); ok {
260+ metaC := baseConfig .Clone ()
261+ metaC .Context = metricstransport .WithControllerName (ctx , r .controllerName ) // for metrics transport
262+ meta = metaC
263+ }
264+
265+ requeue , err := r .sync (ctx , resource , meta )
251266 if err != nil {
252267 return reconcile.Result {}, err
253268 }
@@ -262,7 +277,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (res
262277 return reconcile.Result {RequeueAfter : jitteredPeriod }, nil
263278}
264279
265- func (r * Reconciler ) sync (ctx context.Context , krmResource * krmtotf.Resource ) (requeue bool , err error ) {
280+ func (r * Reconciler ) sync (ctx context.Context , krmResource * krmtotf.Resource , tfProviderMeta interface {} ) (requeue bool , err error ) {
266281 // isolate any panics to only this function
267282 defer execution .RecoverWithInternalError (& err )
268283 if ! krmResource .GetDeletionTimestamp ().IsZero () {
@@ -317,7 +332,7 @@ func (r *Reconciler) sync(ctx context.Context, krmResource *krmtotf.Resource) (r
317332 return false , err
318333 }
319334 r .logger .Info ("deleting underlying resource" , "resource" , k8s .GetNamespacedName (krmResource ))
320- if _ , err := krmResource .TFResource .Apply (ctx , liveState , & terraform.InstanceDiff {Destroy : true }, r . provider . Meta () ); err != nil {
335+ if _ , err := krmResource .TFResource .Apply (ctx , liveState , & terraform.InstanceDiff {Destroy : true }, tfProviderMeta ); err != nil {
321336 return false , r .HandleDeleteFailed (ctx , & krmResource .Resource , fmt .Errorf ("error deleting resource: %v" , err ))
322337 }
323338 return false , r .handleDeleted (ctx , krmResource )
@@ -359,7 +374,7 @@ func (r *Reconciler) sync(ctx context.Context, krmResource *krmtotf.Resource) (r
359374 if err := resourceoverrides .Handler .PreTerraformApply (ctx , krmResource .GroupVersionKind (), & operations.PreTerraformApply {KRMResource : krmResource , TerraformConfig : config , LiveState : liveState }); err != nil {
360375 return false , r .HandleUpdateFailed (ctx , & krmResource .Resource , fmt .Errorf ("error applying pre-apply transformation to resource: %w" , err ))
361376 }
362- diff , err := krmResource .TFResource .Diff (ctx , liveState , config , r . provider . Meta () )
377+ diff , err := krmResource .TFResource .Diff (ctx , liveState , config , tfProviderMeta )
363378 if err != nil {
364379 return false , r .HandleUpdateFailed (ctx , & krmResource .Resource , fmt .Errorf ("error calculating diff: %w" , err ))
365380 }
@@ -409,7 +424,7 @@ func (r *Reconciler) sync(ctx context.Context, krmResource *krmtotf.Resource) (r
409424 d .RequiresNew = false
410425 }
411426 }
412- newState , diagnostics := krmResource .TFResource .Apply (ctx , liveState , diff , r . provider . Meta () )
427+ newState , diagnostics := krmResource .TFResource .Apply (ctx , liveState , diff , tfProviderMeta )
413428 if err := krmtotf .NewErrorFromDiagnostics (diagnostics ); err != nil {
414429 r .logger .Error (err , "error applying desired state" , "resource" , krmResource .GetNamespacedName ())
415430 return false , r .HandleUpdateFailed (ctx , & krmResource .Resource , fmt .Errorf ("error applying desired state: %w" , err ))
0 commit comments