Как обновить Helm Chart.yaml из командной строки - PullRequest
0 голосов
/ 07 мая 2019

Я хочу динамически обновить мой Chart.yaml файл, в частности версию, когда я запускаю команду make helm build.

Например, 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 голосов
/ 07 мая 2019

Прежде всего ваш Chart.yaml не является допустимым YAML, вам нужно вставить разделитель значений (:) перед "1.0" во второй строке.

Предположим, ваш Makefile выглядит так:

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

, ruamel.yaml установлен для вашего Python3 и вашего 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, являющегося float, необходим, так как 0.2 - это float при загрузке YAML, но 0.2.1 - строка. И то, что вы получаете из командной строки, используя sys.argv[2], всегда является строкой.

Вы можете заменить строку cat Chart.yaml для цели helm тем, что вам нужно для запуска с обновленным файлом.

...