Manejo de Errores
Manejo de errores de comandos shell¶
Los comandos shell a veces pueden fallar. Estos errores se pueden capturar de muchas maneras diferentes.
Si el comando shell no se está asignando a una variable, el comando interrumpirá su rulebook:
do: - exit 99 - echo: esto no se mostrará debido al error anterior
Los errores se pueden suprimir asignando la ejecución del comando a una variable. En ese caso, la variable contendrá el código de retorno y el mensaje de error.
do: - cmd_result = shell: nonexisting_command - if: '{{ cmd_result.rc > 0 }}' then: - echo: aquí está el error = {{ cmd_result.output }}
Otra forma de capturar comandos shell es con un bloque try-catch bien ubicado.
do: - try: - exit 99 catch: - echo: error capturado = ${error_message}
Pero si asigna la salida del comando a una variable, no se lanzará ningún error,
haciendo que el try-catch sea inútil.
Lanzar errores con fail¶
En ciertas situaciones puede querer lanzar errores en su regla. Esto se puede
lograr con la operación fail. La operación fail detendrá la regla y cascará
el fallo a un ámbito superior.
Lanzar errores es simple:
do: - fail: oh my, fail here
Tenga en cuenta que hay diferentes efectos secundarios al lanzar un error, dependiendo del contexto del rulebook:
-
para una regla de pipeline, el trabajo actual fallará y permanecerá en un estado de error.
-
para campos de formulario personalizados, el usuario no podrá abrir el formulario y recibirá el mensaje de error lanzado.
Los errores lanzados se pueden combinar con bloques try-catch para un mejor control de flujo:
def: myfunc: - fail: hemos fallado do: - try: - myfunc: catch: - echo: myfunc falló mal=${error_message}