Helm is a package manager for Kubernetes. Like yum and apt for the Linux. As the usage of the Kubernetes goes higher for seamless application, learning Helm seems important to fit in the future of Software Development. Hence we are going to see the series of tutorials on Helm in digitalvarys.com. In our previous article, we discussed what is Helm Chart Built-in Objects and Values For Template. Along with that, we have discussed a sample Deployment using The Helm chart. In this article, we will discuss what is Helm Template Functions and Pipelines with examples.
Table of Contents
Workspace Creation
Create a folder structure using CLI as the first step and it will create the folders as we discussed in our previous article.
- Chart.yaml
- values.yaml
- template/
- charts/
Then, we are going to create a sample deployment by deploying ConfigMaps into the Kubernetes cluster.
Template Functions
Edit the value file and add some additional values.
projectNumber: 12345
systemuser: cicd-admin
infra:
availability-zone: 1, 2, 3
regions: us-east, us-west, ap-south
And those can be accessed by using the derivatives in the Template file as discussed in our previous article.
apiVersion: v1
kind: ConfigMap
metadata:
name: my-chart-configmap
data:
my-key: "my-value"
systemuser: {{ .Values.systemuser }}
projectNumber: {{ .Values.projectNumber }}
availability-zone: {{quote .Values.availability-zone }}
regions: {{ upper .Values.regions }}
So, Here quote
and upper
are the inbuilt helm template function. Where quote
function will add and surrounded with quotes on the value that is
going to derive from the values.yaml
file. So, That will look like ‘1, 2, 3’.
And the upper
will convert the derived variable into Uppercase. So, That will look like US-EAST, US-WEST, AP-SOUTH
. So like this we have many functions and they are available in Go Templates (https://pkg.go.dev/text/template#hdr-Functions) and Sprig Templates (https://masterminds.github.io/sprig/). A few Important functions are:
trim
– This will remove any space in the string value.add
– This will add the values and if you call this function, you need to pass minimum two integer.mul
– This will multiply the values and if you call this function, you need to pass minimum two integer Float Variables.addf
– This will add the values and if you call this function, you need to pass minimum two Float Variables.mulf
– This will multiply the values and if you call this function, you need to pass minimum two Float Variables.now
– This will show current date. Use this in conjunction with other date functions.date
– This will formats the date as YEAR-MONTH-DAYfromJson
– decodes a JSON document into a structure.toJson
– encodes an item into a JSON stringtoPrettyJson
– encodes an item into a pretty (indented) JSON string.toRawJson
– encodes an item into JSON string with HTML charactersb64enc
– Encode with Base64b64dec
– decode with Base64list
– Create a list of integers, it expects list of values.uniq
– Generate a list with all of the duplicates removed.env
– This one reads an environment variable:
So, Run a --dry-run
and check the manifest and you can find the values are replaced as per the function we mentioned in the values section.
Template Pipeline.
Pipeline and Default Values are another useful feature in Templating. Pipelines are derived from the Unix Pipeline concept to chaining together a set of commands and functions to process in sequences. Let us see how this is done.
apiVersion: v1
kind: ConfigMap
metadata:
name: my-chart-configmap
data:
my-key: "my-value"
systemuser: {{ .Values.systemuser }}
projectNumber: {{ .Values.projectNumber }}
availability-zone: {{quote .Values.availability-zone }}
regions: {{ upper .Values.regions }}
derived-variable: {{ now | date “2021-09-21” | quote }}
In the above example, derived-variable
is an example of the pipeline concept. For example, now
is the function that will give you the current DateTime then it will be formatted in the given format and then the function quote
will add the quotes to the DateTime.
Now, let us see the default values in the pipeline concept. Assume we are going to add the environment name from the values file and add the default value in the pipeline.
Environment: {{ .Values.Env | default “stage” | quote}}
So in the above line, the Env
value will be taken from the Variable file. And if the value file is not having the value in the file, then the default value will be appended. That is stage
. If you add the Env Value while running the command, That will be appended in the template file but not the default. Then, the same will be quoted by quote
function.
So, Run a --dry-run
and check the manifest and you can find the values are replaced as per the function we mentioned in the values section.
Conclusion
In this article, we discussed discuss what is Helm Template Functions and Pipelines with examples. In our upcoming article, we will discuss dry run and debug mode, Template, Subcharts, control flow, scoping, variables, and more. Stay tuned and subscribe DigitalVarys for more articles and study materials on DevOps, Agile, DevSecOps, and App Development.
Certified Cloud Automation Architect and DevSecOps expert, skilled in optimizing IT workflows with Six Sigma and Value Stream Management. Proficient in both technical and leadership roles, I deliver robust solutions and lead teams to success.