Terragrunt – how to deal with raw JSON

I’m using terragrunt to manage okta resources. I’m using okta_user resource and I want to add custom_profile_attributes to my variables. In my vars.tf file I have:

variable "custom_profile_attributes" {
  description = "custom profile attributes"
  type = map(any)
  default = {}
}

and in main.tf:

resource "okta_user" "user" {
  first_name                = var.first_name
  last_name                 = var.last_name
  login                     = var.email
  email                     = var.email
  status                    = var.status
  custom_profile_attributes = var.custom_profile_attributes
}

and my terragrunt.hcl:

inputs = {
  first_name  = title(local.full_name[0])
  last_name   = title(local.full_name[1])
  email       = "${local.full_name[0]}.${local.full_name[1]}@company.com"
  status      = "ACTIVE"
  groups      = [dependency.team.outputs.okta_group_id]
  admin_roles = ["USER_ADMIN"]
  lifecycle = {
    ignore_changes = ["admin_roles"]
  }
  custom_profile_attributes = {
    "tenant_id" : "ssotest",
  }
}

and while running terragrunt apply I get:

│ Error: Incorrect attribute value type
│ 
│   on main.tf line 7, in resource "okta_user" "user":
│    7:   custom_profile_attributes = var.custom_profile_attributes
│     ├────────────────
│     │ var.custom_profile_attributes is a map of dynamic
│ 
│ Inappropriate value for attribute "custom_profile_attributes": string
│ required.

And I can see that string is required, but even changing type to string I get the same error. Can somebody tell me what is wrong here?

>Solution :

You can use jsonencode built-in function for this. The variable would then stay of type map(any), but you would provide it like this:

  custom_profile_attributes = {
    tenant_id = "ssotest"
  }

Then, in the Okta resource, you would do the following:

resource "okta_user" "user" {
  first_name                = var.first_name
  last_name                 = var.last_name
  login                     = var.email
  email                     = var.email
  status                    = var.status
  custom_profile_attributes = jsonencode(var.custom_profile_attributes)
}

Leave a Reply