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