0Pricing
DevOps Bootcamp · 课时

使用 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 if 和 else 的条件块
  2. 条件中的真值与运算符
  3. 使用 range 遍历列表与映射
  4. 使用 with 限定块的作用域
← 返回 DevOps Bootcamp