spec |
object |
— |
— |
spec.targets |
array |
Kubernetes minor versions to evaluate against, e.g. "1.36". Empty means the agent targets the next minor above the observed server version. At most 8, because each target adds a row to status; an agent given more evaluates the first 8 and lists the rest in status.notAssessed. |
at most 8 items |
spec.targets[] |
string |
— |
pattern ^[0-9]+\.[0-9]+$; max length 8 |
spec.ignore |
array |
Accepted findings, applied by the agent every tick with the same rules as the CLI's .upgradescope.yaml. Suppressed findings do not count toward score and verdict; status counts them per target. |
— |
spec.ignore[] |
object |
— |
— |
spec.ignore[].key |
string |
Finding key, e.g. eol-addon/ingress-nginx. Set key or category, not both. |
— |
spec.ignore[].category |
string |
Finding category, e.g. removed-api. |
— |
spec.ignore[].namespace |
string |
Glob. Only objects in a matching namespace; a finding without objects (an add-on) matches when all its namespaces match. |
— |
spec.ignore[].name |
string |
Glob. Only objects with a matching name. |
— |
spec.ignore[].file |
string |
Glob on manifest paths. Never matches live objects; kept for the CLI's rule schema. |
— |
spec.ignore[].reason |
string |
Why the finding is accepted. Required. |
required; min length 1 |
spec.ignore[].expires |
string |
Last day (UTC) the rule applies, YYYY-MM-DD. After it the rule is ignored and status.notAssessed says so. |
pattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ |
status |
object |
— |
— |
status.observedServerVersion |
string |
— |
— |
status.kbVersion |
string |
— |
— |
status.lastEvaluated |
string |
— |
format date-time |
status.agentVersion |
string |
— |
— |
status.addOnEvidenceAgeSeconds |
integer |
How old, in seconds, the pod evidence the add-ons were detected from was when the agent reused its last full pod pass instead of listing every pod again (--pod-pass-every, --pod-pass-max-age); an add-on installed or upgraded since is reported as it was then. Absent when every pod was read for this status. The pods in kube-system, Helm releases and IngressClasses are read on every evaluation whatever this says. |
format int64; minimum 1 |
status.supportPhase |
string |
Where the cluster's Kubernetes minor stands in its managed provider's (EKS, GKE, AKS) support calendar - standard, ending (standard support ends within 90 days), extended (past standard support, before the provider's extended window ends; where that window is opt-in, as on GKE and AKS, it applies to the cluster only if extendedSupportCondition holds, which the agent cannot see) or ended. Absent when the provider is not one of the three or its dates for the minor are not in the knowledge base. The same for every target. |
one of standard, ending, extended, ended |
status.extendedSupportFrom |
string |
The day (UTC, YYYY-MM-DD) standard support for the cluster's minor ends and extended support begins. Set with supportPhase. |
pattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ |
status.extendedSupportEnds |
string |
The day (UTC, YYYY-MM-DD) the provider's extended support for the cluster's minor ends and it stops supporting the minor. Absent when the provider offered no extended support for the minor. Where extended support is opt-in (GKE, AKS) it is the provider's window, not the cluster's (see extendedSupportCondition). |
pattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ |
status.annualCostDelta |
string |
What extended support adds per cluster per year at the provider's published list price, (extended - standard) x 8760 cluster-hours, as a decimal string in currency. A list price as of priceAsOf, not the bill. Set only for a provider whose price the knowledge base cites, while the minor can still be in extended support. |
pattern ^[0-9]+\.[0-9]{2}$ |
status.currency |
string |
The currency of annualCostDelta. |
one of USD |
status.priceAsOf |
string |
The day (YYYY-MM-DD) the list price behind annualCostDelta was read from the provider's pricing page. |
pattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ |
status.annualCostNote |
string |
The provider's caveat on whom annualCostDelta is charged to, for example that GKE charges it only to clusters on the Extended release channel. Set with annualCostDelta when the knowledge base records one; show it beside the figure. |
— |
status.extendedSupportCondition |
string |
Where the provider's extended support is opt-in (GKE, AKS), the configuration under which it applies to the cluster, as a clause completing "only if ...", for example "Long Term Support is enabled". The agent cannot see the cluster's configuration, so supportPhase extended means the provider's window, not that the cluster is enrolled in it. Absent for providers where extended support is the default (EKS) and when the provider offered none for the minor. |
— |
status.observedGeneration |
integer |
The metadata.generation (spec version) the status was evaluated for. |
format int64; minimum 0 |
status.conditions |
array |
Standard conditions. Ready summarizes the first target's verdict: True (ready), False (reason Blocked), or Unknown (reason NotAssessed: a required check was not assessed, or no target was evaluated). AllTargetsReady covers every target: False (reason Blocked) when any target is blocked, Unknown (reason NotAssessed) when none is blocked but any is not assessed or no target was evaluated, True only when all are ready. |
— |
status.conditions[] |
object |
— |
— |
status.conditions[].type |
string |
— |
required; max length 316 |
status.conditions[].status |
string |
— |
required; one of True, False, Unknown |
status.conditions[].observedGeneration |
integer |
— |
format int64; minimum 0 |
status.conditions[].lastTransitionTime |
string |
— |
required; format date-time |
status.conditions[].reason |
string |
— |
required; pattern ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$; min length 1; max length 1024 |
status.conditions[].message |
string |
— |
required; max length 32768 |
status.notAssessed |
array |
— |
— |
status.notAssessed[] |
string |
— |
— |
status.targets |
array |
— |
— |
status.targets[] |
object |
— |
— |
status.targets[].target |
string |
— |
required |
status.targets[].score |
integer |
— |
required |
status.targets[].ready |
boolean |
True only when verdict is "ready". Kept for v0.1 readers; prefer verdict. |
required |
status.targets[].verdict |
string |
ready (no blockers, all required checks assessed), blocked (at least one blocker), or unknown (no blockers found, but a required check was not assessed; see notAssessed). |
one of ready, blocked, unknown |
status.targets[].blockers |
integer |
— |
required |
status.targets[].warnings |
integer |
— |
required |
status.targets[].infos |
integer |
— |
required |
status.targets[].suppressed |
integer |
Findings accepted by spec.ignore or upgradescope.basit.engineer/ignore annotations; not in blockers, warnings or infos. |
— |
status.targets[].byCategory |
map of integer |
— |
— |
status.targets[].topFindings |
array |
— |
at most 20 items |
status.targets[].topFindings[] |
object |
— |
— |
status.targets[].topFindings[].category |
string |
— |
required |
status.targets[].topFindings[].severity |
string |
— |
required |
status.targets[].topFindings[].title |
string |
— |
required |
status.targets[].topFindings[].remediation |
string |
— |
— |