状态
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 本身即可使用它。