#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.