!include
The !include
Atmos YAML function allows downloading local or remote files from different sources,
and assigning the file contents or individual values to the sections in Atmos stack manifests.
Usage
The !include
function can be called with either one or two parameters:
# Download the file and assign its content to the variable
!include <file-path>
# Download the file, filter the content using the YQ expression,
# and assign the result to the variable
!include <file-path> <yq-expression>
Arguments
file-path
Path to a local or remote file
yq-expression
- (Optional) YQ expression to retrieve individual values from the file
Examples
stack.yaml
Description
The YAML standard provides anchors and aliases, that allow you to reuse and reference pieces of your YAML file, making it more efficient and reducing duplication.
Atmos supports YAML anchors and aliases, but the biggest limitation is that they are only available within the file in which they are defined. You cannot reuse anchors across different files.
The !include
Atmos YAML function overcomes this limitation by allowing you to include the content or individual values
from different local and remote sources. The !include
function also provides the following features:
-
Supports local files with absolute and relative paths.
-
Supports the remote protocols provided by the
go-getter
library. -
Allows you to use YQ expressions to query and filter the content of the files to retrieve individual values.
-
Automatically detects the format of the files regardless of the file extensions. It supports files in JSON, YAML and HCL (
tfvars
) formats, and automatically converts them into correct YAML structures (simple and complex types like maps and lists are supported). All other files are returned unchanged, allowing you, for example, to include text and Markdown files as strings in Atmos manifests.
Supported File Protocols
The !include
function supports the following local file paths:
- absolute paths (e.g.,
/Users/me/Documents/values.yaml
) - paths relative to the current Atmos manifest where the
!include
function is executed (e.g.,./values.yaml
,../config/values.yaml
) - paths relative to the
base_path
defined inatmos.yaml
CLI config file (e.g.,stacks/catalog/vpc/defaults.yaml
)
To download remote files from different sources, the !include
function uses go-getter
(used by Terraform for downloading modules) and supports the following protocols:
tar
- Tar files, potentially compressed (tar.gz, tar.bz2, etc.)zip
- Zip fileshttp
- HTTP URLshttps
- HTTPS URLsgit
- Git repositories, which can be accessed via HTTPS or SSHhg
- Mercurial repositories, accessed via HTTP/S or SSHs3
- Amazon S3 bucket URLsgcs
- Google Cloud Storage URLsoci
- Open Container Initiative (OCI) imagesscp
- Secure Copy Protocol for SSH-based transferssftp
- SSH File Transfer Protocol
You can use Atmos Stack Manifest Templating in the !include
YAML function parameters.
Atmos processes the templates first, and then executes the !include
function, allowing you to provide the parameters to
the function dynamically.
Using YQ Expressions to retrieve individual values from files
To retrieve individual values from complex types such as maps and lists, or do any kind of filtering or querying, you can utilize YQ expressions.
For example:
- Retrieve the first item from a list
subnet_id1: !include <file-path> .private_subnet_ids[0]
- Read a key from a map
username: !include <file-path> .config_map.username
For more details, review the following docs:
Handling file paths and YQ expressions with spaces
If you have spaces in the file names or YQ expressions, enclose the file paths and YQ expressions in double quotes and use single quotes around the whole expression.
For example, on Windows:
vars:
values: !include '"~/My Documents/dev/values.yaml"'
config: !include '"~/My Documents/dev/config.json" "<yq-expression-with-spaces>"'
On macOS and Linux:
vars:
values: !include './values.yaml "<yq-expression-with-spaces>"'
description: !include '"component description.md"'