Aucune description

update-shuffle-workflow-from-template.sh 2.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #!/usr/bin/env bash
  2. set -euo pipefail
  3. SHUFFLE_BASE_URL="${SHUFFLE_BASE_URL:-http://localhost:5001}"
  4. SHUFFLE_API_KEY="${SHUFFLE_API_KEY:-}"
  5. WORKFLOW_ID="${1:-0b2c5b48-0e02-49a3-8e12-2bc892ac15f9}"
  6. TEMPLATE_FILE="${2:-shuffle-workflows/sample-webhook-soc-integrator-iris-workflow.json}"
  7. if [[ -z "${SHUFFLE_API_KEY}" ]]; then
  8. echo "error: SHUFFLE_API_KEY is required"
  9. echo "example: SHUFFLE_API_KEY=xxxx scripts/update-shuffle-workflow-from-template.sh"
  10. exit 1
  11. fi
  12. if [[ ! -f "${TEMPLATE_FILE}" ]]; then
  13. echo "error: template file not found: ${TEMPLATE_FILE}"
  14. exit 1
  15. fi
  16. tmp_payload="$(mktemp)"
  17. trap 'rm -f "${tmp_payload}"' EXIT
  18. python3 - "${TEMPLATE_FILE}" "${WORKFLOW_ID}" > "${tmp_payload}" <<'PY'
  19. import json
  20. import sys
  21. template_file = sys.argv[1]
  22. workflow_id = sys.argv[2]
  23. with open(template_file, "r", encoding="utf-8") as fh:
  24. wf = json.load(fh)
  25. wf["id"] = workflow_id
  26. for field in ("created", "edited", "last_runtime", "owner", "updated_by"):
  27. wf.pop(field, None)
  28. print(json.dumps(wf))
  29. PY
  30. curl -sS -o /tmp/shuffle_workflow_update_resp.json -w "%{http_code}" \
  31. -X PUT "${SHUFFLE_BASE_URL}/api/v1/workflows/${WORKFLOW_ID}" \
  32. -H "Authorization: Bearer ${SHUFFLE_API_KEY}" \
  33. -H "Content-Type: application/json" \
  34. --data-binary "@${tmp_payload}" >/tmp/shuffle_workflow_update_status.txt
  35. http_status="$(cat /tmp/shuffle_workflow_update_status.txt)"
  36. response="$(cat /tmp/shuffle_workflow_update_resp.json)"
  37. if [[ "${http_status}" != "200" ]]; then
  38. echo "error: workflow update failed (HTTP ${http_status})"
  39. echo "${response}"
  40. exit 1
  41. fi
  42. WORKFLOW_UPDATE_RESPONSE="${response}" python3 - <<'PY'
  43. import json
  44. import os
  45. import sys
  46. raw = os.environ.get("WORKFLOW_UPDATE_RESPONSE", "")
  47. try:
  48. data = json.loads(raw)
  49. except Exception:
  50. print("updated, but response is not valid JSON:")
  51. print(raw[:600])
  52. sys.exit(0)
  53. if isinstance(data, dict) and data.get("success") is False:
  54. print("error: API returned success=false")
  55. print(raw)
  56. sys.exit(1)
  57. workflow_id = data.get("id") if isinstance(data, dict) else None
  58. name = data.get("name") if isinstance(data, dict) else None
  59. print(f"updated: {name or '<unknown>'} id={workflow_id or '<unknown>'}")
  60. PY