Skip to main content

Split One Logical Stack Across Focused Manifests

· 3 min read
Erik Osterman
Founder @ Cloud Posse

Large stacks eventually turn into a shared bottleneck. Network, platform, and application owners all need to contribute components, but putting every change in one manifest makes reviews noisy and parent-level configuration easy to accidentally share.

Atmos now lets multiple top-level manifests represent one logical stack while keeping each manifest's components and parent scope independent.

The Problem

Teams often organize shared catalog imports and component instances by who owns them. Before this change, splitting one logical environment across parent manifests meant commands treated those files as separate stacks, or required a single large manifest that mixed unrelated scope and ownership.

That made it difficult to divide ownership without also changing how teams named, discovered, and operated the stack.

The Fix

Atmos recognizes parent manifests with the same stack identity as one logical stack for discovery and component selection. Each manifest still resolves its own imports, globals, and component configuration, so values from one parent do not leak into another.

Within that logical stack:

  • Distinct components from every parent appear together in stack discovery.
  • Equivalent duplicate components choose a stable, lexical canonical source.
  • Conflicting duplicate components remain errors with the parent manifests identified in the diagnostic.
  • Inheritance stays self-contained: a base must be defined inline or explicitly imported by the parent that uses it.

How to Use It

Give the related parent manifests the same stack identity through name, name_template, or name_pattern. For example, two manifests can use the same template-derived environment and stage:

# stacks/catalog/shared.yaml
components:
terraform:
chatops-base:
metadata:
component: mock
vars:
notifications_enabled: true
# stacks/parents/01-network.yaml
vars:
environment: dev
stage: shared

components:
terraform:
dns-primary:
metadata:
component: mock
# stacks/parents/02-platform.yaml
import:
- catalog/shared

vars:
environment: dev
stage: shared

components:
terraform:
chatops:
metadata:
component: mock
inherits:
- chatops-base

With a matching stack name configuration, atmos describe stacks reports one logical stack, while atmos describe component chatops -s dev-shared retains the platform parent's scope and resolves its base through the platform manifest's explicit catalog import. A component defined only by the network parent is discoverable in the logical stack, but is not an implicit inheritance dependency of the platform parent.

Get Involved

Try splitting a large logical stack along your team's ownership boundaries. If you encounter an import, inheritance, or duplicate-resolution case that is not clear, please open an issue with a minimal stack example.