我在使用一些更复杂的带有初始化和清理逻辑的argo工作流时偶然发现了一个问题。我们正在工作流的一个初始步骤中运行一些初始化(例如,创建一些资源),我们希望执行清理,而不管工作流的状态如何。onExit
模板似乎是一个理想的解决方案(我认为在argo文档中甚至提到清理是为onExit
模板的任务预定的)。
然而,我还没有找到一种方法来传递一些值给它。例如,假设在初始化阶段,我们创建了一些id为some-random-unique-id
的资源,并且我们想让onExit
容器知道它需要清理哪些资源。
我们尝试了一些步骤的outputs
,但onExit
模板中似乎没有steps
。
是否有一个内置的argo机制来传递这类数据?我们希望避免一些外部服务(如保存上下文的键值存储服务)。
可以输出参数标记为全球使用globalName
字段。全局输出参数,假设它已经设置,可以从工作流中的任何地方访问,包括在退出处理程序中。
用于写入和使用全局输出参数的示例文件应该包含在退出处理程序中使用全局输出参数所需的所有信息。
https://github.com/argoproj/argo-workflows/blob/master/examples/global-outputs.yaml
如果你找到一个更干净的解决方案,请分享。
我看到了这个带有参数的退出处理程序的工作流示例,它可以解决您的问题:
我发现的一种方法是向我想要调用退出模板的模板添加步骤,并将退出模板作为最后一步调用,这样我就可以访问步骤变量。我将原始模板更改为内联模板,因此结构没有太大变化,只涉及向退出模板添加最后一步调用。不幸的是,这并没有利用实际的onExit方法。内联步骤模板示例
1. https://sourcegraph.com/github.com/argoproj/argo-workflows/-/blob/examples/exit-handler-with-param.yaml ? L21
2. https://raw.githubusercontent.com/argoproj/argo-workflows/master/examples/steps-inline-workflow.yaml