Spec-Zone.ru › OpenTofu 1.12

Локальные значения

Локальное значение присваивает имя выражению, чтобы вы могли использовать это имя несколько раз в модуле, не повторяя выражение.

Если вы знакомы с традиционными языками программирования, полезно сравнить модули с определениями функций:

  • Входные переменные похожи на аргументы функции.
  • Выходные значения похожи на возвращаемые функцией значения.
  • Локальные значения похожи на временные локальные переменные функции.
Примечание

Для краткости локальные значения часто называют просто «локальными», если смысл понятен из контекста.

Объявление локального значения​

Набор связанных локальных значений можно объявить вместе в одном блоке locals:

Блок кода
locals {
  service_name = "forum"
  owner        = "Community Team"
}

Выражения в локальных значениях не ограничиваются константами-литералами; они также могут ссылаться на другие значения в модуле, чтобы преобразовывать или объединять их, включая переменные, атрибуты ресурсов и другие локальные значения:

Блок кода
locals {
  # Ids for multiple sets of EC2 instances, merged together
  instance_ids = concat(aws_instance.blue.*.id, aws_instance.green.*.id)
}

locals {
  # Common tags to be assigned to all resources
  common_tags = {
    Service = local.service_name
    Owner   = local.owner
  }
}

Использование локальных значений​

После объявления локального значения на него можно ссылаться в выражениях как local.<NAME>.

Примечание

Локальные значения создаются блоком locals (во множественном числе), но на них ссылаются как на атрибуты объекта с именем local (в единственном числе). При ссылке на локальное значение не добавляйте «s»!

Блок кода
resource "aws_instance" "example" {
  # ...

  tags = local.common_tags
}

Обращаться к локальному значению можно только в выражениях модуля, в котором оно объявлено.

Когда использовать локальные значения​

Локальные значения помогают избежать многократного повторения одних и тех же значений или выражений в конфигурации, но чрезмерное их использование может затруднить чтение конфигурации тем, кто будет ее сопровождать, поскольку скрывает фактически используемые значения.

Используйте локальные значения умеренно — в тех случаях, когда одно значение или результат применяется во многих местах и это значение, вероятно, изменится в будущем. Возможность легко изменить значение в одном месте — главное преимущество локальных значений.

Эфемерность​

Локальное значение можно вычислить, вычислив выражение, содержащее эфемерные значения. В этом случае локальное значение разрешено использовать только в других эфемерных контекстах:

  • Эфемерные ресурсы
  • Эфемерные переменные
  • Эфемерные выходные значения
  • Локальные значения
  • Провайдеры
  • Провижионеры
  • Блоки connection ресурсов
  • Атрибуты write-only ресурсов
Примечание

Любое включение эфемерного значения в выражение сделает локальное значение эфемерным. Например:

Блок кода
variable "var1" {
  type = string
}

variable "var2" {
  type      = string
  ephemeral = true
}

locals {
  l1 = var.var1 == "" ? "" : var.var1 // => not ephemeral
  l2 = var.var2 // => ephemeral
  l3 = var.var2 == "" ? "" : var.var1 // => ephemeral
}

Подробный пример использования эфемерных локальных значений см. в этом примере.

Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.12/language/values/locals/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API