Spec-Zone.ru › OpenTofu 1.12

Адресация ресурсов

Адрес ресурса — это строка, которая идентифицирует ноль или более экземпляров ресурсов в вашей конфигурации в целом.

Адрес состоит из двух частей:

Блок кода
[module path][resource spec]

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

Путь модуля​

Путь модуля указывает на модуль в дереве модулей. Он имеет следующий вид:

Блок кода
module.module_name[module index]
  • module — ключевое слово модуля, указывающее на дочерний модуль (не корневой). Несколько ключевых слов module в пути указывают на вложенность.
  • module_name — заданное пользователем имя модуля.
  • [module index] — (Необязательно) Индекс для выбора экземпляра из вызова модуля, у которого несколько экземпляров; указывается в квадратных скобках ([ и ]).

Адрес без спецификации ресурса, то есть module.foo, применяется ко всем ресурсам в модуле, если у модуля один экземпляр, или ко всем экземплярам модуля, если у него несколько экземпляров. Чтобы указать все ресурсы конкретного экземпляра модуля, включите индекс модуля в адрес, например module.foo[0].

Если путь модуля не указан, адрес применяется к корневому модулю.

Пример использования ключевого слова module для разделения двух модулей, у которых несколько экземпляров:

Блок кода
module.foo[0].module.bar["a"]

Спецификация ресурса​

Спецификация ресурса указывает на конкретный экземпляр ресурса в выбранном модуле. Она имеет следующий синтаксис:

Блок кода
resource_type.resource_name[instance index]
  • resource_type — тип адресуемого ресурса.
  • resource_name — заданное пользователем имя ресурса.
  • [instance index] — (Необязательно) Индекс для выбора экземпляра ресурса, у которого несколько экземпляров; указывается в квадратных скобках ([ и ]).

Спецификация ресурса без префикса пути модуля соответствует только ресурсам в корневом модуле.

Значения индексов для модулей и ресурсов​

К значениям индексов модулей и ресурсов с несколькими экземплярами применяются следующие правила:

  • [N], где N — числовой индекс на основе 0 для ресурса с несколькими экземплярами, заданными метааргументом count. Если при указании ресурса с count > 1 индекс опущен, адрес ссылается на все экземпляры.
  • ["INDEX"], где INDEX — буквенно-цифровой ключевой индекс ресурса с несколькими экземплярами, заданными метааргументом for_each.

Примеры​

Пример count​

Предположим, конфигурация OpenTofu содержит:

Блок кода
resource "aws_instance" "web" {
  # ...
  count = 4
}

Такой адрес:

Блок кода
aws_instance.web[3]

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

Блок кода
aws_instance.web

ссылается на все четыре экземпляра «web».

Пример for_each​

Предположим, конфигурация OpenTofu содержит:

Блок кода
resource "aws_instance" "web" {
  # ...
  for_each = {
    "tofu": "value1",
    "resource":  "value2",
    "indexing":  "value3",
    "example":   "value4",
  }
}

Такой адрес:

Блок кода
aws_instance.web["example"]

ссылается только на экземпляр «example» в конфигурации и разрешается в «value4».

Адреса ресурсов в командной строке​

При непосредственном использовании адресов ресурсов в аргументах командной строки, например в параметрах планирования -target, -exclude и -replace, знаки пунктуации в синтаксисе адреса ресурса могут конфликтовать со специальной интерпретацией этих символов оболочкой, используемой для запуска OpenTofu.

Чтобы избежать этого, необходимо заключить эти символы в кавычки или экранировать их так, чтобы оболочка передала их OpenTofu без изменений. Синтаксис зависит от используемой оболочки или интерпретатора команд:

  • В оболочках Unix, например bash, заключайте адрес ресурса в одинарные кавычки ('):

    Блок кода
    tofu apply -target='aws_instance.example["foo"]'

    Если нужно указать строку ключа экземпляра, содержащую символ одинарной кавычки, используйте две отдельные последовательности в одинарных кавычках, поставив между ними экранированную одинарную кавычку. Например, в следующем примере указан ключ экземпляра "example'foo":

    Блок кода
    tofu apply -target='aws_instance.example["example'\''foo"]'
  • В PowerShell 7.3 и более поздних версиях заключайте адрес ресурса в одинарные кавычки ('):

    Блок кода
    tofu apply -target='aws_instance.example["foo"]'

    В более ранних версиях PowerShell требования отличаются. Дополнительные сведения см. в разделе Передача аргументов, содержащих символы кавычек.

    Если нужно указать строку ключа экземпляра, содержащую символ одинарной кавычки, используйте две одинарные кавычки подряд, чтобы представить одну буквальную кавычку. Например, в следующем примере указан ключ экземпляра "example'foo":

    Блок кода
    tofu apply -target='aws_instance.example["example''foo"]'
  • В командной строке Windows (cmd.exe) заключайте адрес ресурса в двойные кавычки ("), а кавычки в адресе экранируйте обратной косой чертой (\):

    Блок кода
    tofu apply -target="aws_instance.example[\"foo\"]"

Адреса ресурсов в файлах целевых ресурсов​

Параметры -target-file и -exclude-file планирования считывают адреса ресурсов из отдельного файла, который может содержать ноль или более адресов ресурсов.

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

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

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

Блок кода
# These modules must be targeted during initial creation.
module.network
module.cluster

# The following resources must also be included on initial
# creation.
aws_iam_role.all["base"]
aws_iam_role_policy.all["base"]

Указанный выше файл целевых ресурсов будет соответствовать всем экземплярам ресурсов, адреса которых начинаются с module.network или module.cluster, а также конкретным экземплярам ресурсов aws_iam_role.all["base"] и aws_iam_role_policy.all["base"].

Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.12/cli/state/resource-addressing/

Spec-Zone.ru

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