46d7a28210
Stack de scripts y plantillas para generar reportes diarios del homelab usando n8n como orquestador y un modelo de IA como redactor: - scripts/server-summary.sh: métricas del sistema (CPU, RAM, disco) - scripts/log-digest.sh: resumen de logs de Traefik y contenedores - scripts/health-results.sh: estado de servicios y checks - scripts/codex-reauth.sh: reautenticación OAuth del proveedor Codex - templates/ai-daily-report-prompt.md: prompt para el informe diario - workflows/workflow-design.md: diseño del workflow de n8n - config/services.example.json: ejemplo de configuración de servicios Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
87 lines
2.1 KiB
Bash
Executable File
87 lines
2.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
CONTAINER="${OPENCLAW_GATEWAY_CONTAINER:-openclaw-openclaw-gateway-1}"
|
|
PROVIDER="${OPENCLAW_OAUTH_PROVIDER:-openai-codex}"
|
|
MODE="login"
|
|
|
|
usage() {
|
|
cat <<'EOF'
|
|
Usage:
|
|
codex-reauth [--status] [--container NAME] [--provider ID]
|
|
|
|
Options:
|
|
--status Show current auth status only (no login flow).
|
|
--container NAME Gateway container name (default: openclaw-openclaw-gateway-1).
|
|
--provider ID OAuth provider id (default: openai-codex).
|
|
-h, --help Show this help.
|
|
EOF
|
|
}
|
|
|
|
require_container_running() {
|
|
if ! docker ps --format '{{.Names}}' | grep -qx "$CONTAINER"; then
|
|
echo "ERROR: container '$CONTAINER' is not running." >&2
|
|
echo "Hint: check with 'docker ps | grep openclaw'." >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
show_status() {
|
|
docker exec "$CONTAINER" openclaw models status --status-plain \
|
|
| sed -n '/Auth overview/,$p'
|
|
}
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
--status)
|
|
MODE="status"
|
|
shift
|
|
;;
|
|
--container)
|
|
[[ $# -lt 2 ]] && { echo "ERROR: --container requires a value." >&2; exit 2; }
|
|
CONTAINER="$2"
|
|
shift 2
|
|
;;
|
|
--provider)
|
|
[[ $# -lt 2 ]] && { echo "ERROR: --provider requires a value." >&2; exit 2; }
|
|
PROVIDER="$2"
|
|
shift 2
|
|
;;
|
|
-h|--help)
|
|
usage
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "ERROR: unknown argument '$1'." >&2
|
|
usage >&2
|
|
exit 2
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if ! command -v docker >/dev/null 2>&1; then
|
|
echo "ERROR: docker command not found." >&2
|
|
exit 1
|
|
fi
|
|
|
|
require_container_running
|
|
|
|
if [[ "$MODE" == "status" ]]; then
|
|
show_status
|
|
exit 0
|
|
fi
|
|
|
|
if [[ ! -t 0 || ! -t 1 ]]; then
|
|
echo "ERROR: interactive terminal required for OAuth login." >&2
|
|
echo "Run this command from an interactive shell." >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "Starting OAuth re-auth for provider '$PROVIDER' on container '$CONTAINER'..."
|
|
echo "Open the URL in your local browser and paste the callback URL when prompted."
|
|
docker exec -it "$CONTAINER" openclaw models auth login --provider "$PROVIDER"
|
|
|
|
echo
|
|
echo "Re-auth completed. Current provider status:"
|
|
show_status
|