Каков наилучший способ внедрить файл yaml в шаг рабочего процесса Ar go? - PullRequest
2 голосов
/ 19 марта 2020

Резюме:

У нас есть приложение golang, которое отправляет рабочие потоки Ar go в кластер kubernetes по запросам. Я хотел бы передать файл yaml на один из шагов, и мне интересно, каковы варианты для этого.

Среда:

  • Ar go: v2 .4.2
  • K8s: 1.13.12-gke.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, который получает путь к этому файлу и затем обращается к нему.

Для отправки Ar go рабочие процессы с golang, мы используем следующие зависимости:

Спасибо.

1 Ответ

2 голосов
/ 21 марта 2020

Вариант 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: передать файл как артефакт

Ar go поддерживает несколько типов артефактов . Возможно, самым простым для вашего случая использования является тип raw * * * * * *.

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, Ar go поддерживает "S3, Artifactory, HTTP, [and] Git "Артефакты (среди прочего, я думаю).

Если, например, вы решили использовать S3, вы можете загрузить файл из приложения golang, а затем передать ведро и ключ S3 в качестве параметров.

Golang client

Я не знаком с golang клиентом, но передача параметров, безусловно, поддерживается, и я думаю, передача в необработанном параметре должна поддерживаться также.

...