TT Lab
博客

한국어 English 日本語 中文

开始
博客

博客

lookup 的五个测试命令中有两个不渲染模板:Helm 文档 PR 历时 15 小时 54 分钟合并全记录

结果:已合并 (2026-10-17 16:45, helm/helm-www#2307), 确认已于同日反映在 helm.sh 文档中。 实际上,这些内容取自 GitHub 的 PR、审查、检查与时间线记录,helm-www 源码(PR 的基准提交 faf08ad0),Helm 源码(标签 v3.22.1 及 v4.3.1), 以及贡献记录草稿。时间均为韩国时间。

目录

一句话总结

PR helm/helm-www#2307 docs: lookup only runs for template, install and upgrade
修改内容 当前文档与 Helm 3 版本文档各一个相同段落。新增 10 行,删除 8 行
反应 无审查机器人及行内评论。一位维护者使用 /lgtm 批准,随后合并了 main 分支重新运行检查并合并
结果 PR 公开 10-17 00:50 → 批准 02:09 → 合并 16:45,耗时约 15 小时 54 分钟。Squash 合并(我们的账户为作者,维护者为共同作者)
lookup 은 템플릿을 그리는 명령에서만 불린다 Helm v3.22.1 소스 기준, 「실측」은 v3.18.2 로 잰 값 ① 템플릿을 그린다: template · install · upgrade 명령 렌더 엔진 lookup install · upgrade 클러스터 연결 실제로 조회 template, =client 연결 없음 빈 맵 → 실패 --dry-run=server 클러스터 연결 kube-system 찾음 가운데 줄과 아랫줄은 실측(helm template 으로) ② 템플릿을 그리지 않는다: rollback · uninstall rollback 이전 판의 저장된 매니페스트를 다시 적용 uninstall 저장된 릴리스의 자원을 지움 Helm 3 의 --dry-run 은 참/거짓, =server 는 오류 고치기 전 문서: template|install|upgrade|delete|rollback 다섯 명령 모두 --dry-run=server 로 lookup 을 시험하라고 함
图:调用 lookup 的命令与未调用 lookup 的命令

1. 问题所在:我们看到的文段

首先坦白说明。这次 TT Lab 并没有发生任何故障。并不是跟着文档操作时卡住了,而是在阅读文档时发现有一个文段 与源码不符。贡献记录中并未单独记载是如何发现这段话的。不过,该草稿与 2 篇 Grafana 图表 PR 在同一天、使用相同的 Helm 版本 (v3.18.2) 作为同一批次进行准备的。正如在 第 2 篇中所见,该图表的随机 密码依赖于 lookup ,而在使用 helm template 进行渲染的 Argo CD 等工具中, lookup 不会返回任何内容。为了确认该行为, 在阅读 Helm 文档的 lookup 章节时似乎遇到了它。

Helm 공식 문서 「Template Functions and Pipelines」 의 lookup 章节末尾有这样一个段落(当前文档与 Helm 3 版本文档相同)。

To test lookup against a running cluster, helm template|install|upgrade|delete|rollback --dry-run=server should be used instead

这是将五个命令用 | 连起来写成的一句话。此类列表如果不逐个运行验证,是无法得知其是否正确的. 实际上运行后会发现第四个和 第五个命令有所不同。

命令 (Helm v3.18.2) 结果
helm template d ./chart lookup 返回空映射,导致通过 nil pointer evaluating interface {}.name 渲染失败
helm template d ./chart --dry-run=client 相同
helm template d ./chart --dry-run=server found: "kube-system" 通过
helm rollback --dry-run=server Error: invalid argument "server" for "--dry-run" flag: strconv.ParseBool: parsing "server": invalid syntax

渲染 (lookup "v1" "Namespace" "" "kube-system").metadata.name 测试图表仅仅是在一个模板中绘制 =server ,而集群是 TT Lab 的小型 集群。上面三行用于验证文段前半部分(template 仅在 helm uninstall --dry-run=server 时才查看集群)是正确的,而最后一行则是文段后半部分 错误的证明。这些值与 PR 正文中的完全一致,未单独保留输出原始文件(草稿在贡献记录中)。

未进行运行测试,仅通过源码中的标志定义进行了确认(第 2 节)。

2. 原因分析:源码的哪一行出了问题 faf08ad0 文档行号以 PR 的基准提交

为准, Helm 源码以编写 PR 时的最新 Helm 3 发布标签 v3.22.1 为准。

246–249 行 --dry-run 这两处都把在 --dry-run=server 时不连接 API 服务器的命令, 当作了用 lookup 测试

lookup 的命令,列出了相同的五个命令。

rollback 和 uninstall 不走这条路

Helm 4 도 확인했습니다. v4.3.1 의 uninstall 은 여전히 참/거짓 플래그입니다(pkg/cmd/uninstall.go 第 78 行)。 虽然 rollback 改为使用与其他命令相同的 dry-run 标志(pkg/cmd/rollback.go 第 103 行) =server ),但它仍然获取已保存的清单(pkg/action/rollback.go 第 207 行)。 即使接收了标志,也不会调用 lookup ,因此修改后的句子适用于两个版本。我没有在 Helm 4 中亲自运行测试(未实测)。

