Parameters Interpolation
Note
as a shorthand, when we encounter deep yaml structures like the following:
parameters:
components:
nginx:
image: nginx:latest
Usually when we want to talk about the image subkey, we normally use either of the following:
parameters.components.nginx.imagecomponents.nginx.image
However, when used in parameter expansion, remember to:
- replace the
.with: - omit the
parametersinitial key which is implied - wrap it into the
${}variable interpolation syntax
The correct way to reference parameters.nginx.image then becomes ${components:nginx:image}.
The Inventory allows you to refer to other values defined elsewhere in the structure, using parameter interpolation.
Given the example:
parameters:
cluster:
location: europe
application:
location: ${cluster:location}
namespace: ${target_name}
target_name: dev
Here we tell Kapitan that:
namespaceshould take the same value defined intarget_nametarget_nameshould take the literal stringdevapplication.locationshould take the same value as defined incluster.location
It is important to notice that the inventory can refer to values defined in other classes, as long as they are imported by the target. So for instance with the following example
classes:
- project.production
parameters:
application:
location: ${cluster.location}
Here in this case application.location refers to a value location which has been defined elsewhere, perhaps (but not necessarily) in the project.production class.
Also notice that the class name (project.production) is not in any ways influencing the name or the structed of the yaml it imports into the file