Карта слияния в определении модуля Terraform - PullRequest
0 голосов
/ 09 июля 2019

Я представляю приложение-функцию Azure как модуль в Terraform, в котором я хочу, чтобы модуль позволял пользователю расширять параметр конфигурации:

resource "azurerm_function_app" "test" {
  name                      = "${var.prefix}-listener"
  resource_group_name       = "${var.resource_group_name}"
  location                  = "${var.resource_group_location}"
  app_service_plan_id       = "${var.app_service_plan_id}"
  storage_connection_string = "${var.storage_account_connection_string}"

  app_settings = {
    HASH = "${data.archive_file.test.output_base64sha256}"
    WEBSITE_USE_ZIP = "https://${var.storage_account_name}.blob.core.windows.net/${azurerm_storage_container.test.name}/${azurerm_storage_blob.test.name}${data.azurerm_storage_account_sas.test.sas}"
  }

  site_config {
    always_on = true
  }
}

Однако в этом примере app_settings является фиксированным, и я бы хотел, чтобы было возможно расширить эту карту. Что-то вроде:

  app_settings = ${merge({
    HASH = "${data.archive_file.test.output_base64sha256}"
    WEBSITE_USE_ZIP = "https://${var.storage_account_name}.blob.core.windows.net/${azurerm_storage_container.test.name}/${azurerm_storage_blob.test.name}${data.azurerm_storage_account_sas.test.sas}"
  }, ${var.app_settings})}

Я понял эту идею, прочитав функцию слияния . Однако я получаю Неверное выражение Ошибка.

Какой здесь правильный синтаксис?

1 Ответ

2 голосов
/ 09 июля 2019

Похоже, { и } вызывают проблемы с интерполяцией строк. Вы можете изменить свой код на

app_settings = "${merge(
    map("HASH","${data.archive_file.test.output_base64sha256}"),
    map("WEBSITE_USE_ZIP","https://${var.storage_account_name}.blob.core.windows.net/${azurerm_storage_container.test.name}"),/${azurerm_storage_blob.test.name}${data.azurerm_storage_account_sas.test.sas}", 
    var.app_settings}"

Надеюсь, это решит вашу проблему.

...