Override Configurations
The overrides section provides file-scoped overrides. Unlike global or component-type configuration such as vars, which can affect every component in the resolved top-level stack, overrides apply only to components defined in the current manifest file and its imports.
Why Overrides Exist
When multiple manifest files are imported into the same top-level stack (e.g., one per team), regular vars at the global or component-type level leak across all manifests after deep merge. Team A's global vars would affect Team B's components.
The overrides section solves this by staying scoped to the file boundary. Values defined in overrides are applied only to components within the current manifest and its imports — they never leak into components defined in other manifests.
Overrides also have the highest merge priority, making them useful when you need a value to win regardless of where else it's defined.
If you're only customizing vars and each top-level stack imports a single blueprint (no competing manifests), you usually don't need overrides. Plain vars at the same scope level is sufficient — the importing file's values override the imported file's values. See the Blueprint Configuration pattern.
For file-scoped changes to command, env, hooks, providers, or settings, keep using overrides.
What Can Be Overridden
You can override the following sections in the component(s) configuration:
command- Override the executable for componentsenv- Override environment variableshooks- Override lifecycle hooksproviders- Override Terraform provider configurationsettings- Override integrations and metadatavars- Override input variables
The overrides section can be used in the global scope or in the Terraform and Helmfile scopes.
The Component Overrides Design Pattern goes into further details on how to use this effectively.
Merge Order
When multiple sources define the same variable, more specific levels win:
- Global
vars(lowest priority) - Component-type
terraform.vars/helmfile.vars - Inherited base component
vars(viametadata.inherits) - Component-level
vars overrides.vars(highest priority — file-scoped)
Terraform-level and Helmfile-level overrides are merged with global overrides, with the more specific level winning on conflicts.
See Configure Variables for the full explanation with examples.
Overrides Schema
The overrides section schema at the global scope is as follows:
overrides:
# Override the ENV variables for the components in the current stack manifest and all its imports
env: {}
# Override the hooks for the components in the current stack manifest and all its imports
hooks: {}
# Override the settings for the components in the current stack manifest and all its imports
settings: {}
# Override the variables for the components in the current stack manifest and all its imports
vars: {}
# Override the providers configuration section for the Terraform components in the current stack manifest and all its imports
# Note: this applies only to Terraform components in the `terraform.providers` and `component.terraform.<component>.providers` sections
providers: {}
# Override the command to execute for the components in the current stack manifest and all its imports
command: "<command to execute>"
The overrides section schemas at the Terraform and Helmfile levels are as follows:
terraform:
overrides:
env: {}
hooks: {}
settings: {}
vars: {}
providers: {}
command: "<command to execute>"
helmfile:
overrides:
env: {}
settings: {}
vars: {}
command: "<command to execute>"
You can include overrides, terraform.overrides, and helmfile.overrides in any stack manifest at any level of inheritance. Overrides only affect components in the current file and its imports — not components from other files in the same stack.
Refer to Atmos Component Inheritance for more information on all types of component inheritance supported by Atmos
Use-cases
Overrides for Teams
When stack manifests are split per team, each team manages its own set of components. Overrides let you change configuration for one team's components without affecting another team's.
The locals section is also file-scoped and does not inherit across imports, similar to overrides.
For example, we have two teams: devops and testing.
The devops Team manifest is defined in stacks/teams/devops.yaml:
stacks/teams/devops.yaml
The testing Team manifest is defined in stacks/teams/testing.yaml:
stacks/teams/testing.yaml
We can import the two manifests into a top-level stack manifest, e.g. tenant1/dev/us-west-2.yaml:
stacks/orgs/cp/tenant1/dev/us-west-2.yaml
We want to override env, vars, and settings for all components the testing team manages — without affecting the devops team. Adding global-level vars would leak into both teams. Instead, use overrides:
stacks/teams/testing.yaml
The manifest above configures three levels of overrides:
- Global
overrides— setsTEST_ENV_VAR1for all components (Terraform and Helmfile) managed by thetestingteam. terraform.overrides— sets Spacelift autodeploy, a variable, and switches the command totofu. Applies only to Terraform components.helmfile.overrides— setsTEST_ENV_VAR2. Applies only to Helmfile components.
Terraform-level and Helmfile-level overrides are deep-merged with global overrides, with the more specific level winning on conflicts.
To confirm that the components managed by the testing Team get the new values from the overrides sections, execute the following
commands:
atmos describe component test/test-component -s tenant1-uw2-dev
atmos describe component test/test-component-override -s tenant1-uw2-dev
You should see the following output:
To confirm that the components managed by the devops Team are not affected by the overrides for the testing Team, execute the following
command:
The top-level-component1 component (managed by devops) is unaffected — its vars, env, settings, and command remain unchanged.
Importing the Overrides
You can place overrides in a separate manifest and import it into other stacks for reuse.
Define the overrides in stacks/teams/testing-overrides.yaml:
stacks/teams/testing-overrides.yaml
Import the overrides manifest into stacks/teams/testing.yaml:
stacks/teams/testing.yaml
- Imported overrides apply to components imported after them. In the example above,
teams/testing-overridesapplies totest-componentandtest-component-override, but not totest-component-2(listed before it). - Inline overrides apply to all components in the file and its imports, regardless of order.
- Inline wins over imported overrides when they conflict at the same scope level.
- Scope level still beats import order. For example, imported
terraform.overridescan override inline globaloverridesfor Terraform components.
Refer to atmos describe component CLI command for more details