Skip to content

Describe/list affected fails for vendored components in temp repoΒ #2167

@cmharden

Description

@cmharden

Describe the Bug

atmos describe affected and atmos list affected fail when a stack references Terraform outputs from another component and the referenced component lives under components/, which is populated by atmos vendor pull.

The temp repo/workdir created during affected processing contains vendor.yaml but does not contain the vendored components/ tree. Atmos then tries to generate backend.tf.json for the referenced component inside that temp repo and fails with no such file or directory.

This shows up reliably with cross-component output resolution via atmos.Component, and in testing it became much more visible after moving stack config to !terraform.state.

Expected Behavior

Expected behavior

When affected evaluates stacks that reference outputs from vendored Terraform components, Atmos should either:

  • materialize vendored components in the temp repo/workdir before resolving outputs, or
  • avoid requiring components/terraform/<component> to exist in that temp repo, or
  • fail earlier with a clearer error indicating vendored components are not present.

Actual behavior

Atmos creates a temp repo under /var/folders/.../T/... for affected, but that temp repo contains files like:

  • atmos.yaml
  • vendor.yaml
  • stacks/
  • modules/

and does not contain:

  • components/terraform/iam

Later, during stack processing, Atmos resolves the referenced component path inside that temp repo and tries to write:

/var/folders/.../T/.../components/terraform/iam/backend.tf.json

That fails because the parent directory does not exist.

Error

Error: failed to get affected components: template: describe-stacks-all-sections:85:28: executing "describe-stacks-all-sections" at <atmos.Component>: error calling Component: atmos.Component(iam, app-name-dev) failed to get terraform outputs: failed to generate backend file: open /var/folders/gv/cptvgjk51jd6jjcy6f1m0n2h0000gp/T/1874067959/components/terraform/iam/backend.tf.json: no such file or directory

Debug evidence

From debug logs:

DEBU  Resolved component path type=terraform component=iam resolved_path=/Users/me/Documents/projects/repos/my-app/components/terraform/iam
DEBU  Resolved component path type=terraform component=iam resolved_path=/var/folders/gv/cptvgjk51jd6jjcy6f1m0n2h0000gp/T/1874067959/components/terraform/iam
DEBU  Writing backend config file=/var/folders/gv/cptvgjk51jd6jjcy6f1m0n2h0000gp/T/1874067959/components/terraform/iam/backend.tf.json

But the temp repo contents are:

$ ls -l /var/folders/gv/cptvgjk51jd6jjcy6f1m0n2h0000gp/T/1874067959
atmos.yaml
ci/
config.js
deployment-pipeline.md
hack/
modules/
README.md
renovate.json5
stacks/
tasks.yaml
vendor.yaml
WORKFLOWS.md

No components/ directory exists there.

Steps to Reproduce

Repository characteristics:

  • components/ is not checked in directly
  • components/ is created via atmos vendor pull

Stack references outputs from another Terraform component, for example:

vars:
  iam_policy_arn: '{{ (atmos.Component "iam" .stack).outputs.policy_arns_map.app-name}}'

or with !terraform.state:

vars:
  iam_policy_arn: !terraform.state iam .policy_arns_map.app-name

Then run:

atmos describe affected -s app-name-dev

or

atmos list affected -s app-name-dev

Screenshots

No response

Environment

Darwin HM2G76X9LF 25.3.0 Darwin Kernel Version 25.3.0
v1.209.0

Additional Context

  • atmos terraform plan works in the real repo.
  • The failure happens in the temp repo created for affected.
  • Adding JIT vendoring/workdir config did not resolve it in testing; the temp repo still had vendor.yaml but no components/.
  • This appears to affect cross-component output resolution generally, not only !terraform.state, because the failing function in the captured logs is atmos.Component(iam, app-name-dev).

Suspected root cause

affected creates a temp repo/workdir but does not vendor components into it before evaluating cross-component output lookups. Later code paths assume components/terraform/<component> exists and attempt to generate backend.tf.json there.

Requested fix

Ensure vendored components are available in the temp repo/workdir used by describe/list affected before resolving cross-component Terraform outputs.

Metadata

Metadata

Labels

bugπŸ› An issue with the system

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions