Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
27493e2
Draft implementation, not functional yet
fernando-villalba Dec 29, 2025
4057894
Adding test files and updating go mod files
fernando-villalba Dec 30, 2025
cd3f46b
Building up the implementation and adding some test files, not a func…
fernando-villalba Dec 30, 2025
7109420
feat(webhook): add mutating and validating admission webhooks
fernando-villalba Jan 7, 2026
5143dd6
Fix webhook self-bootstrapping: Add RBAC, namespace awareness, and wr…
fernando-villalba Jan 8, 2026
17a0c41
feat: implement webhook cert auto-discovery, deep defaulting, and fix…
fernando-villalba Jan 9, 2026
bf70445
Renaming sample file to make it less confusing
fernando-villalba Jan 9, 2026
00f318f
feat(webhook): refactor to ManagedBy pattern and overhaul cert rotation
fernando-villalba Jan 10, 2026
1486280
fix: harden tests and refactor webhook handlers
fernando-villalba Jan 10, 2026
789b396
feat(webhook): refactor certificate management to production-grade ar…
fernando-villalba Jan 11, 2026
ebcb57e
feat(deploy): add production-grade cert-manager support
fernando-villalba Jan 11, 2026
1cbad2b
feat(cluster-handler): enable kubernetes events for observability
fernando-villalba Jan 12, 2026
6f36e90
feat(webhook): refine defaulting logic for hybrid static/dynamic conf…
fernando-villalba Jan 13, 2026
8f3097c
feat: Implement Smart Defaulting, TableGroup Finalizers, and harden C…
fernando-villalba Jan 15, 2026
c15dd7c
Adding missing build and version flags
fernando-villalba Jan 15, 2026
3a3ee58
Resolved merged conflicts
fernando-villalba Jan 15, 2026
8f5b5da
Updating API module reference to latest
fernando-villalba Jan 15, 2026
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
4 changes: 2 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ dist/
go.work
go.work.sum
cover.out
*cover.out
cover.html
coverage/

# kubebuilder
bin/

Expand All @@ -23,4 +23,4 @@ kubeconfig.yaml


# MacOS
.DS_Store
.DS_Store
1 change: 1 addition & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ repos:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
args: [--allow-multiple-documents]
- id: check-added-large-files

- repo: local
Expand Down
38 changes: 35 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,8 @@ CONTROLLER_TOOLS_VERSION ?= v0.18.0
# renovate: datasource=github-releases depName=golangci/golangci-lint
GOLANGCI_LINT_VERSION ?= v2.3.0

CERT_MANAGER_VERSION ?= v1.19.2

## Envtest
#ENVTEST_VERSION is the version of controller-runtime release branch to fetch the envtest setup script (i.e. release-0.20)
ENVTEST_VERSION ?= $(shell go list -m -f "{{ .Version }}" sigs.k8s.io/controller-runtime | awk -F'[v.]' '{printf "release-%d.%d", $$2, $$3}')
Expand Down Expand Up @@ -134,11 +136,10 @@ help: ## Display this help.

.PHONY: manifests
manifests: controller-gen ## Generate WebhookConfiguration, ClusterRole and CustomResourceDefinition objects.
$(CONTROLLER_GEN) rbac:roleName=manager-role crd webhook paths="./api/..." output:crd:artifacts:config=config/crd/bases output:rbac:artifacts:config=config/rbac

$(CONTROLLER_GEN) rbac:roleName=manager-role crd webhook paths="./api/...;./pkg/webhook/..." output:crd:artifacts:config=config/crd/bases output:rbac:artifacts:config=config/rbac output:webhook:artifacts:config=config/webhook
.PHONY: generate
generate: controller-gen ## Generate code containing DeepCopy, DeepCopyInto, and DeepCopyObject method implementations.
$(CONTROLLER_GEN) object paths="./api/..."
$(CONTROLLER_GEN) object paths="./api/...;./pkg/webhook/..."
# $(CONTROLLER_GEN) object:headerFile="hack/boilerplate.go.txt" paths="./..."

.PHONY: fmt
Expand Down Expand Up @@ -427,6 +428,30 @@ kind-deploy: kind-up manifests kustomize kind-load ## Deploy operator to kind cl
@echo "==> Deployment complete!"
@echo "Check status: KUBECONFIG=$(KIND_KUBECONFIG) kubectl get pods -n multigres-operator"

