Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion config/modules/kustomization.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,12 @@ resources:
- prometheus/helmrepository.yaml
- prometheus/moduletemplate.yaml

- rook-ceph/helmrepository.yaml
- rook-ceph/moduletemplate.yaml
- rook-ceph/moduletemplate-cluster.yaml

# --- Kustomize-based ModuleTemplates ---
- cdi/moduletemplate.yaml
- gateway-api/moduletemplate.yaml
- gateway-api-inference-extension/moduletemplate.yaml
- kubevirt/moduletemplate.yaml
- rook-ceph/moduletemplate.yaml
8 changes: 8 additions & 0 deletions config/modules/rook-ceph/helmrepository.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: rook-ceph
namespace: otterscale-system
spec:
interval: 24h
url: https://charts.rook.io/release
8 changes: 0 additions & 8 deletions config/modules/rook-ceph/kustomization.yaml

This file was deleted.

77 changes: 77 additions & 0 deletions config/modules/rook-ceph/moduletemplate-cluster.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# ModuleTemplate — Rook-Ceph Cluster v__ROOK_CEPH_VERSION__ (Phase 2: CephCluster)
#
# Deploys CephCluster resources. Requires rook-ceph operator to be installed first.
#
# Apply order: rook-ceph → rook-ceph-cluster
apiVersion: module.otterscale.io/v1alpha1
kind: ModuleTemplate
metadata:
name: rook-ceph-cluster
spec:
namespace: rook-ceph

description: >-
Rook-Ceph Cluster v__ROOK_CEPH_VERSION__ — CephCluster resources. Requires rook-ceph operator.

helmRelease:
interval: 30m

dependsOn:
- name: rook-ceph
namespace: rook-ceph

Comment on lines +19 to +22
Copy link

Copilot AI Mar 23, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

helmRelease.dependsOn is hard-coded to name: rook-ceph in namespace: rook-ceph. Because the controller names HelmReleases after the Module (not the ModuleTemplate) and allows Module.spec.namespace overrides, this dependency will silently break if a user installs the operator Module under a different name and/or overrides its namespace. Consider (a) omitting dependsOn[].namespace so the dependency follows the HelmRelease namespace, and (b) documenting that the operator Module must be named rook-ceph (or otherwise make the naming/namespace coupling explicit).

Copilot uses AI. Check for mistakes.
chart:
spec:
chart: rook-ceph-cluster
version: "__ROOK_CEPH_VERSION__"
sourceRef:
kind: HelmRepository
name: rook-ceph
namespace: otterscale-system
interval: 24h

install:
remediation:
retries: 3

upgrade:
remediation:
retries: 3
force: false

timeout: 30m

values:
operatorNamespace: rook-ceph

cephClusterSpec:
mon:
count: 1

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

A mon.count of 1 creates a single point of failure for the Ceph control plane. For production or highly-available environments, it is strongly recommended to use a count of 3. While allowMultiplePerNode: true is useful for single-node test clusters, the default in a reusable template should promote a more resilient configuration.

          count: 3

allowMultiplePerNode: true
mgr:
count: 1

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

A mgr.count of 1 is not highly available. To ensure the Ceph manager is resilient, it's recommended to run an active/standby pair by setting the count to 2 for production workloads.

          count: 2

allowMultiplePerNode: true
network:
provider: host

cephObjectStores:
- name: ceph-objectstore
spec:
metadataPool:
failureDomain: host
replicated:
size: 3
dataPool:
failureDomain: host
erasureCoded:
dataChunks: 2
codingChunks: 1
gateway:
port: 8080
instances: 1
priorityClassName: system-cluster-critical
storageClass:
enabled: true
name: ceph-bucket
reclaimPolicy: Delete
volumeBindingMode: Immediate
34 changes: 26 additions & 8 deletions config/modules/rook-ceph/moduletemplate.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# ModuleTemplate — Rook-Ceph Operator v__ROOK_CEPH_VERSION__ (Phase 1: Operator only)
# Uses FluxCD Kustomization. Phase 2: Apply rook-ceph-cluster Module for CephCluster.
#
# Deploys Rook-Ceph Operator (CRDs, Operator Deployment). Create CephCluster separately via rook-ceph-cluster Module.
#
# Apply order: rook-ceph → rook-ceph-cluster
apiVersion: module.otterscale.io/v1alpha1
kind: ModuleTemplate
metadata:
Expand All @@ -10,11 +13,26 @@ spec:
description: >-
Rook-Ceph Operator v__ROOK_CEPH_VERSION__ — CRDs, Operator Deployment. Create CephCluster separately via rook-ceph-cluster Module.

kustomization:
helmRelease:
interval: 30m
prune: true
sourceRef:
kind: GitRepository
name: otterscale-module-operator
namespace: otterscale-system
path: config/modules/rook-ceph

chart:
spec:
chart: rook-ceph
version: "__ROOK_CEPH_VERSION__"
sourceRef:
kind: HelmRepository
name: rook-ceph
namespace: otterscale-system
interval: 24h

install:
remediation:
retries: 3

upgrade:
remediation:
retries: 3
force: false

timeout: 30m
6 changes: 6 additions & 0 deletions config/samples/module-rook-ceph-cluster.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
apiVersion: module.otterscale.io/v1alpha1
kind: Module
metadata:
name: rook-ceph-cluster
spec:
templateRef: rook-ceph-cluster
Loading