Состояние
OpenTofu должен хранить состояние управляемой инфраструктуры и конфигурации. OpenTofu использует это состояние, чтобы сопоставлять реальные ресурсы с вашей конфигурацией, отслеживать метаданные и повышать производительность при работе с крупной инфраструктурой.
По умолчанию состояние хранится в локальном файле с именем "terraform.tfstate", однако мы рекомендуем хранить его в TACOS (программном обеспечении для автоматизации и совместной работы с TF), чтобы управлять версиями, шифровать данные и безопасно делиться ими с командой.
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.12/language/state/