Состояние
OpenTofu должен хранить сведения об управляемой инфраструктуре и конфигурации. OpenTofu использует это состояние, чтобы сопоставлять реальные ресурсы с конфигурацией, отслеживать метаданные и повышать производительность при работе с крупной инфраструктурой.
По умолчанию это состояние хранится в локальном файле с именем "terraform.tfstate", но мы рекомендуем хранить его в TACOS (программном обеспечении для автоматизации и совместной работы с Terraform), чтобы обеспечивать версионирование, шифрование и безопасный обмен состоянием с командой.
OpenTofu использует состояние, чтобы определять, какие изменения нужно внести в инфраструктуру. Перед выполнением любой операции OpenTofu выполняет обновление, чтобы актуализировать состояние в соответствии с реальной инфраструктурой.
Основное назначение состояния OpenTofu — хранить привязки между объектами в удалённой системе и экземплярами ресурсов, объявленными в конфигурации. Когда OpenTofu создаёт удалённый объект в ответ на изменение конфигурации, он записывает идентификатор этого удалённого объекта для определённого экземпляра ресурса, а затем может обновить или удалить этот объект в ответ на будущие изменения конфигурации.
Подробнее о том, зачем OpenTofu требуется состояние и почему OpenTofu не может работать без него, см. на странице назначение состояния.
Просмотр и изменение
Хотя файлы состояния имеют формат JSON, редактировать их напрямую не рекомендуется. OpenTofu предоставляет команду tofu state для выполнения основных изменений состояния с помощью CLI.
Использование CLI и вывод команд состояния организованы так, чтобы с ними было удобно работать в Unix-инструментах, таких как grep, awk и т. д. Кроме того, CLI избавляет пользователей от необходимости учитывать изменения формата самого состояния. Проект OpenTofu будет поддерживать работу CLI, даже если формат состояния под ним изменится.
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.9/language/state/