Configuration

Set the config path, the state database and any defaults once in atlantide.toml, and commands inside the project need no flags.

The file is looked up in the working directory and then in each parent, the way git locates a repository root. Relative paths inside it resolve against the directory holding the file, not the directory you ran the command from.

config       = "infra.py"
state        = "atlantide.db"
parallelism  = 8
aws_region   = "eu-north-1"
aws_profile  = "default"
aws_endpoint = "http://localhost:4566"   # send every AWS call here instead
secrets_key   = ".atlantide.key"
secrets_store = ".atlantide.secrets"

[aws.aliases.prod]                       # alternate account (multi-account)
profile  = "prod-account"                # a resource selects it via provider_alias="prod"

Inputs

A config can read per-run values, so one file can describe several environments:

env = atlantide.input("env", "dev")      # with a default
count = int(atlantide.input("count"))    # values arrive as strings from -var
atlantide plan -var env=prod
atlantide plan --var-file prod.toml

Inputs can be set in three places, in increasing order of precedence: [inputs] in atlantide.toml (or [profile.<name>.inputs] for one environment), then --var-file, then -var on the command line.

Every plan prints the inputs it actually read. Only inputs the config reads affect the result, so an unused value cannot change what a run appears to be.

Inputs are not for secrets

atlantide.secret("name") returns a handle, not a value. Passing a secret as an input would write the plaintext into the IR, into build artifacts and into state.

Environments (profiles)

A [profile.<name>] table overlays the top level, and --profile/-P — or the ATLANTIDE_PROFILE environment variable — selects it.

The overlay is applied table by table, so a profile restates only the keys it changes and inherits the rest:

parallelism = 4

[profile.prod]
parallelism = 16

[profile.prod.state]                     # inherits the base [state] keys it omits
backend    = "s3"
bucket     = "acme-atlantide-state"
key        = "prod/atlantide.json"
lock_table = "atlantide-locks"

Naming a profile the file does not define is an error rather than a silent fall-through to the defaults.