Saltar al contenido principal

Salida y scripting

Formato​

--output (-o) acepta human (default) o json. Cualquier otro valor se trata como human.

  • human: tablas y campos alineados, con color. No es estable: puede cambiar entre versiones. No lo parsees.
  • json: el contrato. Es el JSON del objeto que devuelve el kernel (los nombres de campo son los del SDK, por ejemplo executionId, status), con indentación de dos espacios.

El contrato Renderer​

Todo resultado implementa output.Renderer, que en el código es una sola función: Human() string. El JSON sale de encoding/json aplicado al propio resultado; por convención cada resultado define además MarshalJSON() para devolver el objeto del SDK en lugar de su envoltorio. output.Render elige entre las dos según --output.

No todos los comandos pasan por Render: config profile list/show imprimen texto plano a stdout, y apply, config init, config set y el resto de config profile informan por stderr. generate accounts imprime su resumen a stdout sin pasar por Render. En todos ellos -o json no cambia nada.

stdout, stderr y códigos de salida​

Con -o json, stdout lleva solo el JSON. Spinner, pasos, avisos, --verbose y la pista de reanudación van por stderr, y con -o json el spinner de espera se silencia.

El código de salida es 0 si el comando terminó bien y 1 ante cualquier error (argumentos inválidos, fallo gRPC, ejecución FAILED_*, timeout). No hay otros códigos.

En un pipeline​

id=$(octopus transaction execute system.initial-funds \
--input amount=500000 --input destination="$ACCOUNT" \
--tenant acme-bank --detach -o json | jq -r .executionId)

octopus execution wait "$id" -o json | jq -r .status # SUCCEEDED

execution wait sale con 1 si la ejecución termina en FAILED_FINAL o FAILED_RETRYABLE, así que sirve directo en un set -e.