Skip to main content
Version: 0.1 · v0.1.0

Read reports

A report is JSON. The fields to look at first:

FieldUse
decision.levelThe verdict — SAFE / WARNING / CRITICAL.
decision.allowBoolean gate — false means blocked.
decision.blockersEvery reason it's CRITICAL. Fix them all.
scores.totalThe readiness gauge (0–100). Not the gate.
risk.byNamespaceWhere propagated risk concentrates.
workloads.*The inventory: deployments, PVCs, standalone pods, deprecated APIs.

From the CLI​

# a report file on your own machine / CI runner
mirops scan --source ./report.mirops

# machine-readable
mirops scan --source ./report.mirops --output json | jq '.decision'
note

--source ./report.mirops reads a file on the CLI's own filesystem — not the operator's pod. A file-destination report lives inside the pod and is served over HTTP; read it with --source http://… (see below) or use a remote destination for CI outside the cluster.

From a remote destination​

The CLI reads S3, Azure Blob, and HTTP directly (credentials resolve automatically):

# S3 (IRSA / env vars / static keys)
mirops scan --source s3://my-bucket/clusters/prod.mirops

# Azure Blob (az login / Workload Identity)
mirops scan --source azure://mystorageacct/reports/prod.mirops

# the operator's in-cluster HTTP endpoint
mirops scan --source http://<reports-service>:8084/reports/to-1-34.mirops

Azure Blob source format: azure://<storageaccount>/<container>/<blob>. S3: s3://<bucket>/<key>.

Configure with environment variables​

Every flag has an environment-variable equivalent, so you can run a bare mirops scan — handy in CI, where you set the config once instead of repeating flags. Flags take precedence over env vars.

Env varFlagDefaultExample
MIROPS_SOURCE--source—s3://my-bucket/prod.mirops
MIROPS_OUTPUT--outputtabletable | json
MIROPS_ENFORCE--enforcefalsetrue
MIROPS_ENFORCE_LEVEL--enforce-levelcriticalcritical | warning
MIROPS_TARGET_VERSION--target-version—1.34
export MIROPS_SOURCE="s3://my-bucket/prod.mirops"
export MIROPS_ENFORCE=true
mirops scan # no flags needed

For remote sources, the usual cloud-credential env vars apply too — AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY for S3, or AZURE_CLIENT_ID / AZURE_TENANT_ID / AZURE_CLIENT_SECRET for Azure Blob. Or use IRSA / Workload Identity and set nothing.

From Kubernetes status​

You don't always need the full report — the verdict lives on the CR:

kubectl get upgradeanalysis to-1-34 \
-o jsonpath='{.status.decision} {.status.totalScore}{"\n"}'

In the Web UI​

The Web UI renders the whole report — graph, findings, risk heatmap — reading it back through the operator's endpoint.