Skip to main content

Environment variables

The abc CLI uses a single registry-backed resolver for every environment variable it consults. Names are scope-prefixed so the surface stays predictable:

  • ABC_API_* — transport, auth, identity (talks to the abc-cluster control plane)
  • ABC_CLI_* — local CLI configuration, behaviour, output, debug
  • ABC_<COMPONENT>_* — component-scoped overrides (controller, khan, node-probe, tool binaries)
  • ABC_<RESOURCE> — cluster-resource selectors only: ABC_WORKSPACE, ABC_REGION, ABC_NAMESPACE, ABC_ORG, ABC_CLUSTER, ABC_PROJECT, ABC_INVESTIGATION

Resolution precedence

For any registered variable, the resolver walks:

flag > ABC env > vendor env > active context config > default
  • flag — explicit --<name> on the command line
  • ABC envABC_* set in the environment (via os.LookupEnv — explicit empty counts)
  • vendor env — last-resort fallback for a handful of ABC vars that have a vendor namesake (e.g. ABC_REGION falls back to NOMAD_REGION). Emits a one-time warning when no ABC context is configured.
  • active context — value persisted under contexts.<name>.<key> in ~/.abc/config.yaml
  • default — registry-declared default (or empty)

Use abc admin env show <NAME> to see which source won for any variable in your current shell.

Variables by scope

abc-cluster API

Transport and auth for the abc-cluster control plane.

NamePurposeFlagContext keyVendor fallbackDefault
ABC_API_ADDRESSabc-cluster API endpoint (controller / API gateway)--addressurl
ABC_API_TOKEN 🔒bearer token for abc-cluster API--access-tokenaccess_token
ABC_API_AS_USERoperator-only: impersonate another user (sent as identity-override header)

CLI configuration & behaviour

Local CLI state: config file location, output format, telemetry, modes.

NamePurposeFlagContext keyVendor fallbackDefault
ABC_CLI_CONTEXTone-shot override of active_context for this invocation
ABC_CLI_CONFIG_FILEoverride ~/.abc/config.yaml location
ABC_CLI_CACHE_DIRoverride ~/.abc/cache/ location
ABC_CLI_OUTPUT_FORMATdefault output format: table | json | yaml--outputoutput_formattable
ABC_CLI_SUDOoperator passthrough mode: =1 unlocks abc sudo commands
ABC_CLI_CLOUD_MODE=1 unlocks abc-cloud control-plane commands (operator only)
ABC_CLI_EXP_MODE=1 enables experimental CLI commands
ABC_CLI_NO_TELEMETRY=1 disables CLI-side telemetry (controller telemetry is separate)
ABC_CLI_QUIET=1 suppresses non-essential stderr output
ABC_CLI_AUTOMATION=1 signals non-interactive automation context (suppresses prompts)
ABC_CLI_USE_EGETeget preference: auto | 0/false/no/off (never use eget)auto
ABC_CLI_TMPDIRoverride temp dir for CLI staging (uploads, generated scripts, ...)
ABC_CLI_ASSETS_DIRoverride location of CLI-bundled assets (templates, schemas, ...)
ABC_CLI_BINARIES_DIRoverride managed-binaries dir (default: ~/.abc/bin)

Cluster resource selectors

Resource identifiers a command operates against.

NamePurposeFlagContext keyVendor fallbackDefault
ABC_WORKSPACEworkspace ID for this invocation--workspaceworkspace_id
ABC_REGIONsovereignty region (ZA / KE / MZ / ...)--regionregionNOMAD_REGION
ABC_NAMESPACElogical namespace within workspace--namespacenamespaceNOMAD_NAMESPACE
ABC_ORGorganization ID when multi-org--orgorg_id
ABC_CLUSTERcluster identifier within active context--cluster
ABC_PROJECTproject identifier within workspace--project
ABC_INVESTIGATIONinvestigation identifier within project--investigation

Component-scoped

Component overrides for capability cache, upload, crypt, node bootstrap.

NamePurposeFlagContext keyVendor fallbackDefault
ABC_CAPABILITY_TTLcapability cache TTL (e.g. 24h)
ABC_CAPABILITY_HARD_EXPIRYcapability hard-expiry window beyond TTL (e.g. 72h)
ABC_UPLOAD_ENDPOINTtusd upload endpoint overrideupload_endpoint
ABC_UPLOAD_TOKEN 🔒tusd upload token overrideupload_token
ABC_CRYPT_PASSWORD 🔒rclone-crypt password (also keys abc secrets)
ABC_CRYPT_SALT 🔒rclone-crypt salt
ABC_NODE_PASSWORD 🔒abc-node bootstrap password
ABC_NODE_NO_PROBE=1 skips the periodic node-probe sysbatch job

Tool binary overrides

Paths to subprocess binaries the CLI shells out to. Operator territory.

