TT Lab
Blog

한국어 English 日本語 中文

Get started
Blog

Blog

Two of the Five Commands Suggested for Testing lookup Do Not Render Templates: How a Helm Docs PR Was Merged in 15 Hours and 54 Minutes

Result: Merged (2026-10-17 16:45, helm/helm-www#2307), confirmed to be reflected in the helm.sh documentation on the same day. In fact, this was taken from GitHub PR/review/check/timeline logs, the helm-www source (the PR's base commit faf08ad0), the Helm source (tags v3.22.1 and v4.3.1), and the draft contribution ledger. All times are in Korea Standard Time.

Table of Contents

One-Line Summary

PR helm/helm-www#2307 docs: lookup only runs for template, install and upgrade
Changes One identical paragraph each in the current documentation and the Helm 3 version documentation. 10 lines added, 8 lines deleted
Response No review bot or line comments. A single maintainer approved with /lgtm , and later merged after merging main and re-running the checks
Result PR opened 10-17 00:50 → Approved 02:09 → Merged 16:45, approx. 15 hours and 54 minutes. Squash merge (our account as author, maintainer as co-author)
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 을 시험하라고 함
Figure: Commands That Invoke lookup and Commands That Do Not

1. What Was the Problem: The Sentence We Saw

Let's be honest first. This time, nothing was broken in TT Lab. We didn't get stuck following the documentation, but rather noticed while reading the documentation that a sentence did not match the source. The contribution ledger does not specifically record how this sentence was found. However, this draft was prepared in the same batch as the Grafana chart PR in Part 2, using the same Helm version (v3.18.2). As seen in Part 2, the random password for that chart relies on lookup , and in tools like Argo CD that render with helm template , lookup returns nothing. It appears we encountered this while reading the lookup section of the Helm documentation to verify that behavior.

Helm 공식 문서 「Template Functions and Pipelines」 의 lookup At the end of the section, there was the following paragraph (identical in the current docs and Helm 3 docs).

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

This is a sentence grouping five commands with | to be written all at once. Such lists cannot be known to be correct until tried out one by one. When actually run, the fourth and fifth ones differ.

Command (Helm v3.18.2) Result
helm template d ./chart lookup returns an empty map, causing render failure with nil pointer evaluating interface {}.name Render failure with
helm template d ./chart --dry-run=client Same
helm template d ./chart --dry-run=server found: "kube-system" Rendered with
helm rollback --dry-run=server Error: invalid argument "server" for "--dry-run" flag: strconv.ParseBool: parsing "server": invalid syntax

The test chart simply draws (lookup "v1" "Namespace" "" "kube-system").metadata.name in a single template, and the cluster is a small cluster in TT Lab. The top three lines confirm that the first part of the sentence (template only looks at the cluster when it is =server ) is correct, and the last line is evidence that the second part of the sentence is incorrect. These values are exactly as written in the PR body, and the original output files were not preserved separately (the draft is in the contribution ledger). helm uninstall --dry-run=server was not tested and was verified solely through the flag definitions in the source (Section 2).

2. Cause: Which Line of the Source

Document line numbers are based on the PR's base commit faf08ad0 , and the Helm source is based on the latest Helm 3 release tag v3.22.1 at the time of writing the PR.

Documentation Side

In both places, the same five commands were listed both as commands that do not attach to the API server when --dry-run , and as commands to test --dry-run=server with lookup .

lookup Only Lives Inside the Rendering Engine

rollback and uninstall do not follow that path.

Helm 4 도 확인했습니다. v4.3.1 의 uninstall 은 여전히 참/거짓 플래그입니다(pkg/cmd/uninstall.go line 78). Although rollback was changed to use the same dry-run flag as other commands (pkg/cmd/rollback.go accepting) =server on line 103), it still retrieves the stored manifests (pkg/action/rollback.go line 207). Even with the flag, lookup is not called, so the corrected sentence is correct for both versions. I have not run it directly with Helm 4 (untested).

In summary, the sentence has two errors. First, the meaning that "you can test lookup with these two commands" is wrong (there are no templates to render), and second, running those commands as-is in Helm 3 results in a flag error.

3. What Changed: Summary of the Diff

In the same paragraph of both files, delete|rollback was removed, and one additional sentence was added explaining why it was removed. The rest of the paragraph remains unchanged.

 # 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.

Trailing spaces at the ends of old lines were also deleted, making the number of deleted lines appear larger than the number of sentences. The PR body includes quotes of the old sentences, the reasons why the two commands must be omitted (source files and flag definitions), the table from Section 1, and ParseBool errors, and two things I failed to do. They are: "I didn't runyarn build locally, it's just a text change in a single paragraph" and "I didn't fix the translated version belowi18n/ ". At the end of the post, I added a sentence stating that I wrote it with the help of AI and reviewed it myself. I attached the DCO sign-off (required by helm-www's CONTRIBUTING)Signed-off-by) and an SSH signature to the commit.

4. Response: Approved in 1 hour 19 minutes, merged in 15 hours 54 minutes

Time (10-17) Day
00:43 Commit (DCO sign-off and SSH signature)
00:50 PR opened. The size bot added the size/S label, DCO passed
00:50 The spelling check (typos) workflow failed without running a single jobfinished
00:52 Netlify site preview ready
02:09 A maintainer approved with /lgtm , 1 minute later the has one approval label
16:42 Another contributor's documentation PR (#2306) merged first
16:43 Maintainer merged main into our branch → DCO, typos, and previews ran again and all passed
16:45 Squash merged

The bots only handled the size label and previews; there were no review bots or inline comments. The maintainer's words were /lgtm was all it took.

What is worth noting is the failure at 00:50. GitHub simply indicated that this run "appears to have failed due to a workflow file issue," and because no jobs were started, there are no logs. The base commit's typos.yml was a standard two-step process, and right before the merge, after incorporating main, the exact same workflow passed in 7 seconds. The two commits that entered main in the meantime only changed documentation. The cause was not identified (unconfirmed). Although it seemed like a failure unrelated to our changes, honestly, we did not record this failure in our ledger nor did we take separate action for it. The state of the ledger remained "pending review" the whole time. Thanks to the maintainer merging main and re-running the checks, it was merged with a green light.

The merge commit dc74ea9b was authored by our account, and the message consisted of our commit message appended with the PR number and a line from the maintainer's Co-authored-by because the commit incorporating main entered the branch under the maintainer's name. On 2026-10-17, we opened the relevant documentation page on helm.sh and confirmed that the corrected sentence was visible.

5. What We Learned: Tips for Open Source Contribution

Titi's word. There was a note saying, "Just ask these five friends!" but the fourth and fifth friends were unable to hear the question. When I called them out one by one, the fifth friend asked back, "What is a server?" After crossing out the two names on the note and writing a one-line reason, I received a "Good" stamp. I will also keep in mind that eleven notes in other languages are still left as they are.

Link

All materials were accessed on 2026-10-17.

Sign in to like

Comments

No comments yet.

Sign in to leave a comment