I am trying to schedule a workflow C
when both workflows A
and B
complete their daily run.
Is there any way to do this without using the workflow of workflows pattern?
I'm assuming A
and B
run in parallel.
If you could incorporate workflows A
and B
into a single workflow AB
with parallel steps A
and B
, then you could use a mutex to delay the execution of C
until after AB
finishes.
apiVersion: argoproj.io/v1alpha1
kind: CronWorkflow
metadata:
name: AB
spec:
schedule: "* * * * *"
workflowSpec:
entrypoint: AB
synchronization:
mutex:
name: AB-C-mutex
templates:
- name: AB
steps:
- - name: A
templateRef:
name: A
template: A
- name: B
templateRef:
name: B
template: B
---
apiVersion: argoproj.io/v1alpha1
kind: CronWorkflow
metadata:
name: C
spec:
schedule: "* * * * *"
workflowSpec:
entrypoint: C
synchronization:
mutex:
name: AB-C-mutex
templates:
# The rest of the workflow.
You would need to make sure C
starts long enough after AB
for AB
to claim the mutex.
You could avoid combining A
and B
into one workflow if Argo supported using more than one mutex/semaphore per workflow. Currently, there are no plans to support that.
Another option would be to combine all three workflows into a single workflow (with A
and B
running in parallel before C
).