NamePurposeFlagContext keyVendor fallbackDefault
ABC_NOMAD_BINoverride path to the nomad binary
ABC_VAULT_BINoverride path to the vault binary
ABC_RCLONE_BINoverride path to the rclone binary
ABC_MC_BINoverride path to the mc (MinIO Client) binary
ABC_S5CMD_BINoverride path to the s5cmd binary
ABC_NEXTFLOW_BINoverride path to the nextflow binary
ABC_NODE_PROBE_BINoverride path to the abc-node-probe binary
ABC_SHELLCHECK_BINoverride path to the shellcheck binary
ABC_EGET_BINoverride path to the eget binary

Debug & test (internal)

Reserved namespace. Not for end-user use.

NamePurposeFlagContext keyVendor fallbackDefault
ABC_CLI_DEBUG=1 (or =N) enables CLI debug logging at level N
ABC_CLI_DEBUG_KEEP_SCRIPTinternal: keep generated scripts on disk after run
ABC_CLI_LOG_LEVELCLI log level: trace | debug | info | warn | errorinfo
ABC_CLI_TRACE=1 enables CLI execution tracing
ABC_CLI_TEST_NSinternal: namespace override for integration tests
ABC_CLI_TEST_TIMEOUTinternal: timeout override for integration tests
ABC_CLI_INTEGRATION_LOKI_REQUIREinternal: integration test requires Loki present
ABC_CLI_INTEGRATION_LOKI_WAIT_SECinternal: integration test Loki wait timeout (seconds)
ABC_CLI_INTEGRATION_OBS_STACKinternal: integration test observability stack flag
ABC_CLI_INTEGRATION_STRESS_NGinternal: stress-ng integration test toggle
ABC_CLI_INTEGRATION_STRESS_TIMEOUTinternal: stress-ng integration test timeout

Vendor fallback (last resort)

Vendor env vars read silently when the canonical ABC name and active context are both unset. Emits a one-time warning if no ABC context exists.

NamePurposeFlagContext keyVendor fallbackDefault
NOMAD_ADDRfallback: consulted only when no ABC context is configured
NOMAD_TOKEN 🔒fallback: consulted only when no ABC context is configured
NOMAD_REGIONfallback for ABC_REGION when ABC context lacks region
NOMAD_NAMESPACEfallback for ABC_NAMESPACE when ABC context lacks namespace
VAULT_ADDRfallback: consulted only in abc sudo vault passthrough
VAULT_TOKEN 🔒fallback: consulted only in abc sudo vault passthrough

Subprocess injection

The CLI constructs these for child processes from the active context. You do not set them.

NamePurposeFlagContext keyVendor fallbackDefault
AWS_ACCESS_KEY_IDconstructed for rclone/s5cmd/nextflow/mc subprocesses from active context
AWS_SECRET_ACCESS_KEY 🔒constructed for rclone/s5cmd/nextflow/mc subprocesses from active context
AWS_ENDPOINT_URLconstructed for rclone/s5cmd/nextflow/mc subprocesses from active context
AWS_REGIONconstructed for rclone/s5cmd/nextflow/mc subprocesses from active context
AWS_DEFAULT_REGIONolder vendor variant of AWS_REGION; some tools (older aws-cli, boto) only read this
AWS_SESSION_TOKEN 🔒session token for grove+ short-lived credentials (STS-style)
AWS_CA_BUNDLEcustom CA cert path for self-signed S3 endpoints (lab deployments)
AWS_S3_FORCE_PATH_STYLEforce path-style addressing; required for MinIO and RustFS
S3_FORCE_PATH_STYLEolder vendor variant of AWS_S3_FORCE_PATH_STYLE
AWS_REQUEST_CHECKSUM_CALCULATIONset to when_required for MinIO compatibility with newer AWS SDKs
MC_HOST_local 🔒MinIO Client connection alias for the active context; URL with embedded credentials
MC_INSECUREMinIO Client: skip TLS verification (self-signed endpoints)
MINIO_SERVERhost:port for Pulumi MinIO provider (scheme stripped)
MINIO_USERuser for Pulumi MinIO provider
MINIO_PASSWORD 🔒password for Pulumi MinIO provider
MINIO_ROOT_USERMinIO server root user (constructed for abc admin services minio cli passthrough)
MINIO_ROOT_PASSWORD 🔒MinIO server root password (constructed for abc admin services minio cli passthrough)
RCLONE_CONFIGpath to rclone config file (the CLI generates one per invocation)

Forbidden patterns

The registry rejects (and abc admin env validate flags) these patterns in the environment:

  • ABC_DISABLE_* — use ABC_<SCOPE>_NO_<FEATURE> instead
  • ABC_*_OFF — same
  • ABC_GROVE_* / ABC_SEEDLING_* / ABC_CLOUD_* — env vars are tier-neutral; they do not know which abc-cluster tier they're running against

Subprocess injection

When the CLI shells out to nomad, vault, rclone, s5cmd, nextflow, mc, or pulumi, it constructs the relevant vendor env vars from the active context and injects them into the child process. You do not need to set NOMAD_ADDR, AWS_ACCESS_KEY_ID etc. in your shell — the abstraction handles it. In abc admin services <tool> cli passthrough commands, parent-shell vendor env vars are preserved so operators can target alternate endpoints.

🔒 = redacted in abc admin env list output.

Shadowing — alternate resolution paths

