当我运行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文件,因此不确定是否可行?
答案 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}}行。