Skip to content

Commit 19db487

Browse files
committed
Upgrade operator-sdk from v1.31.0 to v1.41.1
This upgrades the operator-sdk to version 1.41.1, which includes migrating to the Kubebuilder v4 layout and modernizing the project structure. Key changes: - Re-scaffold the project with operator-sdk 1.41.1 - Update both main.go to support the latest kubebuilder features. This includes using WithAuthenticationAndAuthorization to guard metrics endpoints. This drops use of kube-rbac-proxy for openstack-operator. - Migrated from Kubebuilder v3 to v4 layout (PROJECT file updated) - Renamed apis/ directory to api/ following Kubebuilder v4 conventions - Updated all import paths throughout the codebase to use api/ instead of apis/ - Moved main.go to cmd/main.go per new project structure - Partially updated webhook implementations to use new validation/defaulting patterns. More work can be done to consolidate the webhook code in the internal/webhook directory in the future. - Added missing webhook configurations for OpenStackClient, OpenStackDataPlaneService, and OpenStackDataPlaneDeployment to PROJECT - Upgraded kustomize from v5.5.0 to v5.6.0 - Updated controller-gen paths to reflect new directory structure - Updated all Makefile targets and test paths Co-Authored-By: Claude <[email protected]> Jira: OSPRH-21438
1 parent f201c73 commit 19db487

File tree

404 files changed

+4550
-1406
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

404 files changed

+4550
-1406
lines changed

.ci-operator.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
build_root_image:
22
name: tools
33
namespace: openstack-k8s-operators
4-
tag: ci-build-root-golang-1.24-sdk-1.31
4+
tag: ci-build-root-golang-1.24-sdk-1.41.1

.github/workflows/build-openstack-operator.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ jobs:
1616
with:
1717
operator_name: openstack
1818
go_version: 1.24.x
19-
operator_sdk_version: 1.31.0
19+
operator_sdk_version: 1.41.1
2020
bundle_dockerfile: ./bundle.Dockerfile
2121
operator_version: 0.5.0
2222
secrets:

.github/workflows/force-bump-pr-manual.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@ jobs:
99
with:
1010
operator_name: openstack
1111
branch_name: ${{ github.ref_name }}
12-
custom_image: quay.io/openstack-k8s-operators/openstack-k8s-operators-ci-build-tools:golang-1.24-sdk-1.31
12+
custom_image: quay.io/openstack-k8s-operators/openstack-k8s-operators-ci-build-tools:golang-1.24-sdk-1.41.1
1313
secrets:
1414
FORCE_BUMP_PULL_REQUEST_PAT: ${{ secrets.FORCE_BUMP_PULL_REQUEST_PAT }}

.github/workflows/force-bump-pr-scheduled.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@ jobs:
1010
uses: openstack-k8s-operators/openstack-k8s-operators-ci/.github/workflows/force-bump-branches.yaml@main
1111
with:
1212
operator_name: openstack
13-
custom_image: quay.io/openstack-k8s-operators/openstack-k8s-operators-ci-build-tools:golang-1.24-sdk-1.31
13+
custom_image: quay.io/openstack-k8s-operators/openstack-k8s-operators-ci-build-tools:golang-1.24-sdk-1.41.1
1414
secrets:
1515
FORCE_BUMP_PULL_REQUEST_PAT: ${{ secrets.FORCE_BUMP_PULL_REQUEST_PAT }}

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ RUN mkdir -p ${DEST_ROOT}/usr/local/bin/
2525
RUN if [ ! -f $CACHITO_ENV_FILE ]; then go mod download ; fi
2626

2727
# Build manager
28-
RUN if [ -f $CACHITO_ENV_FILE ] ; then source $CACHITO_ENV_FILE ; fi ; env ${GO_BUILD_EXTRA_ENV_ARGS} go build ${GO_BUILD_EXTRA_ARGS} -a -o ${DEST_ROOT}/manager main.go
28+
RUN if [ -f $CACHITO_ENV_FILE ] ; then source $CACHITO_ENV_FILE ; fi ; env ${GO_BUILD_EXTRA_ENV_ARGS} go build ${GO_BUILD_EXTRA_ARGS} -a -o ${DEST_ROOT}/manager cmd/main.go
2929
RUN if [ -f $CACHITO_ENV_FILE ] ; then source $CACHITO_ENV_FILE ; fi ; env ${GO_BUILD_EXTRA_ENV_ARGS} go build ${GO_BUILD_EXTRA_ARGS} -a -o ${DEST_ROOT}/operator cmd/operator/main.go
3030