Some env vars have additional resolution paths beyond the standard precedence ladder. A value you set in your shell may be shadowed (replaced by a config-derived value) in specific contexts. Use abc admin env show <NAME> to see which path is active for any variable.

ABC_CRYPT_PASSWORD

  • contexts..crypt.password wins over env var; stderr warning on disagreement

ABC_CRYPT_SALT

  • contexts..crypt.salt wins over env var; stderr warning on disagreement

VAULT_ADDR

  • --config local: contexts..admin.services.vault.cred_source.local.http (or top-level .http) (shell env wins by default)
  • --config nomad: contexts..admin.services.vault.cred_source.nomad.http (shell env ignored, warning emitted)

VAULT_TOKEN

  • --config local: contexts..admin.services.vault.cred_source.local.access_key (or top-level .access_key) (shell env wins by default)
  • --config nomad: contexts..admin.services.vault.cred_source.nomad.access_key (shell env ignored, warning emitted)

AWS_ACCESS_KEY_ID

  • --config local: contexts..admin.services.minio.cred_source.local.access_key (or top-level .access_key) (shell env wins by default)
  • --config nomad: contexts..admin.services.minio.cred_source.nomad.access_key (shell env ignored, warning emitted)
  • --config vault: contexts..admin.services.minio.cred_source.vault.access_key (shell env ignored, warning emitted)
  • --config local: contexts..admin.services.rustfs.cred_source.local.access_key (or top-level .access_key) (shell env wins by default)
  • --config nomad: contexts..admin.services.rustfs.cred_source.nomad.access_key (shell env ignored, warning emitted)
  • --config vault: contexts..admin.services.rustfs.cred_source.vault.access_key (shell env ignored, warning emitted)

AWS_SECRET_ACCESS_KEY

  • --config local: contexts..admin.services.minio.cred_source.local.secret_key (or top-level .secret_key) (shell env wins by default)
  • --config nomad: contexts..admin.services.minio.cred_source.nomad.secret_key (shell env ignored, warning emitted)
  • --config vault: contexts..admin.services.minio.cred_source.vault.secret_key (shell env ignored, warning emitted)
  • --config local: contexts..admin.services.rustfs.cred_source.local.secret_key (or top-level .secret_key) (shell env wins by default)
  • --config nomad: contexts..admin.services.rustfs.cred_source.nomad.secret_key (shell env ignored, warning emitted)
  • --config vault: contexts..admin.services.rustfs.cred_source.vault.secret_key (shell env ignored, warning emitted)

AWS_ENDPOINT_URL

  • --config local: contexts..admin.services.minio.cred_source.local.endpoint (or top-level .endpoint) (shell env wins by default)
  • --config nomad: contexts..admin.services.minio.cred_source.nomad.endpoint (shell env ignored, warning emitted)
  • --config vault: contexts..admin.services.minio.cred_source.vault.endpoint (shell env ignored, warning emitted)

MC_HOST_local

  • constructed from admin.services.minio.cred_source.local.{endpoint,user,password}
  • constructed from admin.services.minio.cred_source.nomad.{endpoint,user,password}; shell env ignored
  • constructed from admin.services.minio.cred_source.vault.{endpoint,user,password}; shell env ignored

MINIO_SERVER

  • --config local: contexts..admin.services.minio.cred_source.local.endpoint (or top-level .endpoint) (shell env wins by default)
  • --config nomad: contexts..admin.services.minio.cred_source.nomad.endpoint (shell env ignored, warning emitted)
  • --config vault: contexts..admin.services.minio.cred_source.vault.endpoint (shell env ignored, warning emitted)

MINIO_USER

  • --config local: contexts..admin.services.minio.cred_source.local.user (or top-level .user) (shell env wins by default)
  • --config nomad: contexts..admin.services.minio.cred_source.nomad.user (shell env ignored, warning emitted)
  • --config vault: contexts..admin.services.minio.cred_source.vault.user (shell env ignored, warning emitted)

MINIO_PASSWORD

  • --config local: contexts..admin.services.minio.cred_source.local.password (or top-level .password) (shell env wins by default)
  • --config nomad: contexts..admin.services.minio.cred_source.nomad.password (shell env ignored, warning emitted)
  • --config vault: contexts..admin.services.minio.cred_source.vault.password (shell env ignored, warning emitted)

MINIO_ROOT_USER

  • admin.services.minio.cred_source.local.user OR admin.abc_nodes.minio_root_user as fallback
  • --config nomad: contexts..admin.services.minio.cred_source.nomad.user (shell env ignored, warning emitted)
  • --config vault: contexts..admin.services.minio.cred_source.vault.user (shell env ignored, warning emitted)

MINIO_ROOT_PASSWORD

  • admin.services.minio.cred_source.local.password OR admin.abc_nodes.minio_root_password as fallback
  • --config nomad: contexts..admin.services.minio.cred_source.nomad.password (shell env ignored, warning emitted)
  • --config vault: contexts..admin.services.minio.cred_source.vault.password (shell env ignored, warning emitted)

This page is generated from internal/envvars/registry.go — edits there propagate here via go generate ./internal/envvars/....