diff --git a/docs/fields.md b/docs/fields.md index 3abd9071afba..e41444314fff 100644 --- a/docs/fields.md +++ b/docs/fields.md @@ -210,6 +210,8 @@ Workflow is the definition of a workflow resource - [`life-cycle-hooks-wf-level.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/life-cycle-hooks-wf-level.yaml) +- [`loops-arbitrary-sequential-steps.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-arbitrary-sequential-steps.yaml) + - [`loops-dag.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-dag.yaml) - [`loops-maps.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-maps.yaml) @@ -635,6 +637,8 @@ WorkflowSpec is the specification of a Workflow. - [`life-cycle-hooks-wf-level.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/life-cycle-hooks-wf-level.yaml) +- [`loops-arbitrary-sequential-steps.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-arbitrary-sequential-steps.yaml) + - [`loops-dag.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-dag.yaml) - [`loops-maps.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-maps.yaml) @@ -1068,6 +1072,8 @@ CronWorkflowSpec is the specification of a CronWorkflow - [`life-cycle-hooks-wf-level.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/life-cycle-hooks-wf-level.yaml) +- [`loops-arbitrary-sequential-steps.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-arbitrary-sequential-steps.yaml) + - [`loops-dag.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-dag.yaml) - [`loops-maps.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-maps.yaml) @@ -1345,6 +1351,8 @@ Arguments to a template - [`label-value-from-workflow.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/label-value-from-workflow.yaml) +- [`loops-arbitrary-sequential-steps.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-arbitrary-sequential-steps.yaml) + - [`loops-dag.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-dag.yaml) - [`loops-maps.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-maps.yaml) @@ -2156,6 +2164,8 @@ Parameter indicate a passed string parameter to a service template with an optio - [`label-value-from-workflow.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/label-value-from-workflow.yaml) +- [`loops-arbitrary-sequential-steps.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-arbitrary-sequential-steps.yaml) + - [`loops-dag.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-dag.yaml) - [`loops-maps.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-maps.yaml) @@ -2719,6 +2729,8 @@ Inputs are the mechanism for passing parameters, artifacts, volumes from one tem - [`key-only-artifact.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/key-only-artifact.yaml) +- [`loops-arbitrary-sequential-steps.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-arbitrary-sequential-steps.yaml) + - [`loops-dag.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-dag.yaml) - [`loops-maps.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-maps.yaml) @@ -3023,6 +3035,8 @@ WorkflowStep is a reference to a template to execute in a series of step - [`life-cycle-hooks-wf-level.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/life-cycle-hooks-wf-level.yaml) +- [`loops-arbitrary-sequential-steps.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-arbitrary-sequential-steps.yaml) + - [`loops-maps.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-maps.yaml) - [`loops-param-argument.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-param-argument.yaml) @@ -4725,6 +4739,8 @@ ObjectMeta is metadata that all persisted resources must have, which includes al - [`life-cycle-hooks-wf-level.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/life-cycle-hooks-wf-level.yaml) +- [`loops-arbitrary-sequential-steps.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-arbitrary-sequential-steps.yaml) + - [`loops-dag.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-dag.yaml) - [`loops-maps.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-maps.yaml) @@ -5325,6 +5341,8 @@ A single application container that you want to run within a pod. - [`life-cycle-hooks-wf-level.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/life-cycle-hooks-wf-level.yaml) +- [`loops-arbitrary-sequential-steps.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-arbitrary-sequential-steps.yaml) + - [`loops-dag.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-dag.yaml) - [`loops-maps.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-maps.yaml) @@ -6046,6 +6064,8 @@ PersistentVolumeClaimSpec describes the common attributes of storage devices and - [`life-cycle-hooks-wf-level.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/life-cycle-hooks-wf-level.yaml) +- [`loops-arbitrary-sequential-steps.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-arbitrary-sequential-steps.yaml) + - [`loops-dag.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-dag.yaml) - [`loops-maps.yaml`](https://github.com/argoproj/argo-workflows/blob/master/examples/loops-maps.yaml) diff --git a/examples/loops-arbitrary-sequential-steps.yaml b/examples/loops-arbitrary-sequential-steps.yaml new file mode 100644 index 000000000000..1d30b0be1e70 --- /dev/null +++ b/examples/loops-arbitrary-sequential-steps.yaml @@ -0,0 +1,49 @@ +# This example demonstrates a workflow accepting a list of items (as JSON string) +# as an input parameter, and using it for expanding a step into a sequential task +# of arbitrary steps. When a step fails, the iteration will break, stopping +# following steps from running. +apiVersion: argoproj.io/v1alpha1 +kind: Workflow +metadata: + generateName: loop-arbitrary-sequential-steps- +spec: + entrypoint: loop-arbitrary-sequential-steps-example + arguments: + parameters: + - name: step_params + value: | + [ + { "exit_code": 0, "message": "succeeds 1" }, + { "exit_code": 0, "message": "succeeds 2" }, + { "exit_code": 0, "message": "succeeds 3" }, + { "exit_code": 1, "message": "will fail and stop here" }, + { "exit_code": 0, "message": "will not run" }, + { "exit_code": 0, "message": "will not run" } + ] + templates: + - name: loop-arbitrary-sequential-steps-example + inputs: + parameters: + - name: step_params + parallelism: 1 + failFast: true + steps: + - - name: unit-step + template: unit-step-template + arguments: + parameters: + - name: exit_code + value: "{{item.exit_code}}" + - name: message + value: "{{item.message}}" + withParam: "{{inputs.parameters.step_params}}" + + - name: unit-step-template + inputs: + parameters: + - name: exit_code + - name: message + container: + image: alpine + command: [ '/bin/sh', '-c' ] + args: [ "echo {{inputs.parameters.message}}; exit {{inputs.parameters.exit_code}}" ]