Terraform Azure web apps, how to dynamically create app_settings

Hi all,

I have variables defined in my tfvars file for both site configs and app settings for creating a webapp:

webapp_app_settings [
  { configname = "webapp_website_run_from_package",        configvalue = 1 },
  { configname = "webapp_website_enable_sync_update_site", configvalue = 1 }
]
webapp_site_configs [
  { configname = "webapp_https_only",                      configvalue = true },
  { configname = "webapp_client_affinity_enabled",         configvalue = false },
  { configname = "webapp_client_cert_enabled",             configvalue = false },
  { configname = "webapp_enabled",                         configvalue = true },
  { configname = "webapp_always_on",                       configvalue = false },
  { configname = "webapp_use_32_bit_worker_process",       configvalue = true },
  { configname = "webapp_dotnet_framework_version",        configvalue = "v4.0" }, 
  { configname = "webapp_detailed_error_messages_enabled", configvalue = true },
  { configname = "webapp_remote_debugging_enabled",        configvalue = false }
]

variable definitions:

variable "webapp_site_configs" {
  type = list(object({
    configname    = string
    configvalue   = string
  }))
}

variable "webapp_app_settings" {
  type = list(object({
    configname    = string
    configvalue   = string
  }))
}

I am hoping that I can use the below to create the app settings and site configs in a for loop in my webapp module.

extract from module:

 resource "azurerm_app_service" "webapp" {
      resource_group_name     = var.res_group_name
      location                = var.res_group_location
      app_service_plan_id     = var.service_plan_id
      name                    = var.webapp_service_name
      app_service_name        = var.webapp_app_service_name
      https_only              = var.webapp_https_only
      client_affinity_enabled = var.webapp_client_affinity_enabled
      enabled                 = var.webapp_enabled
  dynamic "app_settings" {
   for_each = var.webapp_app_settings 
    content {
      .......
  }
  dynamic "site_config" {
   for_each = var.webapp_site_configs 
    content {
      .......
  }

Is this at all possible possible and if so how can it be done ?

Thanks in advance

Answer:

tfvars file:

webapp_app_settings ={
    AB = "6.9.1",
	CD = "true",
	EF = 1
}

variables.tf:

variable "webapp_app_settings" { type = map }

module "webapp" {
  locals {
  loc_app_settings = merge(
                        { "APPINSIGHTS_INSTRUMENTATIONKEY" : module.appinsights.o_appinsights_instrumentation_key }, 
                          var.webapp_app_settings 
                          )   
}

  source                                   = "../../../../TFLibrary/modules/webapp"
   ...
  p_webapp_app_settings                    = local.loc_app_settings
   ...
}

Libarary module

resource "azurerm_app_service" "webapp" {
  resource_group_name     = var.webapp_res_group_name
  location                = var.webapp_res_group_location
  app_service_plan_id     = var.webapp_service_plan_id

  name                    = var.webapp_app_service_name
  https_only              = var.webapp_https_only
  client_affinity_enabled = var.webapp_client_affinity_enabled
  client_cert_enabled     = var.webapp_client_cert_enabled
  enabled                 = var.webapp_enabled

  app_settings            = var.webapp_app_settings