Using helm from terraform

terraform helm resource

2 min read | by Jordi Prats

When it comes into configuring a helm chart using terraform we can configure it's values in two different ways: By using set or by pushing a template with it's values. Let's take a look:

Maybe the more straightforward way is by simply setting the variables to it's value using a set block like follows:

resource "helm_release" "datadog" {  name = "datadog"  repository = "https://helm.datadoghq.com"  chart = "datadog"  version = "2.10.1"  timeout = 600  namespace = var.namespace  set {  name = "datadog.site"  value = var.datadog_site  } } 

Even though it's a nice way for setting a handful of values, as we need to push more values the terraform code becomes messier. Pushing a values.yaml template with the variables we want to set (or transform) is just as easy as setting a value using set:

resource "helm_release" "datadog" {  name = "datadog"  repository = "https://helm.datadoghq.com"  chart = "datadog"  version = "2.10.1"  timeout = 600  namespace = var.namespace  values = [  templatefile("${path.module}/datadog.yaml", {  DATADOG_SITE = var.datadog_site,  })  ] } 

The template file will have to contain the values that the helm chart expects in yaml format. We can set variable using the ${} syntax. For example:

datadog:  apiKey: ${DATADOG_SITE} 

Posted on 25/03/2021