You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform销毁OCI计算实例报错:Saved plan is stale及相关问题咨询

问题解答

1. 修复"Saved plan is stale"销毁报错

这个错误的核心原因是你复用了创建实例时生成的旧计划文件tfplan。该计划仅对应创建操作时的状态,执行terraform apply tfplan后,Terraform的状态已经更新,旧计划与当前状态不匹配,因此被判定为过期失效。terraform state pull只是将远程状态同步到本地,无法更新已生成的计划文件。

解决方法有两种:

  • 直接执行销毁命令:无需复用旧计划,切换到对应工作区后直接运行带变量的terraform destroy:
terraform workspace select test
terraform destroy \
-var compute_shape="VM.Standard.E4.Flex" \
-var compute_cpus="1" \
-var compute_memory_in_gbs="1" \
-var compute_name="test" \
-var compute_image_id="ocid1.image....." \
-var compartment_id="ocid1.compartment....." \
-var vnic_subnet_id="ocid1.subnet.oc1.iad....." \
-var vnic_assign_public_ip="true" -input=false -lock=true
  • 生成销毁专用计划文件:如果必须用计划文件,重新生成针对销毁操作的计划,再执行应用:
terraform workspace select test
terraform plan -destroy \
-var compute_shape="VM.Standard.E4.Flex" \
-var compute_cpus="1" \
-var compute_memory_in_gbs="1" \
-var compute_name="test" \
-var compute_image_id="ocid1.image....." \
-var compartment_id="ocid1.compartment....." \
-var vnic_subnet_id="ocid1.subnet.oc1.iad....." \
-var vnic_assign_public_ip="true" -no-color -out=tfplan-destroy -input=false -lock=true
terraform apply tfplan-destroy

2. 同一目录下运行多计划并按ID/名称销毁资源

可以实现,推荐两种规范方式:

  • 利用Terraform工作区(推荐):这是官方推荐的多环境隔离方案,同一目录下的不同工作区拥有独立的状态文件,资源完全隔离。你可以创建多个工作区(如test、dev、prod),每个工作区运行各自的部署计划;销毁时只需切换到目标工作区,执行terraform destroy即可,无需担心资源混淆。
  • 生成独立计划文件:不为每个环境创建工作区,而是生成不同名称的计划文件(如tfplan-test、tfplan-prod),但销毁时必须针对对应环境重新生成销毁计划文件,不能复用旧的创建计划。这种方式状态文件共享,不如工作区隔离性好,容易出现资源管理混乱。
  • 单独销毁特定资源:如果不需要销毁整个计划的资源,可通过-target参数指定单个资源销毁,例如:
terraform destroy -target oci_core_instance.test

注意:-target会跳过依赖检查,可能导致状态不一致,仅临时应急使用。

内容的提问来源于stack exchange,提问作者Kalin Borisov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 19:05:11