Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Une commande directe contourne le prompt de vérification. Examinez la source avant de l'exécuter.
Results are provided as compacted JSON with short keys:
v: version transition (e.g., "1.30->1.31")
blockers: count of critical non-compliant checks
warnings: count of non-critical non-compliant checks
passed: list of "ID:Check Name" strings (e.g., "U1:Cluster Version and Support Status")
failed: list of objects with:
id = check ID (e.g., U1, U5, U19)
n = check name
s = severity: C=Critical, H=High, M=Medium, L=Low
d = details (use as finding description)
r = impacted resources (list or namespace-grouped dict)
t = upgrade timing: b=before upgrade, a=after upgrade
When r is a dict like {"scale-test":["app-1","app-2","... and 38 more"]},
the total count is 3 shown + 38 more = 41 resources.
Workflow
think — First analysis pass:
Parse the compacted check results
Identify blockers (severity C that are non-compliant)
Correlate related findings (e.g., AL2 AMI + kubelet skew = same node group)
What data is missing from the MCP output for remediation?
http_request — Verify component and addon compatibility.
EKS Managed Addons (U5): The MCP tool calls describe-addon-versions for the target
K8s version and returns: current addon version, whether it's compatible with the target,
the default version for the target, and the latest compatible version. Use this data
directly in the report — no additional lookups needed for managed addons.
The report MUST include concrete version numbers. Example:
vpc-cni: v1.16.0 (current) → v1.19.2-eksbuild.1 (default for K8s 1.32, per U5)
Never write <VERSION> placeholders — always use the real versions from MCP output.
Self-managed addons (U6): The MCP tool returns detected versions from container images
(e.g., coredns:1.10.1, kube-proxy:1.29.0). These are NOT managed by the EKS addon
system, so the MCP cannot check compatibility. Use http_request to verify:
kube-proxy: version must match the K8s control plane version (1:1 mapping)
VPC CNI: http_request(url="https://docs.aws.amazon.com/eks/latest/userguide/managing-vpc-cni.html", convert_to_markdown=true)
State clearly: "Self-managed v needs update to v for K8s ".
Third-party components (U19/U20): For each component detected by the MCP tool,
fetch the official compatibility matrix:
Istio: http_request(url="https://istio.io/latest/docs/releases/supported-releases/", convert_to_markdown=true)
Compare the detected version against the compatibility matrix for the target K8s version.
State clearly: "Component X vY.Z is/is not compatible with K8s ".
shell — Fill gaps ONLY. Run targeted read-only commands for specific missing data.
See "When to Run Shell Commands" below.
think — Second analysis pass:
Correlate MCP data + http_request results + shell output
Determine the correct upgrade step ORDER (dependencies matter:
fix blockers -> control plane -> nodes -> addons -> components)
For each blocker, synthesize remediation from the data
Identify any findings that affect the same resources (group them)
Write the report following the Report Format below.
save_report — ALWAYS save with report_type="upgrade-readiness".
This produces: <cluster>-upgrade-readiness-<timestamp>.md
Data Rules
Every fact in the report must have a source. No exceptions.
Data type
Allowed source
Resource names, IPs, versions
MCP tool output or shell command you ran
Addon compatible versions
MCP tool output (from describe_addon_versions for target K8s)
Self-managed addon compatibility
http_request to official docs/releases
Third-party component compatibility
http_request to official compatibility matrix
Check pass/fail status
MCP tool output only
Remediation commands
Constructed from real data above
Best practice context
Knowledge base or your training knowledge
Estimated durations
Standard AWS ranges only (control plane: 15-25 min)
If data is missing: write "Not determined" and provide the command to get it.
What Good Looks Like vs Bad
BAD (hallucinated version):
Update vpc-cni to v1.18.3-eksbuild.2
GOOD (from MCP data):
Update vpc-cni from v1.16.0 (current) to v1.18.0-eksbuild.1 (default for K8s 1.33,
per check U5 output)
BAD (invented resource):
Node ip-10-0-3-142 has kubelet 1.30
GOOD (from MCP data):
2 nodes have kubelet version skew (per check U8): ip-10-0-1-45 (v1.31.0),
ip-10-0-2-67 (v1.31.0)
BAD (assumed pass without data):
All Helm releases use current API versions.
GOOD (check errored):
U25 CHECK ERROR: Failed to decode Helm secrets. Run manually:
helm list -A -o json to verify chart API versions.
When to Run Shell Commands
The shell tool prompts the user to confirm each command before it executes — you do not need to call a separate confirmation step.
Run shell commands ONLY when ALL of these are true:
A check is non-passing (blocker or warning)
The MCP output lacks a specific detail needed for remediation
The command is read-only (get, describe, list, version, top)
Acceptable examples:
kubectl get nodes -o wide — when U8 flags skew but MCP didn't include node IPs
If check_eks_upgrade_readiness fails entirely: report the error, suggest the user
check cluster connectivity and IAM permissions. Do NOT fall back to individual checks.
If individual checks within the result have errors: report as "CHECK ERROR" with the
error message. Do NOT mark as PASS or FAIL.
Verdict Logic
Mechanical — do not override with judgment:
0 blockers (Critical-severity + timing=before) = READY (or READY WITH WARNINGS if warnings exist)
1+ blockers = NOT READY — list what must be fixed
Critical + timing=after = urgent post-upgrade action, NOT a blocker (e.g., kube-proxy update)
High-severity findings are strong warnings, not blockers — they won't break the upgrade
but should be addressed for zero-downtime
Upgrade Plan Rules
ONLY include steps for components that exist (detected by MCP tool)
If Karpenter not detected: no Karpenter step
If no self-managed nodes: no self-managed node step
If no Helm releases: no Helm upgrade step
Use real version numbers from MCP output in commands
Mark any command with user-specific values as: # TEMPLATE — replace <VALUE> before running
Report Format
Terminal output: PLAIN TEXT. No markdown tables, bold, or headers. Code blocks OK.
Saved report: FULL MARKDOWN with tables, code blocks, headers.
# EKS Upgrade Readiness Report## Cluster: <cluster-name>
| Field | Value |
|-------|-------|
| **Current Version** | <fromMCP:current_version> |
| **Target Version** | <fromMCP:target_version> |
| **Assessment Date** | <today's date> |
| **Upgrade Readiness** | <READY / READYWITHWARNINGS / NOTREADY> |
| **Checks Run** | <totalcount> |
| **Passed** | <count> |
| **Blockers** | <countfromMCP:blockers> |
| **Warnings** | <countfromMCP:warnings> |
---
## Go / No-Go Decision<Oneparagraph:readinessrationalebasedonblockercount
>
---
| ID | Check | Category | Severity | Status | Timing | Impacted Resources |
|----|-------|----------|----------|--------|--------|--------------------|
| U1 | Cluster Version | Control Plane | High | PASS | — | — |
| U9 | AMI Type | Data Plane | Critical | BLOCKER | Before | |
| U12 | PDB Coverage | Workload | High | WARNING | Before | |
| ... for ALL 38 checks ... |
---
| Field | Detail |
|-------|--------|
| | |
| | |
| | |
---
| Field | Detail |
|-------|--------|
| | |
| | |
---
Execute in order after resolving all blockers.
| # | Action | Command | Notes |
|---|--------|---------|-------|
| 1a | | | |
Monitor:
Duration: 15-25 minutes. Zero application downtime.
| Node Group | Type | Command |
|------------|------|---------|
| | Managed | |
Use the exact version numbers from U5 check data. Never use without .
| Addon | Current | Target (for K8s X.Y) | Default | Command |
|-------|---------|----------------------|---------|---------|
| | | | | |
Includes self-managed core addons (U6) AND third-party components (U18-U20).
Use real version numbers from MCP output + http
and
what
must
be
fixed.
Reference
specific
check
IDs.
## Check Results Summary
<exactnames>
<exactnames>
## Blockers (Must Fix Before Upgrade)
### 1. <CheckName> (<CheckID>)
**Severity**
<fromcheckresult>
**Category**
<fromcheckdefinition>
**Upgrade Timing**
<fromcheckresult:before/after>
**Impacted Resources:**
-
<exactresourcenamefromMCPoutput>
-
<exactresourcenamefromMCPoutput>
**Finding:**
<whatthecheckdetected — quoteMCPdetailsfield>
**Remediation:**
```bash
# <description of what this does>
<exact command using real values from MCP output>
```