<< … >> template as the input’s value; there is no separate field or wrapper. The same template works wherever the input is edited: the dashboard, the project config file, and pipeline config.
Addresses
Address the producer relative to the module that consumes the value. Use thegivenId of each project, environment, and module.
Hyphenated IDs work with dot syntax:
<< modules.vpc-network.output.vpc_id >>.
Templates are expressions, so you can combine outputs with literals and functions:
["subnet-a","subnet-b"]). A value that is exactly one template block keeps the output’s real type, so a string_array input can take a whole array output. Inputs that are not strings — numbers, booleans, arrays, objects — must be a single template block; mixing text around the template is rejected.
In the dashboard
Every module input has an f button that appears when you hover the field.- On a text or number input, click f to insert
<< >>at the cursor. Templates inside the field are highlighted, including inside the YAML and JSON editors for object inputs. - On a Boolean or other non-text input, click f to swap the control for a text field where you type the reference. Click it again to stop using a reference and return to the plain control.
- Typing inside
<< >>opens autocomplete for projects, environments, modules, and output keys. Output rows show the producer’s current value from its last successful apply. Autocomplete also works inside expressions such as<< string(modules.db.output.port) >>.
In the project config file
ravion project config pull exports, so the file round-trips unchanged. ravion project config apply orders stack runs so producers run before the modules that reference them, and rejects reference cycles. In --dry-run output, a reference is shown together with its resolved value and type when the producer has been applied.
In pipelines
Pipeline config can read module outputs with the environment-qualified forms (environments.… and projects.…). A bare modules.<module> address is rejected because a pipeline is not tied to one environment. See module outputs in pipeline templating.
How references behave
- The value is resolved when the consumer’s stack runs, from the producer’s last successful apply.
- If the producer has not been applied yet, the reference is accepted but stays pending. The input is validated against the resolved value once the producer’s outputs exist, so apply the producer before running the consumer’s stack.
- Each reference in
inputRefs(in the API andravion module getoutput) has astatus:UP_TO_DATEwhen the value the consumer last resolved matches the producer’s current outputs,STALEwhen the producer’s outputs have changed since, andUNKNOWNwhen they can’t be compared, such as before the producer has outputs. - When a producer’s change run applies and changes an output a consumer references, the reference becomes
STALEand a change run is queued for the consumer’s stack. The queued run is never auto-approved; if its plan has changes, it waits at the normal approval step. No run is queued if the consumer’s stack has never run or already has a run in progress (including one waiting for approval); the reference staysSTALEuntil the consumer’s next run. It becomesUP_TO_DATEas soon as a run for the consumer is prepared with the new value, before that run is approved. - A reference binds to the module instance it first resolved to. If you rename a producer’s
givenIdand reuse the old one for a different module, the reference keeps pointing at the original instance and aPRODUCER_RENAMEDwarning is recorded so you can update the template. - You cannot delete a module or environment while another module still references its outputs. Remove the reference first.
- Sensitive outputs are never exposed through references. Reference a handle such as an ARN or secret name instead of the secret value.
- To write a literal
<<in a value, escape it as\<<. The escaped block is stored and passed through as plain text and never evaluated;\\<<is a live template preceded by a literal backslash.
For module authors
By default every non-sensitive Terraform output of the stack is available to consumers. To give consumers a stable contract with labels, descriptions, and types for autocomplete and validation, declare outputs in the module definition:sensitive, and Terraform outputs marked sensitive, cannot be referenced. See outputs in the definition schema.
Inside a module’s own definition, << stack.output.<key> >> (alias << module.output.<key> >>) reads the module’s own stack outputs, and << ref.stack.output.<key> >> (alias << ref.output.<key> >>) reads the outputs of a module wired through a moduleGivenIdRef input. See template expressions.