Spec-Zone.ru › OpenTofu 1.11

Адреса ресурсов

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

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

Блок кода
[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.11/cli/state/resource-addressing/

Spec-Zone.ru

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