Error Handling
Handling shell command errors¶
Shell commands can error out sometimes. These errors can be caught in many different ways.
If no the shell command is not being assigned to a variable, the command will interrupt your rulebook:
do: - exit 99 - echo: this will not be echoed due to the above error
Errors can be suppressed by assigning the command execution to a variable. In that case, the variable will hold the return code and error message.
do: - cmd_result = shell: nonexisting_command - if: '{{ cmd_result.rc > 0 }}' then: - echo: here's the error = {{ cmd_result.output }}
Another way shell commands can be caught is with a well-placed try-catch
op.
do: - try: - exit 99 catch: - echo: caught error = ${error_message}
But if you assign the command output to a variable, no error will be thrown,
rendering the try-catch
useless.
Throwing errors with fail
¶
In certain situations you may want to throw errors in your rule. This can be
accomplished with the fail
op. The fail
op will halt the rule and cascade
the failure to an upper scope.
Throwing errors is simple:
do: - fail: oh my, fail here
Be aware that there are different side effects to throwing an error, depending on the context of the rulebook:
-
for a pipeline rule, the current job will fail and remain in an error status.
-
for custom form fields, the user will not be able to open the form and will receive the error message thrown.
Thrown errors can be combined with try-catch
blocks for better flow control:
def: myfunc: - fail: we failed do: - try: - myfunc: catch: - echo: myfunc failed bad=${error_message}