ArgoCD bootstrapping with terraform in Azure Pipeline

3/5/2022

I am trying to deploy ArgoCD and applications located in subfolders through Terraform in an AKS cluster.

This is my Folder structure tree:

I'm using app of apps approach, so first I will deploy ArgoCD (this will manage itself as well) and later ArgoCD will let me SYNC the cluster-addons and application manually once installed.

apps
   cluster-addons
      AKV2K8S
      Cert-Manager
      Ingress-nginx
   application
      application-A
argocd
   override-values.yaml
   Chart

When I run the command "helm install ..." manually in the AKS cluster everything is installed fine. ArgoCD is installed and later when I access ArgoCD I see that rest of applications are missing and I can sync them manually.

However, If I want to install it through Terraform only ArgoCD is installed but looks like it does not "detect" the override_values.yaml file:

i mean, ArgoCD and ArgoCD application set controller are installed in the cluster but ArgoCD does not "detect" the values.yaml files that are customized for my AKS cluster. If I run "helm install" manually on the cluster everything works but not through Terraform

resource "helm_release" "argocd_applicationset" {
  name       = "argocd-applicationset"
  repository = https://argoproj.github.io/argo-helm
  chart      = "argocd-applicationset"
  namespace  = "argocd"
  version    = "1.11.0"
}

resource "helm_release" "argocd" {
  name       = "argocd"
  repository = https://argoproj.github.io/argo-helm
  chart      = "argo-cd"
  namespace  = "argocd"
  version    = "3.33.6"
  values = [
    "${file("values.yaml")}"
  ]

values.yaml file is located in the folder where I have the TF code to install argocd and argocd applicationset.

I tried to change the name of the file" values.yaml" to "override_values.yaml" but same issue.

I have many things changed into the override_values.yaml file so I cannot use "set" inside the TF code...

Also, I tried adding:

 values = [
    "${yamlencode(file("values.yaml"))}"
  ]

but I get this error in "apply" step in the pipeline:

error unmarshaling JSON: while decoding JSON: json: cannot unmarshal string into Go value of type map[string]interface {} "argo-cd:\r\n  ## ArgoCD configuration\r\n  ## Ref: https://github.com/argoproj/argo-cd\r\n

Probably because is not a JSON file? It does make sense to convert this file into a JSON one?

Any idea if I can pass this override values yaml file through terraform?

If not, please may you post a clear/full example with mock variables on how to do that using Azure pipeline?

Thanks in advance!

-- X T
argocd
azure
azure-devops
kubernetes
terraform

1 Answer

3/7/2022

The issue was with the values identation in TF code.

The issue was resolved when I resolve that:

resource "helm_release" "argocd_applicationset" {
  name       = "argocd-applicationset"
  repository = https://argoproj.github.io/argo-helm
  chart      = "argocd-applicationset"
  namespace  = "argocd"
  version    = "1.11.0"
}

resource "helm_release" "argocd" {
  name       = "argocd"
  repository = https://argoproj.github.io/argo-helm
  chart      = "argo-cd"
  namespace  = "argocd"
  version    = "3.33.6"
  values = [file("values.yaml")]

It is working fine also with quoting.

-- X T
Source: StackOverflow