Skip to main content
Version: 0.1 · v0.1.0

CRD reference

Two cluster-scoped custom resources, group mirops.mirops.io/v1. You author UpgradeAnalysis; the operator creates RemediationPlan. Everything works with plain kubectl.

UpgradeAnalysis​

Minimal​

apiVersion: mirops.mirops.io/v1
kind: UpgradeAnalysis
metadata:
name: to-1-34
spec:
targetVersion: "1.34" # the only required field

Full spec​

spec:
targetVersion: "1.34" # REQUIRED
scoringProfile: production # production (default) | non-production

scope:
mode: all # all (default) | application
excludeNamespaces: [monitoring]

ai:
enabled: true # default false
provider: anthropic # anthropic | openai
model: claude-sonnet-4-6 # optional
maxTokens: 2048 # 1–32768, default 2048
credentialsSecret: mirops-ai # Secret in the operator namespace
remediation:
enabled: true # default false
maxRiskLevel: low # low (default) | medium | high
autoApprove: false # default false

resync:
interval: "30m" # empty = run once

source:
type: file # file (default) | s3 | blob | pvc
# file/pvc: path
# s3: bucket, region, key, credentialsSecret
# blob: accountName, containerName, blobName, credentialsSecret

spec fields​

FieldValuesDefault
targetVersionstring, e.g. "1.34"required
scoringProfileproduction | non-productionproduction
scope.modeall | applicationall
scope.excludeNamespaces[]string—
ai.enabledboolfalse
ai.provideranthropic | openaianthropic
ai.modelstringprovider default
ai.maxTokensint 1–327682048
ai.credentialsSecretstring—
ai.remediation.enabledboolfalse
ai.remediation.maxRiskLevellow | medium | highlow
ai.remediation.autoApproveboolfalse
resync.intervalduration— (once)
source.typefile | s3 | blob | pvcfile

status (read-only)​

FieldMeaning
decisionSAFE / WARNING / CRITICAL / ERROR
totalScorereadiness gauge (0–100)
reasonprimary reason for the verdict
aiScore, aiReasoning, aiModel, aiErrorAI results (when enabled)
addonsChecked, incompatibleAddonscompatibility counts
reportState, reportError, reportLocationreport write outcome
lastAnalysisTimetimestamp of the last run

RemediationPlan​

Created by the operator when ai.remediation.enabled is true. You set spec.approved: true to execute.

apiVersion: mirops.mirops.io/v1
kind: RemediationPlan
metadata:
name: to-1-34-remediation
spec:
upgradeAnalysisRef: to-1-34
approved: false # ← set true to execute
actions:
- id: action-1
type: restart-pod # restart-pod | delete-pod | scale-deployment | cordon-node
namespace: default
name: crash-test-...
reason: "..."
risk: low # low | medium | high
skip: false
params: {} # type-specific, e.g. { replicas: "2" }

status.phase moves pending-approval → running → completed | failed; status.results[] records each action's outcome. See the remediation guide.