Configure a sub-playbook loop

Looping uses sub-playbooks to create loops within the main playbook. When running the loop, the values are calculated based on the context data for the sub-playbook and not the main playbook.

Consider the following when adding a loop:

* The maximum number of loops (default is 100). A high number of loops or a high wait time combined with a large number of issues may affect performance.
* Periodically check looping conditions to ensure they are still valid for the data set.
* If you want a sub playbook task to loop over an array passed into its input, you need to configure a loop. Otherwise it takes in the whole array and runs once.

#### How to create a sub-playbook loop

1. In the Playbooks page, select the parent playbook that contains the sub-playbook task you want to run in a loop.
2. Right click and select Edit.

 If the playbook is installed from a content pack, you need to duplicate or detach the playbook before editing.
3. Click the sub-playbook for which you want to create the loop.
4. In the Task Details pane, click the Loop tab.
5. Click one of the following options to define loop settings:
 * None: (Default) The sub-playbook does not loop.
 * Built-in: Use built-in functions to define loop settings:

 | Option | Description |
 | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
 | Exit when | Enables you to define when to exit the loop. Click {} and expand the source category. Hover over the required source and click **Filter & Transform** to the left of the source to manipulate the data. |
 | Equals (String) | Select the operator to define how the values should be evaluated. |
 | Max iterations | <p>The number of times the loop should run.</p><div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><p>Balance the number of iterations and the interval to avoid overloading the server.</p></div> |
 | Sleep | <p>The number of seconds to wait between iterations.</p><p>recommends that you balance between the number of iterations and the number of seconds to wait between iterations so you don't overload the server.</p> |
 * For each input: Runs the sub-playbook based on defined inputs. Enter the number of seconds to wait between iterations.
 * Choose Loop automation: Select the automation from the drop-down list to define when to exit the loop. The parameters that appear apply to the selected automation.
6. To save the changes, click OK.

#### **Example: Exit looping after running for all inputs**

In the parent playbook (the task that contains the sub-playbook), you can configure to exit a loop running the sub-playbook automatically when the last item in the sub-playbook input is executed.

* If the input is a single item, the sub-playbook runs once, but if the input is a list of items (such as a list of issue IDs), the sub-playbook runs as many times as there are items in the list. Each iteration of the sub-playbook uses the next item in the list as the input.
* If there are multiple input lists with the same number of items, the sub-playbook runs once for each set of inputs.
* If there are multiple input lists with different amounts of items, the sub-playbook runs the first set of inputs, followed by the second, third, and so on, until the end.

 For example:

 | Input | Value |
 | ------- | ------- |
 | Input x | 1,2,3,4 |
 | Input y | a,b,c,d |
 | Input z | 9 |

 The first loop: 1, a, 9

 The second loop: 2, b, 9

 The third loop: 3, c, 9

 The fourth loop: 4, d, 9