使用 with 限定块的作用域
将点作用域缩小到子树及其陷阱
使用 with 限定块的作用域 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。
停止重复输入冗长路径
反复输入 .Values.image.repository 会让模板变得杂乱。with 动作会将点号缩小到某个子树,让您可以编写更短的路径。
with 动作
with 块以 {{ with SOMETHING }} 开始,并以 {{ end }} 结束。在其中,点号会重置为您传入的内容。
{{ with .Values.image }}
repository: {{ .repository }}
tag: {{ .tag }}
{{ end }}点号进入子树
进入其中后,.repository 就表示 .Values.image.repository。with 关键字会将点号重新绑定到子树,从而缩短其下的每条路径。
image:
repository: nginx
tag: "1.27"它同时也能充当保护条件
如果值为空值或缺失,with 就会跳过整个块。因此它既能限定点号的作用域,又能同时充当 if。🛡️
添加 else
和 if 一样,with 也支持 else 分支。当值为空时,else 分支会被渲染,为可选配置提供整洁的回退方案。
{{ with .Values.resources }}
resources:
{{ toYaml . | indent 2 }}
{{ else }}
# no resources set
{{ end }}作用域陷阱
陷阱在这里:在 with 内部,点号不再表示根上下文。因此 .Release.Name 会失效,因为 Release 不在这个子树下。
使用 $ 返回根上下文
要在 with 内部使用根值,请在它们前面加上 $。无论嵌套多深,美元符号始终指向原始根上下文。
{{ with .Values.image }}
name: {{ $.Release.Name }}
image: {{ .repository }}
{{ end }}保持代码块简短
由于 with 会接管点号,代码块过大后很快就会变得难以理解。请保持 with 部分简短,这样点号所指向的对象就始终清晰。
with 与 if
只需测试标志时使用 if;如果还要进入该值内部,则使用 with。with 会改变点号;if 不会。
预览作用域
不确定点号包含什么?使用 helm template 进行渲染并查看输出,或者在调试棘手的 with 代码块时打印作用域。
helm template ./mychart嵌套 with 代码块
您可以在一个 with 内嵌套另一个 with,以便进一步深入。每一层都会让 点号 再向下移动一级,因此请留意当前所在的位置。
{{ with .Values.image }}
{{ with .pullSecrets }}
# . is now pullSecrets
{{ end }}
{{ end }}快速检查
在 {{ with .Values.image }} 代码块中,您尝试读取 .Release.Name,但它为空。
回顾
现在您可以使用 with 限定点号的作用域,自动获得空值保护,添加 else 回退分支,并通过 $ 访问根上下文。模板更简洁了!🎯
常见问题解答
「使用 with 限定块的作用域」课时是免费的吗?
是的 — 「使用 with 限定块的作用域」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。
「使用 with 限定块的作用域」这节课中我会学到什么?
将点作用域缩小到子树及其陷阱 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 DevOps Bootcamp 需要有经验吗?
无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「使用 with 限定块的作用域」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 DevOps Bootcamp 课中编写并运行代码吗?
能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 使用 if 和 else 的条件块
- 条件中的真值与运算符
- 使用 range 遍历列表与映射
- 使用 with 限定块的作用域