将Yaml文件注入Argo工作流程步骤的最佳方法是什么?

时间:2020-03-19 12:03:31

标签: go kubernetes argo-workflows argoproj

摘要:

我们有一个golang应用程序,可根据请求将Argo工作流程提交到kubernetes集群。我想将yaml文件传递给其中一个步骤,我想知道执行此操作的选项是什么。

环境:

  • Argo: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脚本,该脚本接收此文件的路径然后对其进行访问。

要使用golang提交Argo工作流程,我们使用以下依赖项:

谢谢。

1 个答案:

答案 0 :(得分:6)

选项1:将文件作为参数传递

Workflow parameters通常是一小段文字或数字。但是,如果您的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:将文件作为工件传递

Argo支持多种类型的artifacts。可能最适合您的用例的是raw parameter类型。

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客户端

我对golang客户端不熟悉,但是肯定支持传递参数,并且认为也应支持传递原始参数。