Skip to main content
Version: v0.16.x

Context Variables

This reference documents all context variables available in ComponentType and Trait templates. These variables provide access to component metadata, parameters, workload specifications, and platform configuration.

ComponentType Variables​

The following variables are available in ComponentType resource templates.

metadata​

Platform-computed metadata for resource generation.

FieldTypeDescription
metadata.namestringBase name for generated resources (e.g., my-service-dev-a1b2c3d4)
metadata.namespacestringTarget namespace for resources
metadata.componentNamespacestringTarget namespace of the component
metadata.componentNamestringName of the component
metadata.componentUIDstringUnique identifier of the component
metadata.projectNamestringName of the project
metadata.projectUIDstringUnique identifier of the project
metadata.environmentNamestringName of the environment (e.g., development, production)
metadata.environmentUIDstringUnique identifier of the environment
metadata.dataPlaneNamestringName of the data plane
metadata.dataPlaneUIDstringUnique identifier of the data plane
metadata.labelsmapCommon labels to add to all resources
metadata.annotationsmapCommon annotations to add to all resources
metadata.podSelectorsmapPlatform-injected selectors for pod identity

Usage:

metadata:
name: ${metadata.name}
namespace: ${metadata.namespace}
labels: ${metadata.labels}
spec:
selector:
matchLabels: ${metadata.podSelectors}

parameters​

Component parameters from Component.spec.parameters with schema defaults applied. Use for static configuration that doesn't change across environments.

# Access parameters defined in schema.parameters
replicas: ${parameters.replicas}
port: ${parameters.port}

# Nested parameters
database:
host: ${parameters.database.host}
port: ${parameters.database.port}

envOverrides​

Environment-specific overrides from ReleaseBinding.spec.componentTypeEnvOverrides with schema defaults applied. Use for values that vary per environment (resources, replicas, etc.).

# Access environment-specific values
replicas: ${envOverrides.replicas}
resources:
limits:
cpu: ${envOverrides.resources.cpu}
memory: ${envOverrides.resources.memory}

workload​

Workload specification from the Workload resource.

FieldTypeDescription
workload.containerobjectContainer configuration
workload.container.imagestringContainer image
workload.container.command[]stringContainer command
workload.container.args[]stringContainer arguments

Usage:

containers:
- name: main
image: ${workload.container.image}
command: ${workload.container.command}
args: ${workload.container.args}

configurations​

Configuration and secret references extracted from the workload container.

FieldTypeDescription
configurations.configs.envs[]objectEnvironment variable configs (each has name, value)
configurations.configs.files[]objectFile configs (each has name, mountPath, value)
configurations.secrets.envs[]objectSecret env vars (each has name, value, remoteRef)
configurations.secrets.files[]objectSecret files (each has name, mountPath, remoteRef)

The remoteRef object contains: key, property (optional), version (optional).

Usage:

# Access config envs
env: |
${configurations.configs.envs.map(e, {"name": e.name, "value": e.value})}

# Check if there are config files
includeWhen: ${has(configurations.configs.files) && configurations.configs.files.size() > 0}

See Configuration Helpers for helper functions that simplify working with configurations.

dataplane​

Data plane configuration.

FieldTypeDescription
dataplane.secretStorestringName of the ClusterSecretStore for external secrets
dataplane.publicVirtualHoststringPublic virtual host for external access

Usage:

# ExternalSecret configuration
spec:
secretStoreRef:
name: ${dataplane.secretStore}
kind: ClusterSecretStore

# HTTPRoute hostname
hostnames:
- ${metadata.name}.${dataplane.publicVirtualHost}

Trait Variables​

Traits have access to all the same variables as ComponentTypes, plus trait-specific variables.

trait​

Trait-specific metadata.

FieldTypeDescription
trait.namestringName of the trait (e.g., persistent-volume)
trait.instanceNamestringUnique instance name within the component (e.g., data-storage)

Usage:

# Use trait instance name for resource naming
metadata:
name: ${metadata.name}-${trait.instanceName}

# Use trait name in labels
labels:
trait: ${trait.name}
instance: ${trait.instanceName}

parameters (Traits)​

Trait instance parameters from Component.spec.traits[].parameters with schema defaults applied.

# Access trait-specific parameters
volumeMounts:
- name: ${parameters.volumeName}
mountPath: ${parameters.mountPath}

envOverrides (Traits)​

Environment-specific overrides from ReleaseBinding.spec.traitOverrides[instanceName] with schema defaults applied.

# Access environment-specific trait values
resources:
requests:
storage: ${envOverrides.size}
storageClassName: ${envOverrides.storageClass}

Variable Availability Summary​

VariableComponentTypeTrait createsTrait patches
metadata.*YesYesYes
parametersYesYesYes
envOverridesYesYesYes
workload.*YesNoNo
configurations.*YesNoNo
dataplane.*YesYesYes
trait.*NoYesYes
resource (patch target)NoNoYes (in where)

Examples​

ComponentType Using All Variables​

apiVersion: openchoreo.dev/v1alpha1
kind: ComponentType
metadata:
name: web-service
spec:
workloadType: deployment
resources:
- id: deployment
template:
apiVersion: apps/v1
kind: Deployment
metadata:
name: ${metadata.name}
namespace: ${metadata.namespace}
labels: ${metadata.labels}
spec:
replicas: ${envOverrides.replicas}
selector:
matchLabels: ${metadata.podSelectors}
template:
metadata:
labels: ${metadata.podSelectors}
spec:
containers:
- name: main
image: ${workload.container.image}
ports:
- containerPort: ${parameters.port}
envFrom: ${configurations.toContainerEnvFrom()}

Trait Using Trait-Specific Variables​

apiVersion: openchoreo.dev/v1alpha1
kind: Trait
metadata:
name: persistent-volume
spec:
creates:
- template:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: ${metadata.name}-${trait.instanceName}
namespace: ${metadata.namespace}
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: ${envOverrides.storageClass}
resources:
requests:
storage: ${envOverrides.size}