Skip to content

Commit ae01764

Browse files
committed
feat: tf api metrics
Signed-off-by: Alex Pana <8968914+acpana@users.noreply.github.com>
1 parent ef2e355 commit ae01764

File tree

1 file changed

+20
-5
lines changed

1 file changed

+20
-5
lines changed

pkg/controller/tf/controller.go

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

6569
var 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

166172
func (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

Comments
 (0)