总结来说,原句有两个错误。一个是“可以用这两个命令测试 lookup ”的含义是错误的(没有要渲染的模板), 另一个是在 Helm 3 中直接运行这些命令会导致标志错误。

3. 更改了什么:diff 摘要

在两个文件的同一段落中删除了 delete|rollback ,并补充了一句话说明删除的原因。段落的其余部分保持不变。

 # docs/chart_template_guide/functions_and_pipelines.mdx (versioned_docs/version-3 의 같은 문단도 같게)
-Keep in mind that Helm is not supposed to contact the Kubernetes API Server during 
-a `helm template|install|upgrade|delete|rollback --dry-run` operation. To test `lookup` 
-against a running cluster, `helm template|install|upgrade|delete|rollback --dry-run=server`
-should be used instead to allow cluster connection.
+Keep in mind that Helm is not supposed to contact the Kubernetes API Server during
+a `helm template|install|upgrade --dry-run` operation. To test `lookup` against a
+running cluster, `helm template|install|upgrade --dry-run=server` should be used
+instead to allow cluster connection. `helm uninstall` and `helm rollback` do not
+render templates, so `lookup` is not called by these commands.

旧行尾的空格也被一并删除了,因此删除的行数看起来比句子数要多。PR 正文中包含旧句子的引用、这两个命令需要被移除的原因(源码文件和 标志定义)、第 1 节的表格以及 ParseBool 错误,以及没有做到的两点。分别是「yarn build 没有在本地运行,只是修改了一个段落的 文字更改」与「i18n/ 下方的译本未作修改」。正文末尾加入了在 AI 的协助下编写并经过人工审查的语句。我们在提交中附带了 helm-www 的 CONTRIBUTING 所要求的 DCO 签名(Signed-off-by)以及 SSH 签名。

4. 反应:批准耗时 1 小时 19 分,合并耗时 15 小时 54 分

时间(10-17) 日
00:43 提交(DCO 签名·SSH 签名)
00:50 公开 PR。大小机器人打上 size/S 标签,DCO 通过
00:50 拼写检查(typos)工作流 在没有任何任务的情况下失败结束
00:52 Netlify 网站预览已就绪
02:09 维护者以 /lgtm 批准,1 分钟后打上 has one approval 标签
16:42 其他贡献者的文档 PR(#2306)率先被合并
16:43 维护者将 main 合并到我们的分支 → DCO、typos、预览重新运行并通过
16:45 Squash 合并

机器人只有大小标签和预览,没有审查机器人或行内评论。维护者的留言是 /lgtm 简短的一句话。

值得注意的是 00:50 的失败。GitHub 仅将这次运行显示为「似乎因工作流文件问题而失败」,并且没有启动任何任务,因此也没有日志。基础提交的 typos.yml 是普通的两步式,在合并前夕合并 main 之后,同样的工作流在 7 秒内通过了。在此期间进入 main 的两个提交仅修改了文档。原因未确认(未证实)。虽然这似乎与我们的更改无关,但老实说,我们并未将此失败记录在案,也没有单独作出应对。记录的状态全程都是「等待审查」。由于维护者合并了 main 并重新运行了检查,因此在绿灯亮起后被合并。

合并提交 dc74ea9b 的作者是我们的账号, 信息是在我们的提交信息后附上了 PR 编号以及维护者的 Co-authored-by 这一行。因为合并了 main 的提交是以维护者的名字进入分支的。经确认,2026-10-17 打开 helm.sh 的对应文档页面时,可以看到修改后的语句。

5. 学到的经验:开源贡献要领

Titi 的一句话。 上面有一张便条写着:“问这五个朋友就行了!”但第四个和第五个朋友是听不到这个问题的。我把他们一个个叫来,第五个朋友反问了一句:“什么是 server?”我从便条上划掉了这两个名字,并写了一行理由,然后得到了一个“赞”的印章。我还得记住,其他十一张外语便条依然原封不动。

链接

所有资料均查阅于 2026-10-17。

登录后即可点赞

评论

还没有评论。

登录后即可发表评论