opentofu/docs
Martin Atkins 0503163e28
Some checks are pending
build / Build for freebsd_386 (push) Waiting to run
build / Build for linux_386 (push) Waiting to run
build / Build for openbsd_386 (push) Waiting to run
build / Build for windows_386 (push) Waiting to run
build / Build for freebsd_amd64 (push) Waiting to run
build / Build for linux_amd64 (push) Waiting to run
build / Build for openbsd_amd64 (push) Waiting to run
build / Build for solaris_amd64 (push) Waiting to run
build / Build for windows_amd64 (push) Waiting to run
build / Build for freebsd_arm (push) Waiting to run
build / Build for linux_arm (push) Waiting to run
build / Build for linux_arm64 (push) Waiting to run
build / Build for darwin_amd64 (push) Waiting to run
build / Build for darwin_arm64 (push) Waiting to run
build / End-to-end Tests for linux_386 (push) Waiting to run
build / End-to-end Tests for windows_386 (push) Waiting to run
build / End-to-end Tests for darwin_amd64 (push) Waiting to run
build / End-to-end Tests for linux_amd64 (push) Waiting to run
build / End-to-end Tests for windows_amd64 (push) Waiting to run
Quick Checks / List files changed for pull request (push) Waiting to run
Quick Checks / Unit tests for linux_386 (push) Blocked by required conditions
Quick Checks / Unit tests for linux_amd64 (push) Blocked by required conditions
Quick Checks / Unit tests for windows_amd64 (push) Blocked by required conditions
Quick Checks / Unit tests for linux_arm (push) Blocked by required conditions
Quick Checks / Unit tests for darwin_arm64 (push) Blocked by required conditions
Quick Checks / Unit tests for linux_arm64 (push) Blocked by required conditions
Quick Checks / Race Tests (push) Blocked by required conditions
Quick Checks / End-to-end Tests (push) Blocked by required conditions
Quick Checks / Code Consistency Checks (push) Blocked by required conditions
Quick Checks / License Checks (push) Waiting to run
Website checks / List files changed for pull request (push) Waiting to run
Website checks / Build (push) Blocked by required conditions
Website checks / Test Installation Instructions (push) Blocked by required conditions
tracing: Centralize our OpenTelemetry package imports
OpenTelemetry has various Go packages split across several Go modules that
often need to be carefully upgraded together. And in particular, we are
using the "semconv" package in conjunction with the OpenTelemetry SDK's
"resource" package in a way that requires that they both agree on which
version of the OpenTelemetry Semantic Conventions are being followed.

To help avoid "dependency hell" situations when upgrading, this centralizes
all of our direct calls into the OpenTelemetry SDK and tracing API into
packages under internal/tracing, by exposing a few thin wrapper functions
that other packages can use to access the same functionality indirectly.

We only use a relatively small subset of the OpenTelemetry library surface
area, so we don't need too many of these reexports and they should not
represent a significant additional maintenance burden.

For the semconv and resource interaction in particular this also factors
that out into a separate helper function with a unit test, so we should
notice quickly whenever they become misaligned. This complements the
end-to-end test previously added in opentofu/opentofu#3447 to give us
faster feedback about this particular problem, while the end-to-end test
has the broader scope of making sure there aren't any errors at all when
initializing OpenTelemetry tracing.

Finally, this also replaces the constants we previously had in package
traceaddrs with functions that return attribute.KeyValue values directly.
This matches the API style used by the OpenTelemetry semconv packages, and
makes the calls to these helpers from elsewhere in the system a little
more concise.

Signed-off-by: Martin Atkins <mart@degeneration.co.uk>
2025-10-30 13:27:10 -07:00
..
images Remove all doc website doc images, adapt architecture-overview.png to new packages 2023-08-29 15:58:42 +03:00
plugin-protocol tfplugin5+tfplugin5: Adopt the latest protocol versions (#2817) 2025-05-19 07:00:49 -04:00
architecture.md fix: point link to tofu docs (#2707) 2025-04-24 16:39:34 -04:00
destroying.md Rename to opentofu docs and root folder (#529) 2023-09-21 12:53:02 +03:00
diagnostics.md Fix typos in the diagnostics.md docs (#3306) 2025-09-25 15:10:14 +01:00
glossary.md Glossary - initial version (#3411) 2025-10-28 11:41:31 +02:00
planning-behaviors.md Rename to opentofu docs and root folder (#529) 2023-09-21 12:53:02 +03:00
provider-references.md Update provider for_each internal documentation (#2870) 2025-05-28 11:30:41 -04:00
README.md docs: Diagnostics Guide 2025-09-24 07:42:15 -07:00
resource-instance-change-lifecycle.md Rename to opentofu docs and root folder (#529) 2023-09-21 12:53:02 +03:00
state_encryption.md Documentation updates for 1.7.0-alpha1 (state encryption) (#1396) 2024-03-14 15:05:05 +01:00
tracing.md tracing: Centralize our OpenTelemetry package imports 2025-10-30 13:27:10 -07:00
unicode.md Rename to opentofu docs and root folder (#529) 2023-09-21 12:53:02 +03:00

OpenTofu Core Codebase Documentation

This directory contains some documentation about the OpenTofu Core codebase, aimed at readers who are interested in making code contributions.

If you're looking for information on using OpenTofu, please instead refer to the main OpenTofu CLI documentation.

OpenTofu Core Architecture Documents

  • OpenTofu Core Architecture Summary: an overview of the main components of OpenTofu Core and how they interact. This is the best starting point if you are diving in to this codebase for the first time.

  • Resource Instance Change Lifecycle: a description of the steps in validating, planning, and applying a change to a resource instance, from the perspective of the provider plugin RPC operations. This may be useful for understanding the various expectations OpenTofu enforces about provider behavior, either if you intend to make changes to those behaviors or if you are implementing a new OpenTofu plugin SDK and so wish to conform to them.

    (If you are planning to write a new provider using the official SDK then please refer to the Extend documentation instead; it presents similar information from the perspective of the SDK API, rather than the plugin wire protocol.)

  • Diagnostics: how we report errors and warnings to end-users in OpenTofu.

  • Plugin Protocol: gRPC/protobuf definitions for the plugin wire protocol and information about its versioning strategy.

    This documentation is for SDK developers, and is not necessary reading for those implementing a provider using the official SDK.

  • How OpenTofu Uses Unicode: an overview of the various features of OpenTofu that rely on Unicode and how to change those features to adopt new versions of Unicode.

Contribution Guides