首页 > 解决方案 > 创建自定义 Argo 工件类型

问题描述

每当使用 S3 工件时,都需要以下声明:

s3:
  endpoint: s3.amazonaws.com
  bucket: "{{workflow.parameters.input-s3-bucket}}"
  key: "{{workflow.parameters.input-s3-path}}/scripts/{{inputs.parameters.type}}.xml"
  accessKeySecret:
    name: s3-access-user-creds
    key: accessKeySecret
  secretKeySecret:
    name: s3-access-user-creds
    key: secretKeySecret

如果可以将其抽象为以下内容,那将很有帮助:

custom-s3:
  bucket: "{{workflow.parameters.input-s3-bucket}}"
  key: "{{workflow.parameters.input-s3-path}}/scripts/{{inputs.parameters.type}}.xml"

有没有办法在 Argo 中进行这种自定义定义以减少样板文件?

标签: argo-workflows

解决方案


对于给定的 Argo 安装,您可以在工作流控制器的 configmap 中设置默认工件存储库。这将允许您仅指定key(假设您在默认配置中设置了其他所有内容 - 如果没有为默认配置定义所有内容,您将需要指定更多内容)。

不幸的是,这只有在您只使用一个 S3 配置时才有效。如果您需要多种配置,减少样板文件将更加困难。

针对您的具体问题:不完全是。您不能创建自定义some-keyname(如custom-s3)作为artifacts数组的成员。YAML 的确切格式在 Argo 的Workflow Custom Resource Definition中定义。如果您的 Workflow YAML 与该规范不匹配,它将被拒绝。

但是,您可以在将 YAML 安装到集群中之前使用外部模板工具来填充样板文件。我之前使用 Helm 来通过一组 S3 配置来做到这一点。在最简单的情况下,您可以使用类似sed.

tl;dr - 对于一个 S3 配置,使用默认工件配置;对于多个 S3 配置,请使用模板工具。


推荐阅读