Как лучше всего внедрить yaml-файл в шаг рабочего процесса Argo?
Резюме:
У нас есть приложение golang, которое отправляет рабочие процессы Argo в кластер kubernetes по запросу. Я хотел бы передать yaml-файл на один из шагов, и мне интересно, какие варианты для этого есть.
Среда:
- Арго: v2.4.2
- К8с: 1.13.12-гке.25
Дополнительные детали:
В конце концов, я хотел бы передать этот файл на этап тестирования, как показано в этом примере:
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: test-
spec:
entrypoint: test
templates:
- name: test
container:
image: gcr.io/testproj/test:latest
command: [bash]
source: |
python test.py --config_file_path=/path/to/config.yaml
Изображение, используемое на этом шаге, будет иметь скрипт python, который получает путь к этому файлу и затем обращается к нему.
Чтобы представить рабочие процессы Argo с помощью golang, мы используем следующие зависимости:
- https://github.com/argoproj/argo/tree/master/pkg/client
- https://github.com/argoproj/argo/tree/master/pkg/apis
Спасибо.
1 ответ
Вариант 1: передать файл в качестве параметра
Параметры рабочего процесса обычно представляют собой небольшие фрагменты текста или чисел. Но если ваш yaml-файл достаточно мал, вы можете закодировать его и передать в качестве параметра.
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: test-
spec:
entrypoint: test
arguments:
parameters:
- name: yaml
value: "string-encoded yaml"
templates:
- name: test
container:
image: gcr.io/testproj/test:latest
command: [bash]
source: |
# In this case, the string-encoding should be BASH-compatible.
python test.py --config_file_as_string="{{inputs.parameters.message}}"
Вариант 2: передать файл как артефакт
Арго поддерживает несколько типов артефактов. Возможно, самым простым для вашего варианта использования является тип исходного параметра.
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: test-
spec:
entrypoint: test
templates:
- name: test
inputs:
artifacts:
- name: yaml
path: /path/to/config.yaml
raw:
data: |
this is
the raw file
contents
container:
image: gcr.io/testproj/test:latest
command: [bash]
source: |
python test.py --config_file_path=/path/to/config.yaml
Кроме raw
, Argo поддерживает артефакты "S3, Artifactory, HTTP, [и] Git" (среди прочего, я думаю).
Если, например, вы решили использовать S3, вы можете загрузить файл из своего приложения golang, а затем передать корзину и ключ S3 в качестве параметров.
Клиент Голанга
Я не знаком с клиентом golang, но передача параметров определенно поддерживается, и я думаю, что передача необработанного параметра также должна поддерживаться.