Conversation
📝 WalkthroughWalkthroughThis pull request reorganizes ZFS volume storage configuration by migrating from the openebs-system namespace to a dedicated storage namespace. ZFSVolume CRD resources are removed and replaced with local PersistentVolume definitions, updating kustomization paths and resource references accordingly. Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 inconclusive)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
--- kubernetes/apps/openebs-system/zfs-volumes/resources Kustomization: openebs-system/openebs-zfs-volumes ZFSVolume: openebs-system/homeassistant-backup
+++ kubernetes/apps/openebs-system/zfs-volumes/resources Kustomization: openebs-system/openebs-zfs-volumes ZFSVolume: openebs-system/homeassistant-backup
@@ -1,23 +0,0 @@
----
-apiVersion: zfs.openebs.io/v1
-kind: ZFSVolume
-metadata:
- finalizers:
- - cluster.local/data-protection
- labels:
- kustomize.toolkit.fluxcd.io/name: openebs-zfs-volumes
- kustomize.toolkit.fluxcd.io/namespace: openebs-system
- name: homeassistant-backup
- namespace: openebs-system
-spec:
- capacity: '29426007658744'
- compression: lz4
- dedup: 'off'
- fsType: zfs
- ownerNodeID: kantai3
- poolName: citerne
- recordsize: 128K
- shared: 'yes'
- thinProvision: 'yes'
- volumeType: DATASET
-
--- kubernetes/apps/openebs-system/zfs-volumes/resources Kustomization: openebs-system/openebs-zfs-volumes PersistentVolume: openebs-system/homeassistant-backup
+++ kubernetes/apps/openebs-system/zfs-volumes/resources Kustomization: openebs-system/openebs-zfs-volumes PersistentVolume: openebs-system/homeassistant-backup
@@ -1,32 +0,0 @@
----
-apiVersion: v1
-kind: PersistentVolume
-metadata:
- labels:
- kustomize.toolkit.fluxcd.io/name: openebs-zfs-volumes
- kustomize.toolkit.fluxcd.io/namespace: openebs-system
- name: homeassistant-backup
-spec:
- accessModes:
- - ReadWriteMany
- capacity:
- storage: 108Gi
- csi:
- driver: zfs.csi.openebs.io
- fsType: zfs
- volumeAttributes:
- openebs.io/cas-type: localpv-zfs
- openebs.io/poolname: citerne
- volumeHandle: homeassistant-backup
- nodeAffinity:
- required:
- nodeSelectorTerms:
- - matchExpressions:
- - key: openebs.io/nodeid
- operator: In
- values:
- - kantai3
- persistentVolumeReclaimPolicy: Retain
- storageClassName: ''
- volumeMode: Filesystem
-
--- kubernetes/apps/openebs-system/zfs-volumes/resources Kustomization: openebs-system/openebs-zfs-volumes ZFSVolume: openebs-system/jf
+++ kubernetes/apps/openebs-system/zfs-volumes/resources Kustomization: openebs-system/openebs-zfs-volumes ZFSVolume: openebs-system/jf
@@ -1,23 +0,0 @@
----
-apiVersion: zfs.openebs.io/v1
-kind: ZFSVolume
-metadata:
- finalizers:
- - cluster.local/data-protection
- labels:
- kustomize.toolkit.fluxcd.io/name: openebs-zfs-volumes
- kustomize.toolkit.fluxcd.io/namespace: openebs-system
- name: jf
- namespace: openebs-system
-spec:
- capacity: '25330530735448'
- compression: zstd
- dedup: 'off'
- fsType: zfs
- ownerNodeID: kantai3
- poolName: citerne/personal
- recordsize: 128K
- shared: 'yes'
- thinProvision: 'yes'
- volumeType: DATASET
-
--- kubernetes/apps/openebs-system/zfs-volumes/resources Kustomization: openebs-system/openebs-zfs-volumes PersistentVolume: openebs-system/zfs-jf
+++ kubernetes/apps/openebs-system/zfs-volumes/resources Kustomization: openebs-system/openebs-zfs-volumes PersistentVolume: openebs-system/zfs-jf
@@ -1,32 +0,0 @@
----
-apiVersion: v1
-kind: PersistentVolume
-metadata:
- labels:
- kustomize.toolkit.fluxcd.io/name: openebs-zfs-volumes
- kustomize.toolkit.fluxcd.io/namespace: openebs-system
- name: zfs-jf
-spec:
- accessModes:
- - ReadWriteMany
- capacity:
- storage: 108Gi
- csi:
- driver: zfs.csi.openebs.io
- fsType: zfs
- volumeAttributes:
- openebs.io/cas-type: localpv-zfs
- openebs.io/poolname: citerne/personal
- volumeHandle: jf
- nodeAffinity:
- required:
- nodeSelectorTerms:
- - matchExpressions:
- - key: openebs.io/nodeid
- operator: In
- values:
- - kantai3
- persistentVolumeReclaimPolicy: Retain
- storageClassName: ''
- volumeMode: Filesystem
-
--- kubernetes/apps/openebs-system/zfs-volumes/resources Kustomization: openebs-system/openebs-zfs-volumes ZFSVolume: openebs-system/media1
+++ kubernetes/apps/openebs-system/zfs-volumes/resources Kustomization: openebs-system/openebs-zfs-volumes ZFSVolume: openebs-system/media1
@@ -1,23 +0,0 @@
----
-apiVersion: zfs.openebs.io/v1
-kind: ZFSVolume
-metadata:
- finalizers:
- - cluster.local/data-protection
- labels:
- kustomize.toolkit.fluxcd.io/name: openebs-zfs-volumes
- kustomize.toolkit.fluxcd.io/namespace: openebs-system
- name: media1
- namespace: openebs-system
-spec:
- capacity: '66349527615760'
- compression: 'off'
- dedup: 'off'
- fsType: zfs
- ownerNodeID: kantai3
- poolName: citerne
- recordsize: 1M
- shared: 'yes'
- thinProvision: 'yes'
- volumeType: DATASET
-
--- kubernetes/apps/openebs-system/zfs-volumes/resources Kustomization: openebs-system/openebs-zfs-volumes PersistentVolume: openebs-system/storage-zfs-media1
+++ kubernetes/apps/openebs-system/zfs-volumes/resources Kustomization: openebs-system/openebs-zfs-volumes PersistentVolume: openebs-system/storage-zfs-media1
@@ -1,32 +0,0 @@
----
-apiVersion: v1
-kind: PersistentVolume
-metadata:
- labels:
- kustomize.toolkit.fluxcd.io/name: openebs-zfs-volumes
- kustomize.toolkit.fluxcd.io/namespace: openebs-system
- name: storage-zfs-media1
-spec:
- accessModes:
- - ReadWriteMany
- capacity:
- storage: 50Ti
- csi:
- driver: zfs.csi.openebs.io
- fsType: zfs
- volumeAttributes:
- openebs.io/cas-type: localpv-zfs
- openebs.io/poolname: citerne
- volumeHandle: media1
- nodeAffinity:
- required:
- nodeSelectorTerms:
- - matchExpressions:
- - key: openebs.io/nodeid
- operator: In
- values:
- - kantai3
- persistentVolumeReclaimPolicy: Retain
- storageClassName: ''
- volumeMode: Filesystem
-
--- kubernetes/apps/openebs-system/zfs-volumes/resources Kustomization: openebs-system/openebs-zfs-volumes ZFSVolume: openebs-system/media-kantai1
+++ kubernetes/apps/openebs-system/zfs-volumes/resources Kustomization: openebs-system/openebs-zfs-volumes ZFSVolume: openebs-system/media-kantai1
@@ -1,23 +0,0 @@
----
-apiVersion: zfs.openebs.io/v1
-kind: ZFSVolume
-metadata:
- finalizers:
- - cluster.local/data-protection
- labels:
- kustomize.toolkit.fluxcd.io/name: openebs-zfs-volumes
- kustomize.toolkit.fluxcd.io/namespace: openebs-system
- name: media-kantai1
- namespace: openebs-system
-spec:
- capacity: '175921860444160'
- compression: 'off'
- dedup: 'off'
- fsType: zfs
- ownerNodeID: kantai1
- poolName: reservoir
- recordsize: 1M
- shared: 'yes'
- thinProvision: 'yes'
- volumeType: DATASET
-
--- kubernetes/apps/openebs-system/zfs-volumes/resources Kustomization: openebs-system/openebs-zfs-volumes PersistentVolume: openebs-system/storage-media-kantai1-zfs
+++ kubernetes/apps/openebs-system/zfs-volumes/resources Kustomization: openebs-system/openebs-zfs-volumes PersistentVolume: openebs-system/storage-media-kantai1-zfs
@@ -1,32 +0,0 @@
----
-apiVersion: v1
-kind: PersistentVolume
-metadata:
- labels:
- kustomize.toolkit.fluxcd.io/name: openebs-zfs-volumes
- kustomize.toolkit.fluxcd.io/namespace: openebs-system
- name: storage-media-kantai1-zfs
-spec:
- accessModes:
- - ReadWriteMany
- capacity:
- storage: 160Ti
- csi:
- driver: zfs.csi.openebs.io
- fsType: zfs
- volumeAttributes:
- openebs.io/cas-type: localpv-zfs
- openebs.io/poolname: reservoir
- volumeHandle: media-kantai1
- nodeAffinity:
- required:
- nodeSelectorTerms:
- - matchExpressions:
- - key: openebs.io/nodeid
- operator: In
- values:
- - kantai1
- persistentVolumeReclaimPolicy: Retain
- storageClassName: ''
- volumeMode: Filesystem
-
--- kubernetes/apps/openebs-system/zfs-volumes/resources Kustomization: openebs-system/openebs-zfs-volumes ZFSVolume: openebs-system/photos
+++ kubernetes/apps/openebs-system/zfs-volumes/resources Kustomization: openebs-system/openebs-zfs-volumes ZFSVolume: openebs-system/photos
@@ -1,23 +0,0 @@
----
-apiVersion: zfs.openebs.io/v1
-kind: ZFSVolume
-metadata:
- finalizers:
- - cluster.local/data-protection
- labels:
- kustomize.toolkit.fluxcd.io/name: openebs-zfs-volumes
- kustomize.toolkit.fluxcd.io/namespace: openebs-system
- name: photos
- namespace: openebs-system
-spec:
- capacity: '175921860444160'
- compression: 'off'
- dedup: 'off'
- fsType: zfs
- ownerNodeID: kantai1
- poolName: reservoir
- recordsize: 1M
- shared: 'yes'
- thinProvision: 'yes'
- volumeType: DATASET
-
--- kubernetes/apps/openebs-system/zfs-volumes/resources Kustomization: openebs-system/openebs-zfs-volumes PersistentVolume: openebs-system/photos
+++ kubernetes/apps/openebs-system/zfs-volumes/resources Kustomization: openebs-system/openebs-zfs-volumes PersistentVolume: openebs-system/photos
@@ -1,32 +0,0 @@
----
-apiVersion: v1
-kind: PersistentVolume
-metadata:
- labels:
- kustomize.toolkit.fluxcd.io/name: openebs-zfs-volumes
- kustomize.toolkit.fluxcd.io/namespace: openebs-system
- name: photos
-spec:
- accessModes:
- - ReadWriteOnce
- capacity:
- storage: 160Ti
- csi:
- driver: zfs.csi.openebs.io
- fsType: zfs
- volumeAttributes:
- openebs.io/cas-type: localpv-zfs
- openebs.io/poolname: reservoir
- volumeHandle: photos
- nodeAffinity:
- required:
- nodeSelectorTerms:
- - matchExpressions:
- - key: openebs.io/nodeid
- operator: In
- values:
- - kantai1
- persistentVolumeReclaimPolicy: Retain
- storageClassName: ''
- volumeMode: Filesystem
-
--- kubernetes/apps Kustomization: flux-system/cluster-apps Kustomization: openebs-system/openebs-zfs-volumes
+++ kubernetes/apps Kustomization: flux-system/cluster-apps Kustomization: openebs-system/openebs-zfs-volumes
@@ -1,21 +0,0 @@
----
-apiVersion: kustomize.toolkit.fluxcd.io/v1
-kind: Kustomization
-metadata:
- labels:
- kustomize.toolkit.fluxcd.io/name: cluster-apps
- kustomize.toolkit.fluxcd.io/namespace: flux-system
- name: openebs-zfs-volumes
- namespace: openebs-system
-spec:
- interval: 1h
- path: ./kubernetes/apps/openebs-system/zfs-volumes/resources
- prune: false
- retryInterval: 2m
- sourceRef:
- kind: GitRepository
- name: flux-system
- namespace: flux-system
- targetNamespace: openebs-system
- timeout: 5m
-
--- kubernetes/apps Kustomization: flux-system/cluster-apps Kustomization: storage/zfs-volumes
+++ kubernetes/apps Kustomization: flux-system/cluster-apps Kustomization: storage/zfs-volumes
@@ -0,0 +1,21 @@
+---
+apiVersion: kustomize.toolkit.fluxcd.io/v1
+kind: Kustomization
+metadata:
+ labels:
+ kustomize.toolkit.fluxcd.io/name: cluster-apps
+ kustomize.toolkit.fluxcd.io/namespace: flux-system
+ name: zfs-volumes
+ namespace: storage
+spec:
+ interval: 1h
+ path: ./kubernetes/apps/storage/zfs-volumes/resources
+ prune: false
+ retryInterval: 2m
+ sourceRef:
+ kind: GitRepository
+ name: flux-system
+ namespace: flux-system
+ targetNamespace: storage
+ timeout: 5m
+
--- kubernetes/apps/storage/zfs-volumes/resources Kustomization: storage/zfs-volumes PersistentVolume: storage/media1
+++ kubernetes/apps/storage/zfs-volumes/resources Kustomization: storage/zfs-volumes PersistentVolume: storage/media1
@@ -0,0 +1,29 @@
+---
+apiVersion: v1
+kind: PersistentVolume
+metadata:
+ finalizers:
+ - cluster.local/data-protection
+ labels:
+ kustomize.toolkit.fluxcd.io/name: zfs-volumes
+ kustomize.toolkit.fluxcd.io/namespace: storage
+ name: media1
+spec:
+ accessModes:
+ - ReadWriteOnce
+ - ReadWriteMany
+ capacity:
+ storage: 246Ti
+ local:
+ path: /var/mnt/reservoir/media1
+ nodeAffinity:
+ required:
+ nodeSelectorTerms:
+ - matchExpressions:
+ - key: kubernetes.io/hostname
+ operator: In
+ values:
+ - kantai1
+ persistentVolumeReclaimPolicy: Retain
+ storageClassName: ''
+
--- kubernetes/apps/storage/zfs-volumes/resources Kustomization: storage/zfs-volumes PersistentVolume: storage/media3
+++ kubernetes/apps/storage/zfs-volumes/resources Kustomization: storage/zfs-volumes PersistentVolume: storage/media3
@@ -0,0 +1,29 @@
+---
+apiVersion: v1
+kind: PersistentVolume
+metadata:
+ finalizers:
+ - cluster.local/data-protection
+ labels:
+ kustomize.toolkit.fluxcd.io/name: zfs-volumes
+ kustomize.toolkit.fluxcd.io/namespace: storage
+ name: media3
+spec:
+ accessModes:
+ - ReadWriteOnce
+ - ReadWriteMany
+ capacity:
+ storage: 246Ti
+ local:
+ path: /var/mnt/reservoir/media3
+ nodeAffinity:
+ required:
+ nodeSelectorTerms:
+ - matchExpressions:
+ - key: kubernetes.io/hostname
+ operator: In
+ values:
+ - kantai1
+ persistentVolumeReclaimPolicy: Retain
+ storageClassName: ''
+
--- kubernetes/apps/storage/zfs-volumes/resources Kustomization: storage/zfs-volumes PersistentVolume: storage/photos
+++ kubernetes/apps/storage/zfs-volumes/resources Kustomization: storage/zfs-volumes PersistentVolume: storage/photos
@@ -0,0 +1,29 @@
+---
+apiVersion: v1
+kind: PersistentVolume
+metadata:
+ finalizers:
+ - cluster.local/data-protection
+ labels:
+ kustomize.toolkit.fluxcd.io/name: zfs-volumes
+ kustomize.toolkit.fluxcd.io/namespace: storage
+ name: photos
+spec:
+ accessModes:
+ - ReadWriteOnce
+ - ReadWriteMany
+ capacity:
+ storage: 246Ti
+ local:
+ path: /var/mnt/reservoir/photos
+ nodeAffinity:
+ required:
+ nodeSelectorTerms:
+ - matchExpressions:
+ - key: kubernetes.io/hostname
+ operator: In
+ values:
+ - kantai1
+ persistentVolumeReclaimPolicy: Retain
+ storageClassName: ''
+ |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 2 potential issues.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 13ef406. Configure here.
| interval: 1h | ||
| retryInterval: 2m | ||
| timeout: 5m | ||
| --- |
There was a problem hiding this comment.
Deleted PVC still referenced by active workloads
High Severity
The media-smb-kantai3 PVC is deleted in this PR (along with its PV, ExternalSecret, and Kustomization entry which had prune: true), but it's still actively referenced by qbittorrent/app/helmrelease.yaml (existingClaim: media-smb-kantai3) and stash/app/helmrelease.yaml (existingClaim: media-smb-kantai3). Once Flux reconciles, the PVC will be garbage-collected and both workloads will fail to schedule due to the missing volume claim.
Reviewed by Cursor Bugbot for commit 13ef406. Configure here.
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
kubernetes/apps/storage/zfs-volumes/ks.yaml (1)
7-16:⚠️ Potential issue | 🟠 Major | ⚡ Quick winMissing required
components/volsyncandpostBuild.substitute.APPin thisks.yaml.This
kubernetes/apps/*/ks.yamldoes not include the repository-mandated Volsync component wiring andAPPsubstitution block. Please add both to keep backup integration and templating conventions consistent.Suggested patch
spec: path: ./kubernetes/apps/storage/zfs-volumes/resources prune: false # don't GC zfs volumes to avoid unwanted DR + components: + - ../../components/volsync + postBuild: + substitute: + APP: zfs-volumes sourceRef: kind: GitRepository name: flux-system namespace: flux-systemBased on learnings: "Applies to kubernetes/apps/*/ks.yaml : All Flux Kustomization files must reference
components/volsyncto wire up daily Kopia backups to Cloudflare R2 and usepostBuild.substitutewithAPPvariable".🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@kubernetes/apps/storage/zfs-volumes/ks.yaml` around lines 7 - 16, Add the missing Volsync component and APP substitution to this Kustomization: update the Kustomization resource (ks.yaml) to include the components entry referencing components/volsync (so the Kustomize build wires in volsync backups) and add a spec.postBuild.substitute block that defines APP with the application name used by this directory (e.g., set postBuild.substitute.APP to the app identifier used elsewhere in your repo); ensure you modify the existing Kustomization (the ks.yaml Kustomization resource) to include these two keys so Flux will apply volsync and the APP substitution during builds.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Outside diff comments:
In `@kubernetes/apps/storage/zfs-volumes/ks.yaml`:
- Around line 7-16: Add the missing Volsync component and APP substitution to
this Kustomization: update the Kustomization resource (ks.yaml) to include the
components entry referencing components/volsync (so the Kustomize build wires in
volsync backups) and add a spec.postBuild.substitute block that defines APP with
the application name used by this directory (e.g., set postBuild.substitute.APP
to the app identifier used elsewhere in your repo); ensure you modify the
existing Kustomization (the ks.yaml Kustomization resource) to include these two
keys so Flux will apply volsync and the APP substitution during builds.
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 013aef69-296d-4549-8b7f-658ee6bc3535
📒 Files selected for processing (15)
kubernetes/apps/default/media-smb/kantai3/externalsecret.yamlkubernetes/apps/default/media-smb/kantai3/pv.yamlkubernetes/apps/default/media-smb/kantai3/pvc.yamlkubernetes/apps/default/media-smb/ks.yamlkubernetes/apps/openebs-system/kustomization.yamlkubernetes/apps/openebs-system/zfs-volumes/resources/homeassistant-backup.yamlkubernetes/apps/openebs-system/zfs-volumes/resources/jf.yamlkubernetes/apps/openebs-system/zfs-volumes/resources/kustomization.yamlkubernetes/apps/openebs-system/zfs-volumes/resources/media1.yamlkubernetes/apps/openebs-system/zfs-volumes/resources/media2.yamlkubernetes/apps/openebs-system/zfs-volumes/resources/photos.yamlkubernetes/apps/storage/kustomization.yamlkubernetes/apps/storage/zfs-volumes/ks.yamlkubernetes/apps/storage/zfs-volumes/resources/kustomization.yamlkubernetes/apps/storage/zfs-volumes/resources/persistentvolume.yaml
💤 Files with no reviewable changes (11)
- kubernetes/apps/openebs-system/kustomization.yaml
- kubernetes/apps/default/media-smb/kantai3/pvc.yaml
- kubernetes/apps/default/media-smb/kantai3/externalsecret.yaml
- kubernetes/apps/openebs-system/zfs-volumes/resources/kustomization.yaml
- kubernetes/apps/openebs-system/zfs-volumes/resources/jf.yaml
- kubernetes/apps/default/media-smb/kantai3/pv.yaml
- kubernetes/apps/default/media-smb/ks.yaml
- kubernetes/apps/openebs-system/zfs-volumes/resources/media2.yaml
- kubernetes/apps/openebs-system/zfs-volumes/resources/media1.yaml
- kubernetes/apps/openebs-system/zfs-volumes/resources/photos.yaml
- kubernetes/apps/openebs-system/zfs-volumes/resources/homeassistant-backup.yaml
|
You have used all of your free Bugbot PR reviews. To receive reviews on all of your PRs, visit the Cursor dashboard to activate Pro and start your 14-day free trial. |


No description provided.