Generating a VCF Management Services Support Bundle Using VCF Services Runtime API when Fleet lifecycle is unavailable
search cancel

Generating a VCF Management Services Support Bundle Using VCF Services Runtime API when Fleet lifecycle is unavailable

book

Article ID: 444466

calendar_today

Updated On:

Products

VCF Automation

Issue/Introduction

When there is an ongoing issue with VCF Management Services, it is possible customer will be unable to generate support bundle using standard mechanism of triggering from the Fleet Lifecycle UI or API. In such cases, we need a mechanism to trigger and download a support bundle for the VCF management services programmatically using the VCF Services Runtime API.

Environment

VCF 9.1

Cause

Support bundle collection is only available through the UI by default. In environments where UI access is unavailable or automation is required, the API can be used directly.

Resolution

The support bundle can be generated and downloaded using the following steps. At a high level, the steps involve submitting a generate request, receiving a bundle ID, then polling until overall Status reaches a terminal state, and then downloading using the URL provided in the response.

Step 1: Obtain an access token

export PLATFORM_HOST="https://<VCF Management Services FQDN>"
export ADMIN_USERNAME="admin@vsp.local"
export ADMIN_PASSWORD="<your-password>"

export TOKEN=$(curl -ks --request POST \
  --url "${PLATFORM_HOST}/api/v1/identity/token" \
  --header "Content-Type: application/x-www-form-urlencoded" \
  --data-urlencode "grant_type=password" \
  --data-urlencode "username=${ADMIN_USERNAME}" \
  --data-urlencode "password=${ADMIN_PASSWORD}" \
  | jq -r '.access_token')

Step 2: Submit the support bundle request

To collect logs for the entire platform, specify "type": "vsp". To also include a specific managed component (e.g. VIDB), add a second entry with its component ID obtained from GET /api/v1/components.

export BUNDLE_ID=$(curl -ks -X POST \
  "${PLATFORM_HOST}/api/v1/system/support-bundles?action=generate" \
  -H "Authorization: Bearer ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "components": [
      { "type": "vsp" }
    ],
    "lookBackWindow": "2d",
    "timeout": "12h",
    "ttl": "4h"
  }' | jq -r '.id')

echo "Bundle ID: ${BUNDLE_ID}"

Request body parameters

componentsarrayRequired. Each entry must specify either type (e.g. vsp) or id (component UUID). At least one entry is required.
lookBackWindowstring2dHow far back to retrieve collected log data. Format: Nh (hours) or Nd (days). Maximum 14d.
timeWindowobjectAbsolute time range using startTime and endTime (RFC 3339 format). Takes precedence over lookBackWindow when both are specified.
dataTypesarrayallRestrict collection to specific data types. Omit this field to include all types.
timeoutstring12hMaximum wall-clock time to allow for bundle generation. Maximum 24h.
ttlstring4hHow long the download link remains valid after the bundle is generated. Minimum 1h, maximum 8h.
skipCachebooleanfalseIf true, skips cached cluster dump data and re-collects from scratch.

 

Step 3: Poll for completion

The request returns immediately with overallStatus: Progressing. Repeat the following call every 30 seconds until overallStatus reaches a terminal state.

curl -ks \
  "${PLATFORM_HOST}/api/v1/system/support-bundles/${BUNDLE_ID}" \
  -H "Authorization: Bearer ${TOKEN}" \
  | jq '{overallStatus, result}'

overallStatus values

PendingNoRequest accepted, collection not yet started
ProgressingNoCollection actively in progress
SuccessfulYesAll components collected successfully
PartialSuccessYesCollection completed but one or more components failed; the bundle is still available for download
FailedYesGeneration failed entirely; no bundle was produced

Step 4: Download the bundle

When overallStatus is Successful or PartialSuccess, retrieve result.downloadUrl from the status response and download using the same Bearer token.

export SIGNED_DOWNLOAD_URL=$(curl -ks \
  "${PLATFORM_HOST}/api/v1/system/support-bundles/${BUNDLE_ID}" \
  -H "Authorization: Bearer ${TOKEN}" \
  | jq -r '.result.downloadUrl')

curl -ks -o "support-bundle-${BUNDLE_ID}.tgz" 
  "${SIGNED_DOWNLOAD_URL}"

echo "Saved: support-bundle-${BUNDLE_ID}.tgz"
Note: The download link expires after the ttl duration (default 4 hours from generation time). After expiry the bundle is permanently deleted and cannot be recovered. Submit a new generate request if needed.

Example responses

Generate response (HTTP 201)

{
  "id": "BUNDLE_ID", "success": null, "messages": [], "input": { "components": [{ "type": "vsp" }], "lookBackWindow": "2d", "timeout": "12h", "ttl": "4h" }, "result": null, "overallStatus": "Progressing", "createdAt": "2026-05-12T20:00:00Z" } 

Poll response when complete (HTTP 200)

{
  "id": "BUNDLE_ID", "success": true, "messages": [], "overallStatus": "Successful", "result": { "downloadUrl": "https://<platform_fqdn>/api/v1/signed-support-bundles/vcf-bundle-<BUNDLE_ID>y.tgz?expires=<Expiry_date_&_time>&sig=<MD5 Checksum>",
    "bundleSize": 524288000,
    "generationTime": "2026-05-12T20:11:00Z",
    "expirationTime": "2026-05-13T00:11:00Z",
    "components": [{ "type": "vsp" }],
    "timeWindow": {
      "startTime": "2026-05-10T20:11:00Z",
      "endTime": "2026-05-12T20:11:00Z"
    }
  }
}