3131
RUN cp -r config/services ${DEST_ROOT}/services

Makefile

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ endif
5050

5151
# Set the Operator SDK version to use. By default, what is installed on the system is used.
5252
# This is useful for CI or a project to utilize a specific version of the operator-sdk toolkit.
53-
OPERATOR_SDK_VERSION ?= v1.31.0
53+
OPERATOR_SDK_VERSION ?= v1.41.1
5454

5555
# Image URL to use all building/pushing image targets
5656
DEFAULT_IMG ?= quay.io/openstack-k8s-operators/openstack-operator:latest
@@ -139,9 +139,9 @@ help: ## Display this help.
139139
manifests: controller-gen ## Generate WebhookConfiguration, ClusterRole and CustomResourceDefinition objects.
140140
mkdir -p config/operator/rbac && \
141141
$(CONTROLLER_GEN) crd$(CRDDESC_OVERRIDE) output:crd:artifacts:config=config/crd/bases webhook paths="./..." && \
142-
$(CONTROLLER_GEN) rbac:roleName=manager-role paths="{./apis/client/...,./apis/core/...,./apis/dataplane/...,./controllers/client/...,./controllers/core/...,./controllers/dataplane/...,./pkg/...}" output:dir=config/rbac && \
143-
$(CONTROLLER_GEN) rbac:roleName=operator-role paths="./controllers/operator/..." paths="./apis/operator/..." output:dir=config/operator/rbac && \
144-
rm -f apis/bases/* && cp -a config/crd/bases apis/
142+
$(CONTROLLER_GEN) rbac:roleName=manager-role paths="{./api/client/...,./api/core/...,./api/dataplane/...,./internal/controller/client/...,./internal/controller/core/...,./internal/controller/dataplane/...,./internal/...}" output:dir=config/rbac && \
143+
$(CONTROLLER_GEN) rbac:roleName=operator-role paths="./internal/controller/operator/..." paths="./api/operator/..." output:dir=config/operator/rbac && \
144+
rm -f api/bases/* && cp -a config/crd/bases api/
145145

146146
.PHONY: generate
147147
generate: controller-gen ## Generate code containing DeepCopy, DeepCopyInto, and DeepCopyObject method implementations.
@@ -171,22 +171,22 @@ fmt: ## Run go fmt against code.
171171
.PHONY: vet
172172
vet: gowork ## Run go vet against code.
173173
go vet ./...
174-
go vet ./apis/...
174+
go vet ./api/...
175175

176176
BRANCH ?= main
177177
.PHONY: force-bump
178178
force-bump: ## Force bump after tagging
179179
for dep in $$(cat go.mod | grep openstack-k8s-operators | grep -vE -- 'indirect|openstack-operator|^replace' | awk '{print $$1}'); do \
180180
go get $$dep@$(BRANCH) ; \
181181
done
182-
for dep in $$(cat apis/go.mod | grep openstack-k8s-operators | grep -vE -- 'indirect|openstack-operator|^replace' | awk '{print $$1}'); do \
183-
cd ./apis && go get $$dep@$(BRANCH) && cd .. ; \
182+
for dep in $$(cat api/go.mod | grep openstack-k8s-operators | grep -vE -- 'indirect|openstack-operator|^replace' | awk '{print $$1}'); do \
183+
cd ./api && go get $$dep@$(BRANCH) && cd .. ; \
184184
done
185185

186186
.PHONY: tidy
187187
tidy: ## Run go mod tidy on every mod file in the repo
188188
go mod tidy
189-
cd ./apis && go mod tidy
189+
cd ./api && go mod tidy
190190

191191
GOLANGCI_LINT_VERSION ?= v2.4.0
192192
.PHONY: golangci-lint
@@ -207,7 +207,7 @@ ginkgo-run: ## Run ginkgo.
207207
source hack/export_related_images.sh && \
208208
KUBEBUILDER_ASSETS="$(shell $(ENVTEST) -v debug --bin-dir $(LOCALBIN) use $(ENVTEST_K8S_VERSION) -p path)" \
209209
OPERATOR_TEMPLATES="$(PWD)/templates" \
210-
$(GINKGO) --trace --cover --coverpkg=./pkg/...,./controllers/...,./apis/... --coverprofile cover.out --covermode=atomic ${PROC_CMD} $(GINKGO_ARGS) $(GINKGO_TESTS)
210+
$(GINKGO) --trace --cover --coverpkg=./internal/...,./api/... --coverprofile cover.out --covermode=atomic ${PROC_CMD} $(GINKGO_ARGS) $(GINKGO_TESTS)
211211

212212
.PHONY: test-all
213213
test-all: test golint golangci golangci-lint ## Run all tests.
@@ -220,7 +220,7 @@ cover: test ## Run tests and display functional test coverage
220220

221221
.PHONY: build
222222
build: generate fmt vet ## Build manager binary.
223-
go build -o bin/manager main.go
223+
go build -o bin/manager cmd/main.go
224224
go build -o bin/operator cmd/operator/main.go
225225

226226
.PHONY: run
@@ -231,7 +231,7 @@ run: export ENABLE_WEBHOOKS?=false
231231
run: manifests generate fmt vet ## Run a controller from your host.
232232
/bin/bash hack/clean_local_webhook.sh
233233
source hack/export_related_images.sh && \
234-
go run ./main.go -metrics-bind-address ":$(METRICS_PORT)" -health-probe-bind-address ":$(HEALTH_PORT)" -pprof-bind-address ":$(PPROF_PORT)"
234+
go run ./cmd/main.go -metrics-bind-address ":$(METRICS_PORT)" -health-probe-bind-address ":$(HEALTH_PORT)" -pprof-bind-address ":$(PPROF_PORT)"
235235

236236
.PHONY: run-operator
237237
run-operator: export METRICS_PORT?=8080
@@ -270,6 +270,12 @@ docker-buildx: ## Build and push docker image for the manager for cross-platfor
270270
- docker buildx rm project-v3-builder
271271
rm Dockerfile.cross
272272

273+
.PHONY: build-installer
274+
build-installer: manifests generate kustomize ## Generate a consolidated YAML with CRDs and deployment.
275+
mkdir -p dist
276+
cd config/manager && $(KUSTOMIZE) edit set image controller=${IMG}
277+
$(KUSTOMIZE) build config/default > dist/install.yaml
278+
273279
##@ Deployment
274280

275281
ifndef ignore-not-found
@@ -306,12 +312,12 @@ CONTROLLER_GEN ?= $(LOCALBIN)/controller-gen
306312
ENVTEST ?= $(LOCALBIN)/setup-envtest
307313
CRD_MARKDOWN ?= $(LOCALBIN)/crd-to-markdown
308314
GINKGO ?= $(LOCALBIN)/ginkgo
309-
GINKGO_TESTS ?= ./tests/... ./apis/client/... ./apis/core/... ./apis/dataplane/... ./pkg/...
315+
GINKGO_TESTS ?= ./test/... ./api/client/... ./api/core/... ./api/dataplane/... ./internal/...
310316

311317
KUTTL ?= $(LOCALBIN)/kubectl-kuttl
312318

313319
## Tool Versions
314-
KUSTOMIZE_VERSION ?= v5.5.0 #(dprince: bumped to aquire new features like --load-restrictor)
320+
KUSTOMIZE_VERSION ?= v5.6.0 #(dprince: bumped to aquire new features like --load-restrictor)
315321
CONTROLLER_TOOLS_VERSION ?= v0.18.0
316322
CRD_MARKDOWN_VERSION ?= v0.0.3
317323
KUTTL_VERSION ?= 0.17.0
@@ -351,7 +357,7 @@ $(GINKGO): $(LOCALBIN)
351357

352358
.PHONY: kuttl-test
353359
kuttl-test: ## Run kuttl tests
354-
$(LOCALBIN)/kubectl-kuttl test --config kuttl-test.yaml tests/kuttl/tests $(KUTTL_ARGS)
360+
$(LOCALBIN)/kubectl-kuttl test --config kuttl-test.yaml test/kuttl/tests $(KUTTL_ARGS)
355361

356362
.PHONY: kuttl
357363
kuttl: $(KUTTL) ## Download kubectl-kuttl locally if necessary.
@@ -380,8 +386,8 @@ endif
380386
bundle: manifests kustomize operator-sdk ## Generate bundle manifests and metadata, then validate generated files.
381387
$(OPERATOR_SDK) generate kustomize manifests -q
382388
cd config/operator/deployment/ && $(KUSTOMIZE) edit set image controller=$(IMG) && \
383-
$(KUSTOMIZE) edit add patch --kind Deployment --name openstack-operator-controller-operator --namespace system --patch "[{\"op\": \"replace\", \"path\": \"/spec/template/spec/containers/1/env/0\", \"value\": {\"name\": \"OPENSTACK_RELEASE_VERSION\", \"value\": \"$(OPENSTACK_RELEASE_VERSION)\"}}]" && \
384-
$(KUSTOMIZE) edit add patch --kind Deployment --name openstack-operator-controller-operator --namespace system --patch "[{\"op\": \"replace\", \"path\": \"/spec/template/spec/containers/1/env/1\", \"value\": {\"name\": \"OPERATOR_IMAGE_URL\", \"value\": \"$(IMG)\"}}]"
389+
$(KUSTOMIZE) edit add patch --kind Deployment --name openstack-operator-controller-operator --namespace system --patch "[{\"op\": \"replace\", \"path\": \"/spec/template/spec/containers/0/env/0\", \"value\": {\"name\": \"OPENSTACK_RELEASE_VERSION\", \"value\": \"$(OPENSTACK_RELEASE_VERSION)\"}}]" && \
390+
$(KUSTOMIZE) edit add patch --kind Deployment --name openstack-operator-controller-operator --namespace system --patch "[{\"op\": \"replace\", \"path\": \"/spec/template/spec/containers/0/env/1\", \"value\": {\"name\": \"OPERATOR_IMAGE_URL\", \"value\": \"$(IMG)\"}}]"
385391
$(KUSTOMIZE) build config/operator --load-restrictor='LoadRestrictionsNone' | $(OPERATOR_SDK) generate bundle $(BUNDLE_GEN_FLAGS)
386392
$(OPERATOR_SDK) bundle validate ./bundle
387393

@@ -468,37 +474,37 @@ get-ci-tools:
468474
# Run go fmt against code
469475
gofmt: get-ci-tools
470476
GOWORK=off $(CI_TOOLS_REPO_DIR)/test-runner/gofmt.sh
471-
GOWORK=off $(CI_TOOLS_REPO_DIR)/test-runner/gofmt.sh ./apis
477+
GOWORK=off $(CI_TOOLS_REPO_DIR)/test-runner/gofmt.sh ./api
472478

473479
# Run go vet against code
474480
govet: get-ci-tools
475481
GOWORK=off $(CI_TOOLS_REPO_DIR)/test-runner/govet.sh
476-
GOWORK=off $(CI_TOOLS_REPO_DIR)/test-runner/govet.sh ./apis
482+
GOWORK=off $(CI_TOOLS_REPO_DIR)/test-runner/govet.sh ./api
477483

478484
# Run go test against code
479485
gotest: test
480486

481487
# Run golangci-lint test against code
482488
golangci: get-ci-tools
483489
GOWORK=off $(CI_TOOLS_REPO_DIR)/test-runner/golangci.sh
484-
GOWORK=off $(CI_TOOLS_REPO_DIR)/test-runner/golangci.sh ./apis
490+
GOWORK=off $(CI_TOOLS_REPO_DIR)/test-runner/golangci.sh ./api
485491

486492
# Run go lint against code
487493
golint: get-ci-tools
488494
GOWORK=off PATH=$(GOBIN):$(PATH); $(CI_TOOLS_REPO_DIR)/test-runner/golint.sh
489-
GOWORK=off PATH=$(GOBIN):$(PATH); $(CI_TOOLS_REPO_DIR)/test-runner/golint.sh ./apis
495+
GOWORK=off PATH=$(GOBIN):$(PATH); $(CI_TOOLS_REPO_DIR)/test-runner/golint.sh ./api
490496

491497
.PHONY: gowork
492498
gowork: ## Generate go.work file to support our multi module repository
493499
test -f go.work || GOTOOLCHAIN=$(GOTOOLCHAIN_VERSION) go work init
494500
go work use .
495-
go work use ./apis
501+
go work use ./api
496502
go work sync
497503

498504
.PHONY: operator-lint
499505
operator-lint: gowork ## Runs operator-lint
500506
GOBIN=$(LOCALBIN) go install github.com/gibizer/[email protected]
501-
go vet -vettool=$(LOCALBIN)/operator-lint ./... ./apis/...
507+
go vet -vettool=$(LOCALBIN)/operator-lint ./... ./api/...
502508

503509
# Used for webhook testing
504510
# The configure_local_webhook.sh script below will remove any OLM webhooks

PROJECT

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
# More info: https://book.kubebuilder.io/reference/project-config.html
55
domain: openstack.org
66
layout:
7-
- go.kubebuilder.io/v3
7+
- go.kubebuilder.io/v4
88
multigroup: true
99
plugins:
1010
manifests.sdk.operatorframework.io/v2: {}
@@ -19,9 +19,10 @@ resources:
1919
domain: openstack.org
2020
group: core
2121
kind: OpenStackControlPlane
22-
path: github.com/openstack-k8s-operators/openstack-operator/apis/core/v1beta1
22+
path: github.com/openstack-k8s-operators/openstack-operator/api/core/v1beta1
2323
version: v1beta1
2424
webhooks:
25+
defaulting: true
2526
validation: true
2627
webhookVersion: v1
2728
- api:
@@ -31,16 +32,20 @@ resources:
3132
domain: openstack.org
3233
group: client
3334
kind: OpenStackClient
34-
path: github.com/openstack-k8s-operators/openstack-operator/apis/client/v1beta1
35+
path: github.com/openstack-k8s-operators/openstack-operator/api/client/v1beta1
3536
version: v1beta1
37+
webhooks:
38+
defaulting: true
39+
validation: true
40+
webhookVersion: v1
3641
- api:
3742
crdVersion: v1
3843
namespaced: true
3944
controller: true
4045
domain: openstack.org
4146
group: core
4247
kind: OpenStackVersion
43-
path: github.com/openstack-k8s-operators/openstack-operator/apis/core/v1beta1
48+
path: github.com/openstack-k8s-operators/openstack-operator/api/core/v1beta1
4449
version: v1beta1
4550
webhooks:
4651
defaulting: true
@@ -53,7 +58,7 @@ resources:
5358
domain: openstack.org
5459
group: dataplane
5560
kind: OpenStackDataPlaneNodeSet
56-
path: github.com/openstack-k8s-operators/openstack-operator/apis/dataplane/v1beta1
61+
path: github.com/openstack-k8s-operators/openstack-operator/api/dataplane/v1beta1
5762
version: v1beta1
5863
webhooks:
5964
defaulting: true
@@ -66,24 +71,32 @@ resources:
6671
domain: openstack.org
6772
group: dataplane
6873
kind: OpenStackDataPlaneService
69-
path: github.com/openstack-k8s-operators/openstack-operator/apis/dataplane/v1beta1
74+
path: github.com/openstack-k8s-operators/openstack-operator/api/dataplane/v1beta1
7075
version: v1beta1
76+
webhooks:
77+
defaulting: true
78+
validation: true
79+
webhookVersion: v1
7180
- api:
7281
crdVersion: v1
7382
namespaced: true
7483
controller: true
7584
domain: openstack.org
7685
group: dataplane
7786
kind: OpenStackDataPlaneDeployment
78-
path: github.com/openstack-k8s-operators/openstack-operator/apis/dataplane/v1beta1
87+
path: github.com/openstack-k8s-operators/openstack-operator/api/dataplane/v1beta1
7988
version: v1beta1
89+
webhooks:
90+
defaulting: true
91+
validation: true
92+
webhookVersion: v1
8093
- api:
8194
crdVersion: v1
8295
namespaced: true
8396
controller: true
8497
domain: openstack.org
8598
group: operator
8699
kind: OpenStack
87-
path: github.com/openstack-k8s-operators/openstack-operator/apis/operator/v1beta1
100+
path: github.com/openstack-k8s-operators/openstack-operator/api/operator/v1beta1
88101
version: v1beta1
89102
version: "3"

0 commit comments

Comments
 (0)