Команда: state rm
Основная функция состояния OpenTofu — отслеживать связи между адресами экземпляров ресурсов в вашей конфигурации и удалёнными объектами, которые они представляют. Обычно OpenTofu автоматически обновляет состояние в ответ на действия, выполняемые при применении плана, например удаляет связь с удалённым объектом, который был удалён.
Вы можете использовать tofu state rm в менее распространённой ситуации, когда хотите удалить связь с существующим удалённым объектом, не уничтожая его предварительно. В результате OpenTofu «забудет» об объекте, хотя тот продолжит существовать в удалённой системе.
Использование
Использование: tofu state rm [options] ADDRESS...
OpenTofu выполнит поиск в состоянии всех экземпляров, соответствующих указанному адресу ресурса, и удалит запись о каждом из них, чтобы OpenTofu больше не отслеживал соответствующие удалённые объекты.
Это означает, что, хотя объекты продолжат существовать в удалённой системе, последующий запуск tofu plan будет включать действие по созданию нового объекта для каждого из «забытых» экземпляров. В зависимости от ограничений удалённой системы создание этих объектов может завершиться ошибкой, если их имена или другие идентификаторы конфликтуют со всё ещё существующими старыми объектами.
Использование переменных в источниках модулей, конфигурации бэкенда или блоке шифрования требует задания значений переменным корневого модуля при запуске tofu state rm.
Эта команда также принимает следующие параметры:
-
-dry-run— выводит все экземпляры ресурсов, соответствующие указанному адресу, но не «забывает» ни об одном из них. -
-lock=false— не блокировать состояние на время выполнения операции. Это опасно, если другие пользователи могут одновременно выполнять команды в том же рабочем пространстве. -
-lock-timeout=DURATION— если блокировка не отключена с помощью-lock=false, указывает OpenTofu повторять попытки получить блокировку в течение заданного времени, прежде чем вернуть ошибку. Длительность задаётся числом и обозначением единицы времени, например «3s» — три секунды. -
-var 'NAME=VALUE'— задаёт значение одной входной переменной, объявленной в корневом модуле конфигурации. Используйте этот параметр несколько раз, чтобы задать значения нескольких переменных. Дополнительные сведения см. в разделе Входные переменные в командной строке. -
-var-file=FILENAME— задаёт значения для нескольких входных переменных, объявленных в корневом модуле конфигурации, используя определения из файла «tfvars». Используйте этот параметр несколько раз, чтобы включить значения из нескольких файлов.
-
-json— включает вывод машиночитаемого интерфейса JSON. -
-json-into=out.json— формирует тот же вывод, что и -json, но перенаправляет его в файл. Это позволяет одновременно сохранять журналы в человекочитаемом и машиночитаемом формате.
Помимо параметров -var и -var-file, существует несколько других способов задать значения входных переменных в корневом модуле. Дополнительные сведения см. в разделе Задание значений переменным корневого модуля.
Для конфигураций, использующих только бэкенд cloud или бэкенд remote, tofu state rm также принимает параметр -ignore-remote-version.
Для конфигураций, использующих только локальное состояние local, tofu state rm также принимает устаревшие параметры -state, -state-out и -backup.
Пример: удаление всех экземпляров ресурса
В следующем примере OpenTofu «забудет» все экземпляры ресурса packet_device с именем «worker».
$ tofu state rm 'packet_device.worker'
У ресурса, который не использует count или for_each, есть только один экземпляр, поэтому этот синтаксис также подходит для выбора этого единственного экземпляра.
Пример: удаление всех экземпляров ресурса в модуле
Чтобы выбрать ресурс, определённый во вложенном модуле, необходимо указать путь к этому модулю в составе адреса ресурса:
$ tofu state rm 'module.foo.packet_device.worker'
Пример: удаление всех экземпляров всех ресурсов в модуле
В следующем примере OpenTofu «забудет» все экземпляры, связанные со всеми ресурсами, определёнными во всех экземплярах модуля с именем foo:
$ tofu state rm 'module.foo'
Пример: удаление определённого экземпляра ресурса с помощью count
Ресурс, определённый с помощью метааргумента count, имеет несколько экземпляров, каждый из которых обозначается целым числом. Вы можете выбрать определённый экземпляр, указав его индекс в адресе:
$ tofu state rm 'packet_device.worker[0]'
В некоторых оболочках квадратные скобки ([, ]) имеют специальное значение, поэтому для передачи адреса в OpenTofu без изменений может потребоваться заключить его в кавычки или экранировать. Выше показан типичный синтаксис заключения в кавычки для оболочек Unix.
Пример: удаление определённого экземпляра ресурса с помощью for_each
Ресурс, определённый с помощью метааргумента for_each, имеет несколько экземпляров, каждый из которых обозначается строкой. Вы можете выбрать определённый экземпляр, указав его ключ в адресе.
Однако синтаксис строк включает кавычки, а символ кавычки часто имеет специальное значение в командных оболочках, поэтому вам потребуется использовать соответствующий синтаксис заключения в кавычки и/или экранирования для используемой оболочки. Например:
Оболочки Unix, например в Linux или macOS:
$ tofu state rm 'packet_device.worker["example"]'
Командная строка Windows (cmd.exe):
$ tofu state rm packet_device.worker[\"example\"]
PowerShell:
$ tofu state rm 'packet_device.worker[\"example\"]'
Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.12/cli/commands/state/rm/