Состояние
OpenTofu должен хранить сведения об управляемой инфраструктуре и конфигурации. OpenTofu использует это состояние, чтобы сопоставлять реальные ресурсы с конфигурацией, отслеживать метаданные и повышать производительность при работе с крупной инфраструктурой.
По умолчанию состояние хранится в локальном файле с именем "terraform.tfstate", однако мы рекомендуем хранить его в TACOS (программном обеспечении для автоматизации и совместной работы с Terraform), чтобы создавать версии, шифровать его и безопасно делиться им с командой.
OpenTofu использует состояние, чтобы определить, какие изменения необходимо внести в инфраструктуру. Перед выполнением любой операции OpenTofu выполняет обновление, чтобы синхронизировать состояние с реальной инфраструктурой.
Основное назначение состояния OpenTofu — хранить связи между объектами в удалённой системе и экземплярами ресурсов, объявленными в конфигурации. Когда OpenTofu создаёт удалённый объект в ответ на изменение конфигурации, он записывает идентификатор этого удалённого объекта для определённого экземпляра ресурса, а затем при необходимости обновляет или удаляет этот объект в ответ на дальнейшие изменения конфигурации.
Подробнее о том, зачем OpenTofu требуется состояние и почему OpenTofu не может работать без него, см. на странице назначение состояния.
Просмотр и изменение
Хотя файлы состояния имеют формат JSON, напрямую редактировать их не рекомендуется. OpenTofu предоставляет команду tofu state для выполнения базовых изменений состояния с помощью интерфейса командной строки.
Использование команд состояния через интерфейс командной строки и их вывод устроены так, чтобы с ними было удобно работать в инструментах Unix, таких как grep, awk и т. д. Кроме того, интерфейс командной строки избавляет пользователей от необходимости учитывать изменения формата самого состояния. Проект OpenTofu будет поддерживать работу интерфейса командной строки, даже если лежащий в его основе формат состояния изменится.
OpenTofu предполагает взаимно-однозначное соответствие между настроенными экземплярами ресурсов и удалёнными объектами. Обычно это гарантируется тем, что OpenTofu сам создаёт каждый объект и записывает его идентификатор в состояние либо уничтожает объект, а затем удаляет его связь.
Если вы добавляете или удаляете связи в состоянии другими способами, например импортируя созданные извне объекты с помощью tofu import или попросив OpenTofu «забыть» существующий объект с помощью tofu state rm, вам нужно самостоятельно обеспечить соблюдение этого правила взаимно-однозначного соответствия. Например, вручную удалите объект, который вы попросили OpenTofu «забыть», или импортируйте его повторно, чтобы связать с другим экземпляром ресурса.
Формат
Снимки состояния хранятся в формате JSON, и новые версии OpenTofu обычно обратно совместимы со снимками состояния, созданными в более ранних версиях. Однако формат состояния может меняться в новых версиях OpenTofu, поэтому, если вы создаёте программное обеспечение, которое напрямую анализирует или изменяет его, учитывайте, что по мере развития формата состояния в новых версиях потребуется постоянно поддерживать это программное обеспечение.
Кроме того, существует несколько точек интеграции, которые предоставляют вывод в формате JSON, специально предназначенный для использования внешним программным обеспечением:
-
Команда
tofu outputподдерживает параметр-json, позволяющий получить либо полный набор выходных значений корневого модуля, либо конкретное выходное значение с заданным именем из последнего снимка состояния. -
Команда
tofu showподдерживает параметр-jsonдля просмотра последнего снимка состояния целиком, а также сохранённых файлов плана, в которые включена копия состояния на момент создания плана.
Обычно, если OpenTofu запускается в режиме автоматизации, эти команды выполняют сразу после успешного выполнения tofu apply, чтобы получить представление последнего снимка состояния, а затем сохраняют результат как артефакт, связанный с автоматизированным запуском. Благодаря этому другое программное обеспечение при необходимости может использовать его, не запуская сам OpenTofu.
Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.11/language/state/