.PHONY: kind-deploy-certmanager
kind-deploy-certmanager: kind-up install-certmanager manifests kustomize kind-load
@echo "==> Installing CRDs..."
KUBECONFIG=$(KIND_KUBECONFIG) $(KUSTOMIZE) build config/crd | \
KUBECONFIG=$(KIND_KUBECONFIG) $(KUBECTL) apply --server-side -f -
@echo "==> Deploying operator (Cert-Manager Mode)..."
cd config/manager && $(KUSTOMIZE) edit set image controller=$(IMG)
# POINT TO THE OVERLAY:
KUBECONFIG=$(KIND_KUBECONFIG) $(KUSTOMIZE) build config/deploy-certmanager | \
KUBECONFIG=$(KIND_KUBECONFIG) $(KUBECTL) apply --server-side -f -
@echo "==> Deployment complete!"
@echo "Check status: KUBECONFIG=$(KIND_KUBECONFIG) kubectl get pods -n multigres-operator"

.PHONY: kind-deploy-no-webhook
kind-deploy-no-webhook: kind-up install-certmanager manifests kustomize kind-load ## Deploy controller to Kind without the webhook enabled.
@echo "==> Installing CRDs..."
KUBECONFIG=$(KIND_KUBECONFIG) $(KUSTOMIZE) build config/crd | KUBECONFIG=$(KIND_KUBECONFIG) $(KUBECTL) apply --server-side -f -
@echo "==> Deploying operator..."
cd config/manager && $(KUSTOMIZE) edit set image controller=$(IMG)
KUBECONFIG=$(KIND_KUBECONFIG) $(KUSTOMIZE) build config/no-webhook | KUBECONFIG=$(KIND_KUBECONFIG) $(KUBECTL) apply --server-side -f -
@echo "==> Deployment complete!"
@echo "Check status: KUBECONFIG=$(KIND_KUBECONFIG) kubectl get pods -n multigres-operator"


.PHONY: kind-redeploy
kind-redeploy: kind-load ## Rebuild image, reload to kind, and restart pods
@echo "==> Restarting operator pods..."
Expand Down Expand Up @@ -469,6 +494,13 @@ golangci-lint: $(GOLANGCI_LINT) ## Download golangci-lint locally if necessary.
$(GOLANGCI_LINT): $(LOCALBIN)
$(call go-install-tool,$(GOLANGCI_LINT),github.com/golangci/golangci-lint/v2/cmd/golangci-lint,$(GOLANGCI_LINT_VERSION))

.PHONY: install-certmanager
install-certmanager: ## Install Cert-Manager into the cluster
@echo "==> Installing Cert-Manager $(CERT_MANAGER_VERSION)..."
$(KUBECTL) apply -f https://github.com/cert-manager/cert-manager/releases/download/$(CERT_MANAGER_VERSION)/cert-manager.yaml
@echo "==> Waiting for Cert-Manager to be ready..."
$(KUBECTL) wait --for=condition=Available deployment --all -n cert-manager --timeout=300s

# go-install-tool will 'go install' any package with custom target and name of binary, if it doesn't exist
# $1 - target path with name of binary
# $2 - package url which can be installed
Expand Down
18 changes: 10 additions & 8 deletions api/v1alpha1/multigrescluster_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,20 +22,22 @@ import (
)

// ============================================================================
// RBAC Markers (Temporary Location)
// RBAC Markers
// ============================================================================
//
// TODO: Move these RBAC markers to the controller implementation
// (pkg/cluster-handler/controller/multigrescluster/multigrescluster_controller.go)
// to follow kubebuilder conventions. They are temporarily placed here because
// controller-gen cannot process files in go.work modules.
//

// -- Standard CRD Permissions --
// +kubebuilder:rbac:groups=multigres.com,resources=multigresclusters,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups=multigres.com,resources=multigresclusters/status,verbs=get;update;patch
// +kubebuilder:rbac:groups=multigres.com,resources=multigresclusters/finalizers,verbs=update
// +kubebuilder:rbac:groups=multigres.com,resources=coretemplates;celltemplates;shardtemplates,verbs=get;list;watch
// +kubebuilder:rbac:groups=multigres.com,resources=cells;tablegroups;toposervers,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups=apps,resources=deployments,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups="",resources=events,verbs=create;patch

// -- Certificate Manager Permissions (ADDED) --
// +kubebuilder:rbac:groups="",resources=secrets,verbs=get;list;watch;create;update;patch;delete
// +kubebuilder:rbac:groups="",resources=services,verbs=get;list;watch
// +kubebuilder:rbac:groups=apps,resources=deployments,verbs=get;list;watch;update;patch
// +kubebuilder:rbac:groups=admissionregistration.k8s.io,resources=mutatingwebhookconfigurations;validatingwebhookconfigurations,verbs=get;list;watch;update;patch

// ============================================================================
// MultigresClusterSpec Spec (User-editable API)
Expand Down
Loading
Loading