Variable Interpolation
Variables within variables
Introduction
Oftentimes, you will need to define variables whose values depend on other variables.
To do this, you can use Value interpolation.
Starting with some examples always works best in these cases.
Some Examples
-
An environment variable identifier containing a complete identifier for your Bunnyshell environment.
{{ project.name }} : {{ org.name }} : {{ env.name }}
-
A variable that is using the identifier variable to create a logging content prefix.
{{ "now"|date("m/d/Y") }} {{ env.var.identifier|lower }}
-
A variable that interpolates a conditional value
{% if env.type == 'ephemeral' %}true{% else %}false{% endif %}
Where to use value interpolation
- Template variables
- Variables (at Project, Environment, or Component level)
- Environment variables groups
- Docker-compose Components or DockerImage Components
- Build arguments
- Build context
- Build Dockerfile
- Build target
- CustomDockerImage Components
- runnerImage
- runnerImageAuth.username and .password
- build commands
- environment variables
- Static applications
- build command
- build arguments
- Helm Components, Kubernetes Manifest Components, Terraform Components or Generic Components
- runnerImage
- environment variables
- deploy, destroy, start and stop commands
- Docker-compose Components
- dockerCompose.image
- environment variables
- pod.init_containers[].environment
- pod.sidecar_containers[].environment
- hosts[].hostname
- hosts[].path
- hosts[].externalAddress
- hosts[].k8s.ingress.className
- hosts[].k8s.ingress.annotations values
- files
- cronJobs[].command
- hpa.metrics[].matchLabels
- hpa.metrics[].describedObject.apiVersion, .kind and .name
- Remote dev
- kubernetes resource name
- kubernetes resource namespace
- container command
- container environment
Available interpolation values
- Organization variables
org.name
org.unique
- Project variables
project.name
- Template variables
template.vars.VAR_NAME
- Environment variables
env.unique
env.name
env.type - primary / ephemeral
env.base_domain
env.k8s.namespace
env.vars.NAME
- Environment variables groups
env.varGroups.GROUP_NAME
env.varGroups.GROUP_NAME.VAR_NAME
- Components variables
components.COMPONENT_NAME.name
components.COMPONENT_NAME.gitBranch
components.COMPONENT_NAME.ingress.hosts[*]
components.COMPONENT_NAME.ingress.hosts[*].url
components.COMPONENT_NAME.ingress.hosts[*].hostname
components.COMPONENT_NAME.ingress.hosts[*].path
The*
must be replaced with the index, eg.0
for the first host listed under thehosts
attribute ,1
for the second host and so on.components.COMPONENT_NAME.vars.NAME
components.COMPONENT_NAME.image
1components.COMPONENT_NAME.imageName
1components.COMPONENT_NAME.imageTag
1components.COMPONENT_NAME.exported.VAR_NAME
(only for Helm, Kubernetes, Terraform and Generic components)
Inside a component definition you can use directly
component.*
instead ofcomponents.COMPONENT_NAME.*
whereCOMPONENT_NAME
is the current component name. This is also shorter to write, and very handy in case you will rename the component and you want some values to be strictly tied to component name, likehost.hostname='{{ component.name }}-{{ env.base_domain }}
- Component containers variables
components.COMPONENT_NAME.containers.CONTAINER_NAME.vars.VAR_NAME
1 Helm, Kubernetes Manifest and Terraform components donβt have these. Generic component has these only when they have set .dockerCompose.build or .dockerCompose.image
Updated about 1 month ago