Search code examples
kubernetesterraformkubectl

terraform-kubernetes-provider how to create secret similar to a secret created from a file


I am trying to simulate the kubectl commands in TF.

Kubectl command

kubectl create secret generic cloud-access \
  --from-file=basic.txt=$TUTORIAL_HOME/creds-sasl-user.txt

Contents of creds-sasl-user.txt

username=<api-key>
password=<api-secret>

In my Terraform run, I have the API key and API secret created but I am not sure how I can simulate the exact behaviour. This is what I have so far but doesn't seems correct to me

resource "kubernetes_secret" "k8s_secret" {
  metadata {
    namespace = var.namespace
    name      = var.secret_name
  }
  data = {
    basic.txt           = "username=${var.api_key}password=${var.api_secret}"
  }
}

Solution

  • As per the official TF documentation, You can use <<EOT to pass multi line string like this:

    resource "kubernetes_secret" "k8s_secret" {
      metadata {
        namespace = "default"
        name      = "test"
      }
      data = {
      "basic.txt"           = <<EOT
    username=<api-key>
    password=<api-secret>
      EOT
      }
    }
    

    Don't forget to place Secret's key (basic.text) within the quotes before applying.