每当使用 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 安装,您可以 set a default artifact repository在工作流 Controller 的配置图中。这将允许您仅指定key
(假设您在默认配置中设置了其他所有内容 - 如果没有为默认定义所有内容,您将需要指定更多内容)。
不幸的是,这仅在您仅使用一种 S3 配置时才有效。如果您需要多种配置,减少样板文件将会更加困难。
回答您的具体问题:不完全是。您无法创建自定义 some-keyname
(例如 custom-s3
)作为 artifacts
数组的成员。 YAML 的确切格式在 Argo 的 Workflow Custom Resource Definition 中定义。 。如果您的工作流程 YAML 与该规范不匹配,它将被拒绝。
但是,在将 YAML 安装到集群中之前,您可以使用外部模板工具来填充样板文件。我之前曾使用 Helm 通过一组 S3 配置来完成此操作。最简单的是,您可以使用诸如 sed
之类的东西。
tl;dr - 对于一个 S3 配置,使用默认工件配置;对于多个 S3 配置,请使用模板工具。
关于argo-workflows - 创建自定义 Argo 工件类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64811799/