Spec-Zone.ru › OpenTofu 1.12

Метааргумент provider ресурса

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

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

По умолчанию OpenTofu интерпретирует первое слово в имени типа ресурса (слова разделены символами подчёркивания) как локальное имя провайдера и использует конфигурацию провайдера по умолчанию. Например, тип ресурса google_compute_instance автоматически связывается с конфигурацией по умолчанию для провайдера, локальное имя которого в текущем модуле — google.

С помощью метааргумента provider можно выбрать для ресурса альтернативную конфигурацию провайдера:

Блок кода
# default configuration
provider "google" {
  region = "us-central1"
}

# alternate configuration, whose alias is "europe"
provider "google" {
  alias  = "europe"
  region = "europe-west1"
}

resource "google_compute_instance" "example" {
  # This "provider" meta-argument selects the google provider
  # configuration whose alias is "europe", rather than the
  # default configuration.
  provider = google.europe

  # ...
}

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

Блок кода
variable "aws_regions" {
  type = map(object({
    vpc_cidr_block = string
  }))
}

provider "aws" {
  alias    = "by_region"
  for_each = var.aws_regions

  region = each.key
}

resource "aws_vpc" "private" {
  # This expression filters var.aws_regions to include only
  # the elements whose value is not null. Refer to the
  # warning in the text below for more information.
  for_each = {
    for region, config in var.aws_regions : region => config
    if config != null
  }
  provider = aws.by_region[each.key]

  cidr_block = each.value.vpc_cidr_block
}

Подробнее о синтаксисе аргумента provider можно узнать в разделе Ссылки на экземпляры провайдера.

Предупреждение

Выражение for_each для ресурса не должно в точности совпадать с выражением for_each для связанной с ним конфигурации провайдера.

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

Поэтому экземпляр провайдера, связанный с любым экземпляром ресурса, должен оставаться в конфигурации как минимум ещё один цикл планирования и применения после удаления экземпляра ресурса; иначе OpenTofu не сможет спланировать уничтожение экземпляра ресурса.

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

Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.12/language/meta-arguments/resource-provider/

Spec-Zone.ru

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