Skip to content

Control patterns

Some analytic workflows have a dynamic behaviour - for example, skipping a step based on the user input. Thus, this kind of workflow can not be represented by a static sequence of steps. To overcome this issue, WDL understands also some basic directives, which can be used to create steps. By using conditions and loops inside the WDL file the steps of a workflow can be constructed in a dynamic way based on the user input.


Each directive starts with # and has to be at beginning of a line.

If condition

You can use every input parameter (in this example $choice) to build logical conditions. More about conditions and syntax examples can be found in the Velocity manual.

id: if-example
name: IF Condition Example
version: 1.0
#if ($choice == "yes")
    - name: Yes Step
      cmd: /bin/echo yes select
      stdout: true

#if ($choice == "no")
    - name: No Step
      cmd: /bin/echo no select
      stdout: true
    - id: choice
      description: Select a value
        no: No
        yes: Yes
      type: list


You can use loops to add steps to your workflow dynamically:

id: loop-example
name: Loop Example
version: 1.0
#foreach($i in [1..10])
    - name: Step $i
      cmd: /bin/echo I am step number $i
      stdout: true