# mohamadar77/storage-request-operator architecture

> Architecture diagram of the GitHub repository mohamadar77/storage-request-operator, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/mohamadar77/storage-request-operator
- Repository: https://github.com/mohamadar77/storage-request-operator

## Overview

StorageRequest Operator turns a namespaced StorageRequest into one same-name PVC, observes its lifecycle, and reports readiness and problems in status. On deletion, a finalizer applies the Retain or Delete policy; resize logic handles supported expansion without shrinking volumes. Kubernetes and the installed CSI driver perform provisioning and backend operations—the operator orchestrates rather than provisions storage. The controller excerpt establishes its reconciliation and finalization paths; broader PVC, status, and CSI relationships follow the README architecture, while some runtime wiring is unsampled.

Main entry points: [`internal/controller/storagerequest_controller.go`](https://github.com/mohamadar77/storage-request-operator/blob/main/internal/controller/storagerequest_controller.go) (Request Controller), [`api/v1alpha1/storagerequest_types.go`](https://github.com/mohamadar77/storage-request-operator/blob/main/api/v1alpha1/storagerequest_types.go) (StorageRequest), [`internal/controller/finalize.go`](https://github.com/mohamadar77/storage-request-operator/blob/main/internal/controller/finalize.go) (Deletion Policy), [`cmd/main.go`](https://github.com/mohamadar77/storage-request-operator/blob/main/cmd/main.go) (Operator Manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["Request API"]
  node_request["StorageRequest"]
  node_validation["Spec Validation<br/>[validation.go]"]
end

subgraph group_reconcile["Reconciliation"]
  node_manager["Operator Manager<br/>[main.go]"]
  node_controller["Request Controller"]
  node_finalizer["Deletion Policy<br/>[finalize.go]"]
  node_conditions["Claim Health<br/>[conditions.go]"]
end

subgraph group_storage["PVC Safety"]
  node_identity["Ownership Check<br/>[identity.go]"]
  node_builder["PVC Builder<br/>[pvc_builder.go]"]
  node_immutable["Immutable Checks<br/>[pvc_validation.go]"]
  node_resize["Resize Planner<br/>[resize.go]"]
end

subgraph group_platform["Kubernetes Storage"]
  node_pvc[("PersistentVolumeClaim")]
  node_kube["Storage Control Plane"]
  node_csi["CSI Driver"]
  node_volume[("PV / Backend Volume")]
end

node_user(("User / GitOps"))
node_workload(("Workload"))

node_user -->|"creates"| node_request
node_request -->|"validates spec"| node_validation
node_manager -.->|"runs"| node_controller
node_controller -->|"reconciles"| node_request
node_controller -->|"finalizes"| node_finalizer
node_controller -->|"builds claim"| node_builder
node_controller -->|"checks ownership"| node_identity
node_controller -.->|"checks fields"| node_immutable
node_controller -->|"plans resize"| node_resize
node_controller -->|"assesses health"| node_conditions
node_controller -->|"creates / observes"| node_pvc
node_controller -->|"writes status"| node_request
node_finalizer -->|"retains or deletes"| node_pvc
node_pvc -->|"provisioning delegated"| node_kube
node_kube -->|"uses driver"| node_csi
node_csi -->|"provisions backend"| node_volume
node_workload -->|"mounts claim"| node_pvc

click node_request "https://github.com/mohamadar77/storage-request-operator/blob/main/api/v1alpha1/storagerequest_types.go"
click node_validation "https://github.com/mohamadar77/storage-request-operator/blob/main/api/v1alpha1/validation.go"
click node_manager "https://github.com/mohamadar77/storage-request-operator/blob/main/cmd/main.go"
click node_controller "https://github.com/mohamadar77/storage-request-operator/blob/main/internal/controller/storagerequest_controller.go"
click node_finalizer "https://github.com/mohamadar77/storage-request-operator/blob/main/internal/controller/finalize.go"
click node_conditions "https://github.com/mohamadar77/storage-request-operator/blob/main/internal/conditions/conditions.go"
click node_identity "https://github.com/mohamadar77/storage-request-operator/blob/main/internal/storage/identity.go"
click node_builder "https://github.com/mohamadar77/storage-request-operator/blob/main/internal/storage/pvc_builder.go"
click node_immutable "https://github.com/mohamadar77/storage-request-operator/blob/main/internal/storage/pvc_validation.go"
click node_resize "https://github.com/mohamadar77/storage-request-operator/blob/main/internal/storage/resize.go"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_request,node_validation,node_user toneBlue
class node_manager,node_controller,node_finalizer,node_conditions toneAmber
class node_identity,node_builder,node_immutable,node_resize toneMint
class node_pvc,node_kube,node_csi,node_volume toneRose
class node_workload toneIndigo
```

## Components

### Request API

- [StorageRequest](https://github.com/mohamadar77/storage-request-operator/blob/main/api/v1alpha1/storagerequest_types.go): `api/v1alpha1/storagerequest_types.go`
- [Spec Validation](https://github.com/mohamadar77/storage-request-operator/blob/main/api/v1alpha1/validation.go): `api/v1alpha1/validation.go`

### Reconciliation

- [Operator Manager](https://github.com/mohamadar77/storage-request-operator/blob/main/cmd/main.go): `cmd/main.go`
- [Request Controller](https://github.com/mohamadar77/storage-request-operator/blob/main/internal/controller/storagerequest_controller.go): `internal/controller/storagerequest_controller.go`
- [Deletion Policy](https://github.com/mohamadar77/storage-request-operator/blob/main/internal/controller/finalize.go): `internal/controller/finalize.go`
- [Claim Health](https://github.com/mohamadar77/storage-request-operator/blob/main/internal/conditions/conditions.go): `internal/conditions/conditions.go`

### PVC Safety

- [Ownership Check](https://github.com/mohamadar77/storage-request-operator/blob/main/internal/storage/identity.go): `internal/storage/identity.go`
- [PVC Builder](https://github.com/mohamadar77/storage-request-operator/blob/main/internal/storage/pvc_builder.go): `internal/storage/pvc_builder.go`
- [Immutable Checks](https://github.com/mohamadar77/storage-request-operator/blob/main/internal/storage/pvc_validation.go): `internal/storage/pvc_validation.go`
- [Resize Planner](https://github.com/mohamadar77/storage-request-operator/blob/main/internal/storage/resize.go): `internal/storage/resize.go`

### Kubernetes Storage

- **PersistentVolumeClaim**
- **Storage Control Plane**
- **CSI Driver**
- **PV / Backend Volume**

### Other components

- **User / GitOps**
- **Workload**

## Connections

- User / GitOps → StorageRequest: creates (evidence: `README.md`)
- StorageRequest → Spec Validation: validates spec (evidence: `api/v1alpha1/validation.go`)
- Operator Manager → Request Controller: runs
- Request Controller → StorageRequest: reconciles (evidence: `internal/controller/storagerequest_controller.go`)
- Request Controller → Deletion Policy: finalizes (evidence: `internal/controller/storagerequest_controller.go`)
- Request Controller → PVC Builder: builds claim (evidence: `internal/storage/pvc_builder.go`)
- Request Controller → Ownership Check: checks ownership (evidence: `internal/storage/identity.go`)
- Request Controller → Immutable Checks: checks fields
- Request Controller → Resize Planner: plans resize (evidence: `internal/controller/storagerequest_controller.go`)
- Request Controller → Claim Health: assesses health (evidence: `internal/controller/storagerequest_controller.go`)
- Request Controller → PersistentVolumeClaim: creates / observes (evidence: `README.md`)
- Request Controller → StorageRequest: writes status (evidence: `README.md`)
- Deletion Policy → PersistentVolumeClaim: retains or deletes (evidence: `README.md`)
- PersistentVolumeClaim → Storage Control Plane: provisioning delegated (evidence: `README.md`)
- Storage Control Plane → CSI Driver: uses driver (evidence: `README.md`)
- CSI Driver → PV / Backend Volume: provisions backend (evidence: `README.md`)
- Workload → PersistentVolumeClaim: mounts claim (evidence: `README.md`)
