目前 Argo Workflows 并没有内置变量来表示上一次或者下一次计划时间。不过我们可以通过自定义参数来实现这个功能。
以上一次计划时间为例,我们可以自定义一个参数 "lastScheduledTime",并在每次执行时将当前时间作为这个参数的值传入。这样在下一次执行时,我们就可以通过{{workflow.parameters.lastScheduledTime}}获取上一次的计划时间。
例如在 YAML 文件中定义一个 CronWorkflow,其中我们定义了一个参数 lastScheduledTime 并在每次执行时将当前时间传入:
apiVersion: argoproj.io/v1alpha1
kind: CronWorkflow
metadata:
name: example
spec:
schedule: "0 * * * *"
concurrencyPolicy: Forbid
workflowSpec:
entrypoint: my-workflow
arguments:
parameters:
- name: lastScheduledTime
value: "{{workflow.status.startedAt}}"
templates:
- name: my-workflow
# ...
在 Workflow 中,我们可以通过 {{workflow.parameters.lastScheduledTime}} 获取上一次的计划时间,并通过 Argo 提供的时间函数计算下一次的计划时间,例如:
spec:
entrypoint: my-workflow
arguments:
parameters:
- name: lastScheduledTime
value: "{{workflow.parameters.lastScheduledTime}}"
templates:
- name: my-workflow
# ...
# 计算下一次计划时间
# 将上一次的计划时间转换为时间戳,再加上一小时的秒数
# 最后将结果转换回时间格式
# 可以根据特定的 Cron 格式自定义计算方式
ttlStrategy:
secondsAfterCompletion: 3600
clockAccuracy: PT1M
secondsBeforeSuccess: 0
secondsAfterSuccess: 0
backoff:
duration: PT15M
factor