plugins/must-gather/skills/must-gather-analyzer/SKILL.md
Analyze OpenShift must-gather diagnostic data including cluster operators, pods, nodes, and network components. Use this skill when the user asks about cluster health, operator status, pod issues, node conditions, or wants diagnostic insights from must-gather data. Triggers: "analyze must-gather", "check cluster health", "operator status", "pod issues", "node status", "failing pods", "degraded operators", "cluster problems", "crashlooping", "network issues", "etcd health", "analyze clusteroperators", "analyze pods", "analyze nodes"
npx skillsauth add openshift-eng/ai-helpers must-gather-analyzerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Comprehensive analysis of OpenShift must-gather diagnostic data with helper scripts that parse YAML and display output in oc-like format.
This skill provides analysis for:
Important: Must-gather data is contained in a subdirectory with a long hash name:
must-gather/
└── registry-ci-openshift-org-origin-...-sha256-<hash>/
├── cluster-scoped-resources/
│ ├── config.openshift.io/clusteroperators/
│ └── core/nodes/
├── namespaces/
│ └── <namespace>/
│ └── pods/
│ └── <pod-name>/
│ └── <pod-name>.yaml
└── network_logs/
The analysis scripts expect the path to the subdirectory (the one with the hash), not the root must-gather folder.
Ask the user for the must-gather directory path if not already provided.
cluster-scoped-resources/ and namespaces/ directoriesBased on user's request, run the appropriate helper script:
./scripts/analyze_clusterversion.py <must-gather-path>
Shows cluster version information similar to oc get clusterversion:
./scripts/analyze_clusteroperators.py <must-gather-path>
Shows cluster operator status similar to oc get clusteroperators:
# All namespaces
./scripts/analyze_pods.py <must-gather-path>
# Specific namespace
./scripts/analyze_pods.py <must-gather-path> --namespace <namespace>
# Show only problematic pods
./scripts/analyze_pods.py <must-gather-path> --problems-only
Shows pod status similar to oc get pods -A:
./scripts/analyze_nodes.py <must-gather-path>
# Show only nodes with issues
./scripts/analyze_nodes.py <must-gather-path> --problems-only
Shows node status similar to oc get nodes:
./scripts/analyze_network.py <must-gather-path>
Shows network health:
# Recent events (last 100)
./scripts/analyze_events.py <must-gather-path>
# Warning events only
./scripts/analyze_events.py <must-gather-path> --type Warning
# Events in specific namespace
./scripts/analyze_events.py <must-gather-path> --namespace openshift-etcd
# Show last 50 events
./scripts/analyze_events.py <must-gather-path> --count 50
Shows cluster events:
./scripts/analyze_etcd.py <must-gather-path>
Shows etcd cluster health:
# All PVs and PVCs
./scripts/analyze_pvs.py <must-gather-path>
# PVCs in specific namespace
./scripts/analyze_pvs.py <must-gather-path> --namespace openshift-monitoring
Shows storage resources:
# All alerts.
./scripts/analyze_prometheus.py <must-gather-path>
# Alerts in specific namespace
./scripts/analyze_prometheus.py <must-gather-path> --namespace openshift-monitoring
Shows monitoring information:
After running the scripts:
All scripts provide:
oc-like formatted outputExample summary format:
================================================================================
SUMMARY: 25/28 operators healthy
⚠️ 3 operators with issues
🔄 1 progressing
❌ 2 degraded
================================================================================
Parses: cluster-scoped-resources/config.openshift.io/clusterversions/version.yaml
Output: ClusterVersion table with detailed version info, conditions, and capabilities
Parses: cluster-scoped-resources/config.openshift.io/clusteroperators/
Output: ClusterOperator status table with conditions
Parses: namespaces/*/pods/*/*.yaml (individual pod directories)
Output: Pod status table with issues categorized
Parses: cluster-scoped-resources/core/nodes/
Output: Node status table with conditions and capacity
Parses: network_logs/, network operator, OVN resources
Output: Network health summary and diagnostics
Parses: namespaces/*/core/events.yaml
Output: Event table sorted by last occurrence
Parses: etcd_info/ (endpoint_health.json, member_list.json, endpoint_status.json)
Output: etcd cluster health and member status
Parses: cluster-scoped-resources/core/persistentvolumes/, namespaces/*/core/persistentvolumeclaims.yaml
Output: PV and PVC status tables
analyze_clusteroperators.py - identify degraded operatorsanalyze_pods.py --namespace <operator-namespace> - check operator podsanalyze_nodes.py - verify node healthanalyze_pods.py --problems-only - find crashlooping podsanalyze_nodes.py - verify node conditionsanalyze_network.py - check network healthanalyze_pods.py --namespace openshift-ovn-kubernetesBased on findings, suggest:
namespaces/<ns>/pods/<pod>/<container>/logs/namespaces/<ns>/core/events.yamlaudit_logs/host_service_logs/tools
Analyze a JIRA issue and create a pull request to solve it. Use when the user wants to implement a fix or feature described in a Jira issue, push a branch, and open a draft PR.
development
Use when a deeper level of code review is requested. Multi-agent panel code review with specialist reviewers and forced runtime reproducers for all BLOCKING bug findings. Optionally posts to GitHub/GitLab as a PENDING review.
development
Review agentic documentation — verify claims locally against source code first, then use chai-bot for cross-repo and cross-functional verification
development
Use this skill when debugging a failed Prow CI job.