Терраформирование сообщает об ошибке в локальных и переменных в атрибуте

#terraform

Вопрос:

У меня есть lookups.tf файл со следующим содержанием

 locals {
  roles_mapping = {
    web    = "we"
    app    = "as"
    db     = "db"
    queue  = "qu"
    stream = "st"
  }

  environment_lookup = {
    dev  = "d"
    test = "t"
    int  = "i"
    prod = "p"
    prd  = "p"
    uat  = "a"
    poc  = "d"
    dr   = "r"
    lab  = "l"
  }

  region_lookup = {
    "Australia East"      = "aae"
    "Australia Southeast" = "aas"
  }

  region_pairs = {
    "Australia East"      = "Australia Southeast"
    "Australia Southeast" = "Australia East"
  }

  lookup_result = lookup(var.environment_lookup, var.environment)

  tags = merge(
    data.azurerm_resource_group.tf-azrg.tags, {
      Directory      = "bento.com",
      PrivateDNSZone = var.private_dns_zone,
      Immutable      = "False",
      ManagedOS      = "True",
    }
  )
}

data "azurerm_log_analytics_workspace" "log_analytics" {
  name                = "abc-az-lad1"
  resource_group_name = "abc-dev-aae"
}
 

Теперь у меня есть файл под названием variables.tf

 variable "environment" {
  description = "The name of environment for the AKS Cluster"
  type        = string
  default     = "dev"
}

variable "identifier" {
  description = "The identifier for the AKS Cluster"
  type        = number
  default     = 001
}
 

Теперь я хочу сослаться lookups.tf и variable.tf по названию в main.tf как показано ниже

 resource "azurerm_log_analytics_workspace" "tf-alaw" {
  name                = var.tla-la-local.lookup_result-var.identifier
  location            = data.azurerm_resource_group.tf-azrg.location
  resource_group_name = data.azurerm_resource_group.tf-azrg.name
  sku                 = var.la_sku
  retention_in_days   = 30
}
 

Однако я получаю ошибку, подобную приведенной ниже:

 Error: Reference to the undeclared input variable

  on ......terraform-azurerm-akslookups.tf line 32, in locals:
  32:   lookup_result = lookup(var.environment_lookup, var.environment)

An input variable with the name "environment_lookup" has not been declared.
This variable can be declared with a variable "environment_lookup" {} block.

Error: Reference to the undeclared input variable

  on ......terraform-azurerm-aksmain.tf line 2, in resource "azurerm_log_analytics_workspace" "tf-alaw":
   2:   name                = var.tla-la-local.lookup_result-var.identifier

An input variable with the name "tla-la-local" has not been declared. This
variable can be declared with a variable "tla-la-local" {} block.
 

Обратите внимание, что имя ниже, как я ожидаю, var.tla относится к переменной, затем к строке/тексту-la — теперь локально.lookup_result — это значение из локальных, а затем снова текст, наконец, ссылающийся на другую переменную var.идентификатор

Ответ №1:

При locals определении блока необходимо использовать другой синтаксис. Это должно быть добавлено вместо того, что у вас есть в настоящее время:

 lookup_result = lookup(local.environment_lookup, var.environment)
 

Более подробная информация и примеры здесь: https://www.terraform.io/docs/language/values/locals.html#using-local-values.

EDIT1: Я только что увидел вашу заметку под выводом ошибок. Таким образом, при объединении нескольких переменных вам все равно придется использовать «старый» синтаксис, т. Е. аналогичный тому, который использовался в Terraform 0.11.x. Вот как должно выглядеть это значение:

 "${var.tla}-la-${local.lookup_result}-${var.identifier}"
 

Комментарии:

1. Я понял свою ошибку. То, что я узнал, — это использование старого синтаксиса для объединения, а второе-это ссылки на локальные объекты с помощью local. и переменные, на которые нужно ссылаться с помощью var.