From c488bfbb48f736cdce75a7f56ee8cfb30f57edba Mon Sep 17 00:00:00 2001 From: James Humphries Date: Thu, 12 Feb 2026 15:59:45 +0000 Subject: [PATCH] [OTel] Add resource type trace attribute to all resource instance spans Signed-off-by: James Humphries --- internal/tofu/node_resource_abstract_instance.go | 10 ++++++++-- internal/tofu/node_resource_apply_instance.go | 2 +- internal/tofu/node_resource_deposed.go | 1 + internal/tofu/node_resource_destroy.go | 1 + internal/tofu/node_resource_plan_destroy.go | 1 + internal/tofu/node_resource_plan_instance.go | 1 + internal/tofu/node_resource_plan_orphan.go | 1 + 7 files changed, 14 insertions(+), 3 deletions(-) diff --git a/internal/tofu/node_resource_abstract_instance.go b/internal/tofu/node_resource_abstract_instance.go index 6faf2b51b8..369dbc3bf4 100644 --- a/internal/tofu/node_resource_abstract_instance.go +++ b/internal/tofu/node_resource_abstract_instance.go @@ -53,6 +53,14 @@ const traceNameApplyResourceInstance = "Apply resource instance changes" // a value of type [addrs.AbsResourceInstance]. const traceAttrResourceInstanceAddr = "opentofu.resource_instance.address" +// traceAttrResourceType is a standardized trace span attribute name that we +// use for recording the type of the resource that a particular span is +// concerned with, such as "aws_instance" or "google_compute_disk". +// +// The value of this should be populated from the Type field of the +// [addrs.Resource] embedded in the relevant [addrs.AbsResourceInstance]. +const traceAttrResourceType = "opentofu.resource_instance.type" + // traceAttrPlanRefresh is a standardized trace span attribute name that we use // for a boolean attribute describing whether the refresh step is enabled // for the main resource instance associated with the span during the planning @@ -2822,7 +2830,6 @@ func (n *NodeAbstractResourceInstance) apply( keyData instances.RepetitionData, createBeforeDestroy bool, ) (*states.ResourceInstanceObject, tfdiags.Diagnostics) { - var diags tfdiags.Diagnostics if state == nil { state = &states.ResourceInstanceObject{} @@ -3389,7 +3396,6 @@ func (n *NodeAbstractResourceInstance) deferEphemeralResource(evalCtx EvalContex plannedNewState *states.ResourceInstanceObject, diags tfdiags.Diagnostics, ) { - unmarkedConfigVal, configMarkPaths := configVal.UnmarkDeepWithPaths() proposedNewVal := objchange.PlannedUnknownObject(schema, unmarkedConfigVal) proposedNewVal = proposedNewVal.MarkWithPaths(configMarkPaths) diff --git a/internal/tofu/node_resource_apply_instance.go b/internal/tofu/node_resource_apply_instance.go index b83119cb59..d33ab06221 100644 --- a/internal/tofu/node_resource_apply_instance.go +++ b/internal/tofu/node_resource_apply_instance.go @@ -126,6 +126,7 @@ func (n *NodeApplyableResourceInstance) Execute(ctx context.Context, evalCtx Eva ctx, traceNameApplyResourceInstance, tracing.SpanAttributes( traceattrs.String(traceAttrResourceInstanceAddr, addr.String()), + traceattrs.String(traceAttrResourceType, addr.Resource.Resource.Type), ), ) defer span.End() @@ -447,7 +448,6 @@ func (n *NodeApplyableResourceInstance) managedResourceExecute(ctx context.Conte } func (n *NodeApplyableResourceInstance) managedResourcePostconditions(ctx context.Context, evalCtx EvalContext, repeatData instances.RepetitionData) (diags tfdiags.Diagnostics) { - checkDiags := evalCheckRules( ctx, addrs.ResourcePostcondition, diff --git a/internal/tofu/node_resource_deposed.go b/internal/tofu/node_resource_deposed.go index 62c82a998e..52d587a997 100644 --- a/internal/tofu/node_resource_deposed.go +++ b/internal/tofu/node_resource_deposed.go @@ -97,6 +97,7 @@ func (n *NodePlanDeposedResourceInstanceObject) Execute(ctx context.Context, eva ctx, traceNamePlanResourceInstance, tracing.SpanAttributes( traceattrs.String(traceAttrResourceInstanceAddr, n.Addr.String()), + traceattrs.String(traceAttrResourceType, n.Addr.Resource.Resource.Type), traceattrs.Bool(traceAttrPlanRefresh, !n.skipRefresh), ), ) diff --git a/internal/tofu/node_resource_destroy.go b/internal/tofu/node_resource_destroy.go index dd96e68d9f..892c3c38fc 100644 --- a/internal/tofu/node_resource_destroy.go +++ b/internal/tofu/node_resource_destroy.go @@ -157,6 +157,7 @@ func (n *NodeDestroyResourceInstance) Execute(ctx context.Context, evalCtx EvalC ctx, traceNameApplyResourceInstance, tracing.SpanAttributes( traceattrs.String(traceAttrResourceInstanceAddr, addr.String()), + traceattrs.String(traceAttrResourceType, addr.Resource.Resource.Type), ), ) defer span.End() diff --git a/internal/tofu/node_resource_plan_destroy.go b/internal/tofu/node_resource_plan_destroy.go index b627bf9c54..9bfbda36c0 100644 --- a/internal/tofu/node_resource_plan_destroy.go +++ b/internal/tofu/node_resource_plan_destroy.go @@ -63,6 +63,7 @@ func (n *NodePlanDestroyableResourceInstance) Execute(ctx context.Context, evalC ctx, traceNamePlanResourceInstance, tracing.SpanAttributes( traceattrs.String(traceAttrResourceInstanceAddr, addr.String()), + traceattrs.String(traceAttrResourceType, addr.Resource.Resource.Type), traceattrs.Bool(traceAttrPlanRefresh, !n.skipRefresh), ), ) diff --git a/internal/tofu/node_resource_plan_instance.go b/internal/tofu/node_resource_plan_instance.go index bbc10e22fd..31468dded3 100644 --- a/internal/tofu/node_resource_plan_instance.go +++ b/internal/tofu/node_resource_plan_instance.go @@ -94,6 +94,7 @@ func (n *NodePlannableResourceInstance) Execute(ctx context.Context, evalCtx Eva ctx, traceNamePlanResourceInstance, tracing.SpanAttributes( traceattrs.String(traceAttrResourceInstanceAddr, addr.String()), + traceattrs.String(traceAttrResourceType, addr.Resource.Resource.Type), traceattrs.Bool(traceAttrPlanRefresh, !n.skipRefresh), traceattrs.Bool(traceAttrPlanPlanChanges, !n.skipPlanChanges), ), diff --git a/internal/tofu/node_resource_plan_orphan.go b/internal/tofu/node_resource_plan_orphan.go index 17af7f38ef..31517c6f1f 100644 --- a/internal/tofu/node_resource_plan_orphan.go +++ b/internal/tofu/node_resource_plan_orphan.go @@ -64,6 +64,7 @@ func (n *NodePlannableResourceInstanceOrphan) Execute(ctx context.Context, evalC ctx, traceNamePlanResourceInstance, tracing.SpanAttributes( traceattrs.String(traceAttrResourceInstanceAddr, addr.String()), + traceattrs.String(traceAttrResourceType, addr.Resource.Resource.Type), traceattrs.Bool(traceAttrPlanRefresh, !n.skipRefresh), traceattrs.Bool(traceAttrPlanPlanChanges, !n.skipPlanChanges), ),