#39139·terraform

反向目标覆盖检查后端 应用发布错误警告并错过部分目标覆盖

作者: Abhirup0创建于 2026年9月6日更新于 2026年9月16日
标签bug

QQ Terraform 版本

贝壳 地平面v1.17.0-dev/主(承诺c571b6ac82)


QQ Terraform 配置文件

***************************** ******** ****** *****
三角形 {
需要的提供者 {
无效={
来源="桥公司/倒"
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

资源“ null  resource” “ a” QQ
资源“ null  request” “ b” QQ

QQ 调试输出

N/A(行为在CLI标准输出中直接被观察到,通过单位测试可复制)

• 预期行为

在应用包含多个目标资源的被保存计划(如:law resource.a和law resource.b)时,将-target=null resource.a'通过applely'不能缩小或过滤计划中文件中已经计算过的更改。

Terraform应警告用户,计划文件包含额外的目标(null resource.b),尽管有"-target=null resource.a"的旗帜,但仍会被应用.

实际行为

Terraform以零警告完全无声运行,并应用了两种资源:

页:1 无效资源. a: 正在创建... 无效资源. b: 正在创建... free resource.a: 0s后完成创建 [id=6482619472648123912] free resource.b: 0s后完成创建 [id=3194827501928472911]

应用完成! 资源:新增2个,变更0个,销毁0个.


没有向用户说明他们的 " 目标 " 旗帜被置之不理,并且使用了 " 无效资源 " b。



* 重现步骤

1. 制定有两个目标的计划:
三角形计划 - 目标=null resource.a - 目标=null resource.b -out=test.tfplan

2. 试图仅采用所节省的计划之一:
三角形应用 - 目标=nall resource.a test.tfplan

3. 注意既采用无资源.a,又采用无资源.b,没有发出警告诊断。



++ 附加上下文

这涉及到最近在 " 内部/后端/本地/后端 apply.go " 中增加的PR#38698(承诺c571b6ac82):

开始
如果为 len( op.) 。 目标)!=0{.
/ 目标旗帜是否都与计划中的目标相匹配?
为  ,目标:=范围操作。 目标{
发现 := 虚假
目标:=范围计划。 目标添加器{
如果目标。 目标( 目标) {
发现=真实
换行
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
如果发现 {
// 发出警告
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

在这个块中有两个不同的逻辑问题:

  1. 反向封装检查: 目标 目标目标(计划目标) " 检查CLI目标是否包含计划目标,而不是计划目标是否包含CLI目标.
  • 如果计划针对module.foo',而用户运行applic=module.foo.null resource.bar',module.foo.null resource.bar.TargetContains(module.foo)',则返回错误。 这发出了虚假的警告,表示资源与计划文件中的目标不符,尽管它被列入module.foo'。
  • 如果计划针对module.foo.null resource.bar',用户运行apply-target=module.foo',则返回真实,不发出警告。
  1. 子集/重新瞄准盲点: 检查只是核实 . . . . . . .

内容来源: hashicorp/terraform