Skip to content

按目标集群渲染

Chart 常会根据 .Capabilities.KubeVersion.Capabilities.APIVersions 走不同分支。预览应描述目标集群,而不是恰好运行预览服务的机器。

显式提供 capabilities

csharp
var renderer = new HelmTemplateRenderer(
    chart,
    releaseName: "preview",
    releaseNamespace: "platform",
    values: values,
    kubeVersion: "1.30.0",
    apiVersions:
    [
        "monitoring.coreos.com/v1",
        "policy/v1"
    ],
    isUpgrade: false);

var manifests = renderer.Render();
var notes = renderer.RenderNotes();

kubeVersion 决定模板中 .Capabilities.KubeVersion 的值;apiVersions 会将目标集群存在的 API(包括 CRD)加入 .Capabilities.APIVersions。需要让模板看到 .Release.IsUpgrade 而非 .Release.IsInstall 时,设置 isUpgrade

渲染器提供给模板的对象

模板对象来源
.ValuesHelmValues.BuildAsync 返回的字典。
.ChartChart.yaml 元数据与 Chart 依赖。
.Release构造渲染器时传入的 release 名称、命名空间、revision、服务和安装/升级状态。
.CapabilitiesKubernetes 版本与已知 API 版本。
.FilesChart 中打包的非模板文件。
.Template当前模板名称和基础路径。

命名模板、includetplrequired.Files 以及已实现的 Helm/Sprig 函数都在进程内执行。单个 helper 是否可用,应以函数矩阵为准;不能因为别的 Helm 环境支持它,就假定这里也支持。

清单与 notes 分开处理

NOTES.txt 是 release 后给人的信息,因此 RenderNotes() 会单独返回它,而不是混入 Kubernetes YAML。可以将它与预览一起保存或显示,但绝不能把它交给清单提交器。

高层的 HelmTemplateRequest 在客户端边界提供 KubeVersionApiVersionsIsUpgrade。需要 notes 时应单独渲染;模板输出不会包含 Chart crds/ 目录中的 CRD。需要变更集群时,请继续阅读安装和升级 Release

基于 MIT License 发布。