blob: feed5ca64fb0669b1f245c3e4c950d8363c8e51c [file] [log] [blame] [view] [edit]
# 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:
* [Stacks Runtime internal architecture](./stackruntime/internal/stackeval/README.md)