Skip to main content

!labels

The !labels YAML function returns the current component's own metadata.labels as a typed map (map[string]string), without the !template '{{ toJson .metadata.labels }}' boilerplate normally needed to get a properly-typed value out of a template expression.

Usage​

The !labels function takes no parameters:

components:
terraform:
vpc:
metadata:
labels:
cost-center: platform
compliance: sox
vars:
labels: !labels

Arguments​

This function takes no arguments. It reads metadata.labels from the component it's used on.

How It Works​

When processing the !labels YAML function, Atmos reads the labels field from the component's own metadata section (the same metadata.labels used for atmos list components --labels filtering) and returns it as a map[string]string. If metadata.labels is unset, !labels returns an empty map rather than an error, consistent with labels being optional everywhere in Atmos.

Bridging metadata.labels into vars.tags​

The most common use of !labels is to bridge Atmos's own metadata.labels (used for CLI categorization and filtering) into the map-shaped vars.tags/vars.labels that terraform-null-label-style modules expect for actual cloud resource tagging:

stack.yaml
components:
terraform:
vpc:
metadata:
tags: [production, networking]
labels:
Namespace: eg
Environment: prod
cost-center: platform
vars:
# var.tags (map, AWS/terraform-null-label convention) <- metadata.labels
tags: !labels
Why vars.tags: !labels isn't a typo

Terraform/AWS-style modules call their map-shaped resource-tagging input tags (var.tags map(string)) — the same "AWS calls a map a tag" naming that Atmos's tags-vs-labels standard distinguishes: a list is a tag, a map is a label. So !labels — which returns the map — is what belongs in a module's tags variable. !tags returns Atmos's own []string list and is for a different shape of consumer entirely.

Examples​

Bridging into a Terraform module​

stack.yaml
components:
terraform:
vpc:
metadata:
labels:
cost-center: platform
compliance: sox
vars:
tags: !labels

No Labels Set​

stack.yaml
components:
terraform:
rds:
vars:
# labels will be {} (empty map, not an error)
labels: !labels
  • !tags - Get the current component's own metadata.tags as a list
  • !labels.keys - Get the current component's metadata.labels keys
  • !labels.values - Get the current component's metadata.labels values