如何从命令行更新Helm Chart.yaml

时间:2019-05-06 21:45:29

标签: linux docker yaml kubernetes-helm

当我运行make helm build命令时,我希望动态更新我的Chart.yaml文件,特别是版本。

例如Chart.yaml包含

apiVersion: v1
appVersion "1.0"
description: A helm chart for so and so
name: my app
version: 0.2

我正在寻找一种运行make helm build version=0.3的方法,当该构建完成时,请查看该Chart.yaml构建中的更新版本号

根据我的理解,我无法将变量传递到.yaml文件,因此不确定是否可行?

1 个答案:

答案 0 :(得分:0)

首先,您的Chart.yaml无效的YAML,您需要在第二行的:之前插入一个值分隔符("1.0")。

假设您的Makefile如下:

helm:
        python3 updateversion.py Chart.yaml ${version}
        cat Chart.yaml

,为您的Python3和ruamel.yaml安装了updateversion.py

import sys
from pathlib import Path
import ruamel.yaml

yaml_file = Path(sys.argv[1])

yaml = ruamel.yaml.YAML()
yaml.preserve_quotes = True
# uncomment and adapt next line in case defaults don't match your indentation
# yaml.indent(mapping=4, sequence=4, offset=2)

data = yaml.load(yaml_file)
version = sys.argv[2]
if isinstance(data['version'], float):
    version = float(version)
data['version'] = version

yaml.dump(data, yaml_file)

您可以运行make helm version=0.3来获取输出:

apiVersion: v1
appVersion: "1.0"
description: A helm chart for so and so
name: my app
version: 0.3

需要测试值version为浮点数的技巧,因为加载YAML时0.2是浮点数,而0.2.1是字符串。使用sys.argv[2]从命令行获得的内容始终是字符串。

您可以使用更新文件运行所需的内容替换目标cat Chart.yaml的{​​{1}}行。