#39230·terraform

悬浮的符号链接会使 fileset() 失败,并丢弃其他所有匹配项

作者: L4XB创建于 2026年9月16日更新于 2026年9月16日
标签bugnew

QQ Terraform 版本

贝壳 轨道v1.18.0-dev 运行于 darwin arm64 时


(建自`main' at `f8e7458f5'. 已发布的版本中代码路径不变. )

QQ Terraform 配置文件

***************************** ******** ****** *****
输出“ 文件” {
值=文件et(path.module, “*.txt”)
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

在同一目录中:

real.txt # 一个普通文件
dangling.txt - > gone.txt # 目标不存在的同义链接

QQ 调试输出

控制台 $Is -la (英语). lrwxr-xr-x 1 用户员工. dangling.txt - > /tmp/tffileset/gone.txt (英语). -rw -r -r -r - -1用户员工 3 real.txt

$ 回声“ fileset( path.cwd, “ *.txt”) ” 大地控制台 ╷ QQ 错误: 函数调用出错 │ QQ 在<计算器-输入> 第1行: QQ( 源代码不可用) │ QQ 调用函数“ fileset” 失败: 失败 stat QQ"/tmp/tffileset/ dangling.txt":stat /tmp/tffileset/ dangling.txt:无此规定. QQ 文件或目录. ╵


• 预期行为

toset ([[ "真实的.txt", ) )


目标缺失的同义链接不是普通文件,因此不能是结果的成员。 符合模式的所有其他路径仍应返回。

实际行为

呼叫失败,** 不**文件被退回——`real.txt'与断开的链接一同丢失。 在匹配的目录中,一个无法解决的名字将带来整个“文件集”结果。

* 重现步骤

控制台
mkdir /tmp/tffileset \\ cd /tmp/tfileset 页面存档备份,存于互联网档案馆
回声 嗨 > real.txt
在 -s /tmp/tffileset/gone.txt dangling.txt 内
回声“ fileset( path.cwd, “ *.txt”) ” 大地控制台

++ 附加上下文

在“MakeFileSetFunc”中的“内部/lang/funcs/files/files.go”:

开始 ,匹配:=范围匹配{ fi, 错误 := os. Stat( match)

如果错误 ! = 无 { return cty. Unknown Val(cty.Set(cty.String)),fmt. 错误f (“ 失败到 stat %s :%w ” , 编辑 IfSensitive( 匹配, 标记...), 错误) {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

如果 !fi. Mode (). Isregular () { 继续 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?


`os.Stat'跟随连锁关系,因此一个接通的链接返回`fs.ErrnotExist',循环中断整个呼叫。 下一个声明无论如何都会跳过该条目: 断开的链接不是普通文件 。

有两种方式可以击出它, 两个都不同寻常:

- 树上的连锁结 供应商依赖性,构建输出,一个存储器的取出,将链接带入被少许取出所排除的文件,或者连接到只在另一台机器上存在的路径. 没有什么需要参考的;它只需要与光彩相匹配。
- ** 将一个文件从glob和stat之间删除。 **`双星'。 Glob`首先列出姓名,然后循环统计,所以在该窗口中消失的任何东西都会产生同样的错误。 这使得故障断断续续,在CI中,并行步骤正写到同棵树上,难以归属.

在这两种情况下,名称都不解决任何问题,因此它不能是一个正则文件,不能属于返回的集. 跳过它会生成所需的配置 。 以另一个原因——如许可问题——失败的状态是:
. . . . . . .

内容来源: hashicorp/terraform