Commit graph

8 commits

Author SHA1 Message Date
Radek Simko
0fe906fa8c make copyrightfix 2026-02-17 13:56:34 +00:00
Martin Atkins
1714729f87 stackeval: terraform.applying symbol
This symbol produces an ephemeral boolean value that's true when the
stack evaluator is configured for applying and false otherwise.

The primary purpose of this is to allow specifying a more privileged auth
role in a provider configuration during the apply phase, while allowing
the plan phase to use a read-only or otherwise-less-privileged role.
2024-06-17 08:34:46 -07:00
Martin Atkins
5bfdb12098 stackaddrs: Absolute references and referenceables
This allows us to talk about references between expressions in absolute
terms, taking into account the stack where a particular expression would
be resolved.

This isn't an appropriate representation for references like each.key,
since those require a more specific scope than just a stack, but that's
okay because those contextual reference types can't depend on anything
other than what they are embedded inside anyway, and so we never need to
consider them when we're doing global reference analysis.
2024-01-08 10:52:01 -08:00
Martin Atkins
333c502990 stackeval: Support each.key, each.value, count.index and self references
For all contexts where these have a defined value, they can now be used
in expressions and evaluate to whatever they ought to evaluate to.
2023-11-15 12:38:56 -08:00
Martin Atkins
13edd30479 stackeval: Test-only globals
Because many stacks language features are dependent on others to do useful
work, it's tempting to focus only on integration testing of combinations
of features used together. However, we known from our experience with the
modules runtime (the "terraform" package) that over time this becomes a
huge maintenance burden, because any non-trivial change tends to
invalidate hundreds or thousands of integration tests, and because of their
broad scope its often hard in retrospect to figure out what exactly a
particular test was aiming to test vs. what it was just relying on as a
side-effect.

To try to minimize these cross-dependencies and thus enable something
closer to unit testing, here we introduce a special kind of symbol to the
stacks language which is available only to unit tests in this package.
"Test-only globals" -- an intentionally-clunky name to avoid squatting on
useful names -- can be set as part of the Main object and, when defined,
are available for use in all situations where we perform expression
evaluation against a stack. The "globals" in the name represents that,
unlike just about everything else, they are defined once but available in
all stacks in the configuration tree.

This design is a tradeoff: it introduces a bunch of extra code that is
here entirely to support testing, but hopefully this code is segregated
enough from everything else that it's unlikely to change significantly
under future maintenance, thereby hopefully minimizing the need for future
cross-cutting test maintenance too.
2023-11-15 12:38:56 -08:00
Martin Atkins
434e199675 stackaddrs: Add HashiCorp copyright comments 2023-11-15 12:38:55 -08:00
Martin Atkins
3d503f8e71 stackruntime: Stubbing the "interpreter" for stack configurations 2023-11-15 12:38:51 -08:00
Martin Atkins
e667352553 stacks/stackaddrs: Initial address types for stacks
This serves a similar purpose to the "addrs" package for Terraform overall,
but deals with concepts that are unique to the stacks language.
2023-11-15 12:38:50 -08:00