命令Helm get的结果值不包含注释

时间:2019-08-21 02:24:46

标签: kubernetes-helm

我有一个值文件values-production.yaml,其注释如下:

# some other comments
# another comments
image: xxxx

然后,我使用命令helm install -n=test --values=values-production.yaml some-chart在群集上部署应用程序。但是,当我使用命令helm get values test时,结果如下:

image: xxx

没有任何评论。我的评论在哪里?如何保留评论?

我的头盔版本: 客户端:v2.11.0 伺服器:v2.11.0

1 个答案:

答案 0 :(得分:2)

这是不可能的,因为helm install不会照原样上传您的values-production.yaml文件。相反,它将构造一个对象,该对象表示来自各种默认值和输入的所有值,然后将该对象转换为文件并将其发布到服务器。在转换为对象时,所有注释都将丢失。

helm install命令的实现方式的核心是here

func (i *installCmd) run() error {
    // omitting some code
    // note below rawVals is the output of the vals function

    rawVals, err := vals(i.valueFiles, i.values, i.stringValues, i.fileValues, i.certFile, i.keyFile, i.caFile)

    // omitting some code
    // note below the client asks the server to install the chart, passing values
    // via rawVals constructed above

    res, err := i.client.InstallReleaseFromChart(
        chartRequested,
        i.namespace,
        helm.ValueOverrides(rawVals),
        helm.ReleaseName(i.name),
        helm.InstallDryRun(i.dryRun),
        helm.InstallReuseName(i.replace),
        helm.InstallDisableHooks(i.disableHooks),
        helm.InstallDisableCRDHook(i.disableCRDHook),
        helm.InstallSubNotes(i.subNotes),
        helm.InstallTimeout(i.timeout),
        helm.InstallWait(i.wait),
        helm.InstallDescription(i.description))

    // more code omitted
}

herevals的工作-请注意,值文件中的数据将进入base对象,并且该东西最终被序列化为YAML并由{返回{1}}:

vals

Helm不能用于文件共享,如果func vals(valueFiles valueFiles, values []string, stringValues []string, fileValues []string, CertFile, KeyFile, CAFile string) ([]byte, error) { base := map[string]interface{}{} // omitting code that populates base with all the values from valuesFiles, etc. return yaml.Marshal(base) } 中有想要存储,检索和共享的文本对Helm而言在语义上没有意义(例如注释),那么您我将不得不考虑其他解决方案。不确定用例是什么,但是可以考虑使用一些Blobstore服务,DropBox等。