--- name: List Components description: Fetch component names from Sippy component readiness API --- # List Components This skill provides functionality to fetch a list of all component names tracked in the Sippy component readiness system for a specific OpenShift release. ## When to Use This Skill Use this skill when you need to: - Get a complete list of components for a specific release - Validate component names before querying regression or bug data - Discover available components for analysis - Generate component lists for reports or documentation - Understand which teams/components are tracked in Sippy - Provide autocomplete suggestions for component names ## Prerequisites 1. **Python 3 Installation** - Check if installed: `which python3` - Python 3.6 or later is required - Comes pre-installed on most systems 2. **Network Access** - The script requires network access to reach the Sippy API - Ensure you can make HTTPS requests to `sippy.dptools.openshift.org` ## Implementation Steps ### Step 1: Verify Prerequisites First, ensure Python 3 is available: ```bash python3 --version ``` If Python 3 is not installed, guide the user through installation for their platform. ### Step 2: Locate the Script The script is located at: ``` plugins/component-health/skills/list-components/list_components.py ``` ### Step 3: Run the Script Execute the script with the release parameter: ```bash # Get components for release 4.21 python3 plugins/component-health/skills/list-components/list_components.py \ --release 4.21 # Get components for release 4.20 python3 plugins/component-health/skills/list-components/list_components.py \ --release 4.20 ``` **Important**: The script automatically appends "-main" to the release version to construct the view parameter (e.g., "4.21" becomes "4.21-main"). ### Step 4: Process the Output The script outputs JSON data with the following structure: ```json { "release": "4.21", "view": "4.21-main", "component_count": 42, "components": [ "API", "Build", "Cloud Compute", "Cluster Version Operator", "Etcd", "Image Registry", "Installer", "Kubernetes", "Management Console", "Monitoring", "Networking", "OLM", "Storage", "etcd", "kube-apiserver", "..." ] } ``` **Field Descriptions**: - `release`: The release identifier that was queried - `view`: The constructed view parameter used in the API call (release + "-main") - `component_count`: Total number of unique components found - `components`: Alphabetically sorted array of unique component names **If View Not Found**: If the release view doesn't exist, the script will return an HTTP 404 error: ``` HTTP Error 404: Not Found View '4.99-main' not found. Please check the release version. ``` ### Step 5: Use the Component List Based on the component list, you can: 1. **Validate component names**: Check if a component exists before querying data 2. **Generate documentation**: Create component lists for reports 3. **Filter queries**: Use component names to filter regression or bug queries 4. **Autocomplete**: Provide suggestions when users type component names 5. **Discover teams**: Understand which components/teams are tracked ## Error Handling The script handles several error scenarios: 1. **Network Errors**: If unable to reach Sippy API ``` Error: URL Error: [reason] ``` 2. **HTTP Errors**: If API returns an error status ``` Error: HTTP Error 404: Not Found View '4.99-main' not found. Please check the release version. ``` 3. **Invalid Release**: Script returns exit code 1 with error message 4. **Parsing Errors**: If API response is malformed ``` Error: Failed to fetch components: [details] ``` ## Output Format The script outputs JSON to stdout with: - **Success**: Exit code 0, JSON with component list - **Error**: Exit code 1, error message to stderr Diagnostic messages (like "Fetching components from...") are written to stderr, so they don't interfere with JSON parsing. ## API Details The script queries the Sippy component readiness API: - **URL**: `https://sippy.dptools.openshift.org/api/component_readiness?view={release}-main` - **Method**: GET - **Response**: JSON containing component readiness data with rows The API response structure includes: ```json { "rows": [ { "component": "Networking", ... }, { "component": "Monitoring", ... } ], ... } ``` The script: 1. Extracts the `component` field from each row 2. Filters out empty/null component names 3. Returns unique components, sorted alphabetically ## Examples ### Example 1: Get Components for 4.21 ```bash python3 plugins/component-health/skills/list-components/list_components.py \ --release 4.21 ``` Output: ```json { "release": "4.21", "view": "4.21-main", "component_count": 42, "components": ["API", "Build", "Etcd", "..."] } ``` ### Example 2: Query Non-Existent Release ```bash python3 plugins/component-health/skills/list-components/list_components.py \ --release 99.99 ``` Output (to stderr): ``` Fetching components from: https://sippy.dptools.openshift.org/api/component_readiness?view=99.99-main HTTP Error 404: Not Found View '99.99-main' not found. Please check the release version. Failed to fetch components: HTTP Error 404: Not Found ``` Exit code: 1 ## Integration with Other Commands This skill can be used in conjunction with other component-health skills: 1. **Before analyzing components**: Validate component names exist 2. **Component discovery**: Find available components for a release 3. **Autocomplete**: Provide component name suggestions to users 4. **Batch operations**: Iterate over all components for comprehensive analysis **Example Integration**: ```bash # Get all components for 4.21 COMPONENTS=$(python3 plugins/component-health/skills/list-components/list_components.py \ --release 4.21 | jq -r '.components[]') # Analyze each component for component in $COMPONENTS; do echo "Analyzing $component..." # Use component in other commands done ``` ## Notes - The script uses Python's standard library only (no external dependencies) - The script automatically appends "-main" to the release version - Component names are case-sensitive - Component names are returned in alphabetical order - Duplicate component names are automatically removed - Empty or null component names are filtered out - The script has a 30-second timeout for HTTP requests - Diagnostic messages go to stderr, JSON output goes to stdout ## See Also - Related Skill: `plugins/component-health/skills/list-regressions/SKILL.md` - Related Skill: `plugins/component-health/skills/get-release-dates/SKILL.md` - Related Command: `/component-health:list-regressions` (for regression data) - Related Command: `/component-health:analyze` (for health grading) - Sippy API: https://sippy.dptools.openshift.org/api/component_readiness - Component Health Plugin: `plugins/component-health/README.md`