将 yaml 文件注入 Argo 工作流程步骤的最佳方式是什么?
What's the best way to inject a yaml file into an Argo workflow step?
总结:
我们有一个 golang 应用程序,可根据请求将 Argo 工作流提交到 kubernetes 集群。我想将 yaml 文件传递给其中一个步骤,我想知道执行此操作的选项是什么。
环境:
- 阿尔戈: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 工作流,我们使用以下依赖项:
- https://github.com/argoproj/argo-workflows/tree/master/pkg/client
- https://github.com/argoproj/argo-workflows/tree/master/pkg/apis
谢谢。
选项 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. Perhaps the simplest for your use case is the 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客户端不熟悉,不过传参肯定是支持的,我觉得传raw参数应该也支持
总结:
我们有一个 golang 应用程序,可根据请求将 Argo 工作流提交到 kubernetes 集群。我想将 yaml 文件传递给其中一个步骤,我想知道执行此操作的选项是什么。
环境:
- 阿尔戈: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 工作流,我们使用以下依赖项:
- https://github.com/argoproj/argo-workflows/tree/master/pkg/client
- https://github.com/argoproj/argo-workflows/tree/master/pkg/apis
谢谢。
选项 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. Perhaps the simplest for your use case is the 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客户端不熟悉,不过传参肯定是支持的,我觉得传raw参数应该也支持