Report destinations
spec.source selects where the operator writes the report. Drop any of these blocks into an UpgradeAnalysis.
file (default)
Written to the pod and served over HTTP (:8084).
source:
type: file
path: "" # optional basename; defaults to <name>.mirops
s3
No local replica — written to S3 and read back on demand. Omit credentialsSecret to use IRSA.
source:
type: s3
bucket: my-reports
region: us-east-1
key: clusters/prod.mirops # you own the name; empty → <name>.mirops
credentialsSecret: aws-creds # optional; keys: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY
blob (Azure)
No local replica. Omit credentialsSecret to use Workload / Managed Identity.
source:
type: blob
accountName: mystorage
containerName: reports
blobName: prod.mirops # you own the name; empty → <name>.mirops
credentialsSecret: azure-creds # optional; keys: AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, AZURE_TENANT_ID
pvc (in-cluster persistent storage)
Like file, but persistent — the report survives pod restarts, with no cloud object storage needed (handy on-prem). Enable the volume with reportPVC.enabled=true in the Helm chart. Read it in-cluster: the operator's HTTP endpoint, or by mounting the same PVC.
source:
type: pvc
path: /reports # directory on the mounted volume; report → <name>.mirops
Credentials
credentialsSecret is optional — leave it empty to use IRSA (S3) or Workload/Managed Identity (Azure); set it to a Secret in the operator's namespace with static keys otherwise.
Naming & content
The content is JSON (uploaded as application/json), saved with the .mirops extension for every destination — local file included. It keeps reports distinct from config files in the same destination — filter them with *.mirops.
Failure reporting
A write/read failure is recorded on the CR — status.reportState (written/failed), status.reportError, and status.reportLocation — so it surfaces in kubectl describe and the UI. Deleting the CR never deletes the object from S3/Blob/PVC. See reports.