# CLI config is loaded from the following locations (from lowest to highest priority): # system dir ('/usr/local/etc/atmos' on Linux, '%LOCALAPPDATA%/atmos' on Windows) # home dir (~/.atmos) # current directory # ENV vars # Command-line arguments # # It supports POSIX-style Globs for file names/paths (double-star '**' is supported) # https://en.wikipedia.org/wiki/Glob_(programming) vendor: # Path to vendor configuration file or directory containing vendor files # Supports both absolute and relative paths # If a directory is specified, all `.yaml` and `.yaml` files in the directory will be processed in lexicographical order # Can also be set using 'ATMOS_VENDOR_BASE_PATH' ENV var, or '--vendor-base-path' command-line argument # Examples: # base_path: "./vendor.yaml" # Single file # base_path: "./vendor.d/" # Directory containing multiple vendor configuration files base_path: "./vendor.yaml" components: terraform: # Optional `command` specifies the executable to be called by `atmos` when running Terraform commands # If not defined, `terraform` is used # Examples: # command: terraform # command: /usr/local/bin/terraform # command: /usr/local/bin/terraform-1.8 # command: tofu # command: /usr/local/bin/tofu-1.7.1 # Can also be set using 'ATMOS_COMPONENTS_TERRAFORM_COMMAND' ENV var, or '--terraform-command' command-line argument command: terraform # Can also be set using 'ATMOS_COMPONENTS_TERRAFORM_BASE_PATH' ENV var, or '--terraform-dir' command-line argument # Supports both absolute and relative paths base_path: "components/terraform" # Can also be set using 'ATMOS_COMPONENTS_TERRAFORM_APPLY_AUTO_APPROVE' ENV var apply_auto_approve: false # Can also be set using 'ATMOS_COMPONENTS_TERRAFORM_DEPLOY_RUN_INIT' ENV var, or '--deploy-run-init' command-line argument deploy_run_init: true # Can also be set using 'ATMOS_COMPONENTS_TERRAFORM_INIT_RUN_RECONFIGURE' ENV var, or '--init-run-reconfigure' command-line argument init_run_reconfigure: true # Can also be set using 'ATMOS_COMPONENTS_TERRAFORM_AUTO_GENERATE_BACKEND_FILE' ENV var, or '--auto-generate-backend-file' command-line argument auto_generate_backend_file: false init: # Can also be set using 'ATMOS_COMPONENTS_TERRAFORM_INIT_PASS_VARS' ENV var, or '--init-pass-vars' command-line argument pass_vars: false helmfile: # Can also be set using 'ATMOS_COMPONENTS_HELMFILE_BASE_PATH' ENV var, or '--helmfile-dir' command-line argument # Supports both absolute and relative paths base_path: "components/helmfile" # Can also be set using 'ATMOS_COMPONENTS_HELMFILE_USE_EKS' ENV var # If not specified, defaults to 'true' use_eks: true # Can also be set using 'ATMOS_COMPONENTS_HELMFILE_KUBECONFIG_PATH' ENV var kubeconfig_path: "/dev/shm" # Can also be set using 'ATMOS_COMPONENTS_HELMFILE_HELM_AWS_PROFILE_PATTERN' ENV var helm_aws_profile_pattern: "{namespace}-{tenant}-gbl-{stage}-helm" # Can also be set using 'ATMOS_COMPONENTS_HELMFILE_CLUSTER_NAME_PATTERN' ENV var cluster_name_pattern: "{namespace}-{tenant}-{environment}-{stage}-eks-cluster" stacks: # Can also be set using 'ATMOS_STACKS_BASE_PATH' ENV var, or '--config-dir' and '--stacks-dir' command-line arguments # Supports both absolute and relative paths base_path: "stacks" # Can also be set using 'ATMOS_STACKS_INCLUDED_PATHS' ENV var (comma-separated values string) included_paths: - "orgs/**/*" # Can also be set using 'ATMOS_STACKS_EXCLUDED_PATHS' ENV var (comma-separated values string) excluded_paths: - "**/_defaults.yaml" # Can also be set using 'ATMOS_STACKS_NAME_PATTERN' ENV var name_pattern: "{tenant}-{environment}-{stage}" workflows: # Can also be set using 'ATMOS_WORKFLOWS_BASE_PATH' ENV var, or '--workflows-dir' command-line argument # Supports both absolute and relative paths base_path: "stacks/workflows" logs: # Can also be set using 'ATMOS_LOGS_FILE' ENV var, or '--logs-file' command-line argument # File or standard file descriptor to write logs to # Logs can be written to any file or any standard file descriptor, including `/dev/stdout`, `/dev/stderr` and `/dev/null` file: "/dev/stderr" # Supported log levels: Trace, Debug, Info, Warning, Off # Can also be set using 'ATMOS_LOGS_LEVEL' ENV var, or '--logs-level' command-line argument level: Info validate: # The configuration settings for the editorconfig-checker. editorconfig: # A list of file paths or patterns to exclude from checks. exclude: [] # If set to true, the default ignore patterns (like .git/*) will not be applied. ignore_defaults: false # Runs the checker without making any changes or producing output, useful for testing configuration. dry_run: false # Specifies the output format. Options: "default", "json". format: "default" # Enables/Disables colored output in the terminal if . color: true # Disables checking for trailing whitespace at the end of lines. disable_trim_trailing_whitespace: false # Disables checking for consistent line endings (e.g., LF vs. CRLF). disable_end_of_line: false # Disables checking for the presence of a newline at the end of files. disable_insert_final_newline: false # Disables checking for consistent indentation style (e.g., tabs or spaces). disable_indentation: false # Disables checking for consistent indentation size (e.g., 2 spaces or 4 spaces). disable_indent_size: false # Disables checking for lines exceeding a maximum length. disable_max_line_length: false # Custom CLI commands commands: - name: tf description: Execute 'terraform' commands # subcommands commands: - name: plan description: This command plans terraform components arguments: - name: component description: Name of the component flags: - name: stack shorthand: s description: Name of the stack required: true env: - key: ENV_VAR_1 value: ENV_VAR_1_value - key: ENV_VAR_2 # 'valueCommand' is an external command to execute to get the value for the ENV var # Either 'value' or 'valueCommand' can be specified for the ENV var, but not both valueCommand: echo ENV_VAR_2_value # steps support Go templates steps: - atmos terraform plan {{ .Arguments.component }} -s {{ .Flags.stack }} # Note: Using 'tf-custom' instead of 'terraform' to avoid conflict with the built-in # terraform command which already has a --stack flag. Custom subcommands cannot # redefine flags that exist on their parent command. - name: tf-custom description: Execute custom 'terraform' commands # subcommands commands: - name: provision description: This command provisions terraform components arguments: - name: component description: Name of the component flags: - name: stack shorthand: s description: Name of the stack required: true # ENV var values support Go templates env: - key: ATMOS_COMPONENT value: "{{ .Arguments.component }}" - key: ATMOS_STACK value: "{{ .Flags.stack }}" steps: - atmos terraform plan $ATMOS_COMPONENT -s $ATMOS_STACK - atmos terraform apply $ATMOS_COMPONENT -s $ATMOS_STACK - name: show description: Execute 'show' commands # subcommands commands: - name: component description: Execute 'show component' command arguments: - name: component description: Name of the component flags: - name: stack shorthand: s description: Name of the stack required: true # ENV var values support Go templates and have access to {{ .ComponentConfig.xxx.yyy.zzz }} Go template variables env: - key: ATMOS_COMPONENT value: "{{ .Arguments.component }}" - key: ATMOS_STACK value: "{{ .Flags.stack }}" - key: ATMOS_TENANT value: "{{ .ComponentConfig.vars.tenant }}" - key: ATMOS_STAGE value: "{{ .ComponentConfig.vars.stage }}" - key: ATMOS_ENVIRONMENT value: "{{ .ComponentConfig.vars.environment }}" - key: ATMOS_IS_PROD value: "{{ .ComponentConfig.settings.config.is_prod }}" # If a custom command defines 'component_config' section with 'component' and 'stack', 'atmos' generates the config for the component in the stack # and makes it available in {{ .ComponentConfig.xxx.yyy.zzz }} Go template variables, # exposing all the component sections (which are also shown by 'atmos describe component' command) component_config: component: "{{ .Arguments.component }}" stack: "{{ .Flags.stack }}" # Steps support using Go templates and can access all configuration settings (e.g. {{ .ComponentConfig.xxx.yyy.zzz }}) # Steps also have access to the ENV vars defined in the 'env' section of the 'command' steps: - 'echo Atmos component from argument: "{{ .Arguments.component }}"' - 'echo ATMOS_COMPONENT: "$ATMOS_COMPONENT"' - 'echo Atmos stack: "{{ .Flags.stack }}"' - 'echo Terraform component: "{{ .ComponentConfig.component }}"' - 'echo Backend S3 bucket: "{{ .ComponentConfig.backend.bucket }}"' - 'echo Terraform workspace: "{{ .ComponentConfig.workspace }}"' - 'echo Namespace: "{{ .ComponentConfig.vars.namespace }}"' - 'echo Tenant: "{{ .ComponentConfig.vars.tenant }}"' - 'echo Environment: "{{ .ComponentConfig.vars.environment }}"' - 'echo Stage: "{{ .ComponentConfig.vars.stage }}"' - 'echo settings.spacelift.workspace_enabled: "{{ .ComponentConfig.settings.spacelift.workspace_enabled }}"' - 'echo Dependencies: "{{ .ComponentConfig.deps }}"' - 'echo settings.config.is_prod: "{{ .ComponentConfig.settings.config.is_prod }}"' - 'echo ATMOS_IS_PROD: "$ATMOS_IS_PROD"' # Integrations integrations: # Atlantis integration # https://www.runatlantis.io/docs/repo-level-atlantis-yaml.html atlantis: # Path and name of the Atlantis config file 'atlantis.yaml' # Supports absolute and relative paths # All the intermediate folders will be created automatically (e.g. 'path: /config/atlantis/atlantis.yaml') # Can be overridden on the command line by using '--output-path' command-line argument in 'atmos atlantis generate repo-config' command # If not specified (set to an empty string/omitted here, and set to an empty string on the command line), the content of the file will be dumped to 'stdout' # On Linux/macOS, you can also use '--output-path=/dev/stdout' to dump the content to 'stdout' without setting it to an empty string in 'atlantis.path' path: "atlantis.yaml" # Config templates # Select a template by using the '--config-template ' command-line argument in 'atmos atlantis generate repo-config' command config_templates: config-1: version: 3 automerge: true delete_source_branch_on_merge: true parallel_plan: true parallel_apply: true allowed_regexp_prefixes: - dev/ - staging/ - prod/ # Project templates # Select a template by using the '--project-template ' command-line argument in 'atmos atlantis generate repo-config' command project_templates: project-1: # generate a project entry for each component in every stack name: "{tenant}-{environment}-{stage}-{component}" workspace: "{workspace}" dir: "{component-path}" terraform_version: v1.2 delete_source_branch_on_merge: true autoplan: enabled: true when_modified: - "**/*.tf" - "varfiles/$PROJECT_NAME.tfvars.json" apply_requirements: - "approved" # Workflow templates # https://www.runatlantis.io/docs/custom-workflows.html#custom-init-plan-apply-commands # https://www.runatlantis.io/docs/custom-workflows.html#custom-run-command workflow_templates: workflow-1: plan: steps: - run: terraform init -input=false # When using workspaces, you need to select the workspace using the $WORKSPACE environment variable - run: terraform workspace select $WORKSPACE || terraform workspace new $WORKSPACE # You must output the plan using '-out $PLANFILE' because Atlantis expects plans to be in a specific location - run: terraform plan -input=false -refresh -out $PLANFILE -var-file varfiles/$PROJECT_NAME.tfvars.json apply: steps: - run: terraform apply $PLANFILE # GitHub integration github: gitops: opentofu-version: 1.8.4 terraform-version: 1.9.8 infracost-enabled: false # Validation schemas (for validating atmos stacks and components) schemas: # https://json-schema.org jsonschema: # Can also be set using 'ATMOS_SCHEMAS_JSONSCHEMA_BASE_PATH' ENV var, or '--schemas-jsonschema-dir' command-line argument # Supports both absolute and relative paths base_path: "stacks/schemas/jsonschema" # https://www.openpolicyagent.org opa: # Can also be set using 'ATMOS_SCHEMAS_OPA_BASE_PATH' ENV var, or '--schemas-opa-dir' command-line argument # Supports both absolute and relative paths # If not specified in `atmos.yaml` in `schemas.atmos.manifest`, an embedded schema will be used base_path: "stacks/schemas/opa" # JSON Schema to validate Atmos manifests # https://atmos.tools/cli/schemas/ # https://atmos.tools/cli/commands/validate/stacks/ # https://atmos.tools/quick-start/advanced/configure-validation/ # https://json-schema.org/draft/2020-12/release-notes # https://www.schemastore.org/json # https://github.com/SchemaStore/schemastore # atmos: # Can also be set using 'ATMOS_SCHEMAS_ATMOS_MANIFEST' ENV var, or '--schemas-atmos-manifest' command-line argument # Supports both absolute and relative paths (relative to the `base_path` setting in `atmos.yaml`) # Supports URLs like https://atmos.tools/schemas/atmos/atmos-manifest/1.0/atmos-manifest.json # manifest: "stacks/schemas/atmos/atmos-manifest/1.0/atmos-manifest.json" # manifest: "https://atmos.tools/schemas/atmos/atmos-manifest/1.0/atmos-manifest.json" # `Go` templates in Atmos manifests # https://atmos.tools/core-concepts/stacks/templates # https://pkg.go.dev/text/template templates: settings: enabled: true evaluations: 1 # https://masterminds.github.io/sprig sprig: enabled: true # https://docs.gomplate.ca gomplate: enabled: true timeout: 5 # https://docs.gomplate.ca/datasources datasources: {} settings: # `list_merge_strategy` specifies how lists are merged in Atmos stack manifests. # Can also be set using 'ATMOS_SETTINGS_LIST_MERGE_STRATEGY' environment variable, or '--settings-list-merge-strategy' command-line argument # The following strategies are supported: # `replace`: Most recent list imported wins (the default behavior). # `append`: The sequence of lists is appended in the same order as imports. # `merge`: The items in the destination list are deep-merged with the items in the source list. # The items in the source list take precedence. # The items are processed starting from the first up to the length of the source list (the remaining items are not processed). # If the source and destination lists have the same length, all items in the destination lists are # deep-merged with all items in the source list. list_merge_strategy: replace # Terminal settings for displaying content terminal: max_width: 120 # Maximum width for terminal output pager: false # Pager setting for all terminal output unicode: true # Use unicode characters syntax_highlighting: enabled: true formatter: terminal # Output formatter (e.g., terminal, html) theme: dracula # Highlighting theme line_numbers: true # Display line numbers wrap: false # Wrap long lines # Markdown element styling markdown: document: color: "${colors.text}" heading: color: "${colors.primary}" bold: true code_block: color: "${colors.secondary}" margin: 1 link: color: "${colors.primary}" underline: true strong: color: "${colors.secondary}" bold: true emph: color: "${colors.muted}" italic: true docs: generate: # Generate README in current working directory readme: base-dir: . input: - "./README.yaml" # To Do: template can be a remote URL/github, using this local for testing template: "https://raw.githubusercontent.com/cloudposse/.github/5a599e3b929f871f333cb9681a721d26b237d8de/README.md.gotmpl" # The final README output: "./README.md" terraform: source: src/ enabled: false format: "markdown" show_providers: false show_inputs: true show_outputs: true sort_by: "name" hide_empty: false indent_level: 2 toolchain: registries: # Default Aqua registry - name: aqua type: aqua priority: 10 version: check: enabled: true timeout: 1000 # ms frequency: 1h