Terraform Stacks functionality

The Go packages under this directory together implement the Terraform Stacks features.

Terraform Stacks is an orchestration layer on top of zero or more trees of Terraform modules, and so much of what you'll find here is analogous to a top-level package that serves a similar purpose for individual Terraform modules or trees of modules.

The main components here are:

  • stackaddrs: A stacks-specific analog to the top-level package addrs, containing types we use to refer to objects within the stacks language and runtime, and some logic for navigating between different types of addresses.

    This package builds on package addrs, since the stacks runtime wraps the modules runtime. Therefore some of the stack-specific address types incorporate more general address types from the other package.

  • stackconfig: Implements the loading, parsing, and static decoding for the stacks language, analogous to the top-level package configs that does similarly for Terraform's module language.

  • stackplan and stackstate together provide the models and marshalling/unmarshalling logic for the Stacks variants of Terraform's “plan” and “state” concepts.

  • stackruntime deals with the runtime behavior of stacks, including the creation of plans based on a comparison between desired and actual state, and then applying those plans.

    All of the dynamic behavior of the stacks language lives here.

  • tfstackdata1 is a Go representation of an internal protocol buffers schema used for preserving plan and state data between runs. These formats are implementation details that external callers are not permitted to rely on.

    (The public interface is via the Terraform Core RPC API, which is implemented in the sibling directory rpcapi.)

More Documentation

The following are some more specific and therefore more detailed documents about some particular parts of the implementation of the Terraform Stacks features: