Skip to main content

Fixed: !terraform.state with Disabled Workspaces

· 2 min read
Andriy Knysh
Principal Architect @ Cloud Posse

The !terraform.state YAML function now correctly reads Terraform state when workspaces are disabled (components.terraform.workspaces_enabled: false in atmos.yaml). Previously, Atmos looked for state files in the wrong location, causing the function to fail.

The Problem

When workspaces_enabled: false is set in atmos.yaml, Atmos sets the workspace name to default. However, Terraform stores state differently for the default workspace compared to named workspaces:

BackendDefault WorkspaceNamed Workspace
S3<key><workspace_key_prefix>/<workspace>/<key>
Localterraform.tfstateterraform.tfstate.d/<workspace>/terraform.tfstate
Azure<key><key>env:<workspace>

Atmos was incorrectly looking for state at the named workspace path even when using the default workspace. For example:

# atmos.yaml
components:
terraform:
workspaces_enabled: false # Uses "default" workspace
# Stack manifest
components:
terraform:
my-component:
vars:
vpc_id: !terraform.state vpc output_id # Failed to find state!

The !terraform.state function would look for state at workspace_key_prefix/default/key (S3) or terraform.tfstate.d/default/terraform.tfstate (local) instead of the correct location.

The Fix

Atmos now correctly handles the default workspace for all backend types:

  • S3 backend: Uses <key> directly instead of <workspace_key_prefix>/default/<key>
  • Local backend: Uses terraform.tfstate instead of terraform.tfstate.d/default/terraform.tfstate
  • Azure backend: Already worked correctly

Example

With workspaces disabled, the !terraform.state function now works as expected:

# atmos.yaml
components:
terraform:
workspaces_enabled: false

# Stack manifest
components:
terraform:
networking:
metadata:
component: vpc
vars:
cidr: "10.0.0.0/16"

application:
metadata:
component: app
vars:
# Now correctly reads from terraform.tfstate (not terraform.tfstate.d/default/terraform.tfstate)
vpc_id: !terraform.state networking vpc_id
subnet_ids: !terraform.state networking private_subnet_ids

Upgrade

Upgrade Atmos to get this fix. No configuration changes are required. The !terraform.state function will automatically use the correct state file paths based on your workspace configuration.

References

For usage and configuration, see Workspaces.