Skip to content

Commit 063aea6

Browse files
upgrade operator SDK from v1.28 to v1.33 (#33)
* upgrade operator SDK from v1.28 to v1.33 * pre-merge * back to control gen v0.9.2 * Move go/v4 plugin from alpha to stable
1 parent cdab4a2 commit 063aea6

15 files changed

+246
-656
lines changed

.run/Build & Run.run.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
<env name="ENABLE_WEBHOOKS" value="false" />
88
</envs>
99
<kind value="FILE" />
10-
<package value="$PROJECT_DIR$/main.go" />
10+
<package value="$PROJECT_DIR$/cmd/main.go" />
1111
<directory value="$PROJECT_DIR$" />
12-
<filePath value="$PROJECT_DIR$/main.go" />
12+
<filePath value="$PROJECT_DIR$/cmd/main.go" />
1313
<method v="2" />
1414
</configuration>
1515
</component>

.run/Test v1alpha1 (api_v1alpha1).run.xml

-17
This file was deleted.

.tool-versions

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
golang 1.19.8
1+
golang 1.21.6
22
act 0.2.26
33
kuttl 0.15.0
4-
operator-sdk 1.28.0
4+
operator-sdk 1.33.0
55
kind 0.18.0
66
istioctl 1.17.2
7-
golangci-lint 1.53.2
8-
yq 4.40.5
7+
golangci-lint 1.54.1
8+
yq 4.40.5

Dockerfile

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Build the manager binary
2-
FROM golang:1.19 as builder
2+
FROM golang:1.21 as builder
33

44
WORKDIR /workspace
55
# Copy the Go Modules manifests
@@ -10,14 +10,14 @@ COPY go.sum go.sum
1010
RUN go mod download
1111

1212
# Copy the go source
13-
COPY main.go main.go
13+
COPY cmd/main.go cmd/main.go
1414
COPY api/ api/
15-
COPY controllers/ controllers/
15+
COPY internal/controller/ internal/controller/
1616
COPY pkg/ pkg/
1717
COPY extensions/ extensions/
1818

1919
# Build
20-
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -o manager main.go
20+
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -o manager cmd/main.go
2121

2222
# Use distroless as minimal base image to package the manager binary
2323
# Refer to https://github.com/GoogleContainerTools/distroless for more details

Makefile

+4-3
Original file line numberDiff line numberDiff line change
@@ -117,11 +117,11 @@ lint: ## Run various linters
117117

118118
.PHONY: build
119119
build: manifests generate fmt vet ## Build manager binary.
120-
go build -o bin/manager main.go
120+
go build -o bin/manager cmd/main.go
121121

122122
.PHONY: run
123123
run: manifests generate fmt vet ## Run a controller from your host.
124-
ENABLE_WEBHOOKS=false go run ./main.go -zap-devel
124+
ENABLE_WEBHOOKS=false go run ./cmd/main.go -zap-devel
125125

126126
.PHONY: docker-build
127127
docker-build: ## Build docker image with the manager.
@@ -215,7 +215,8 @@ $(CONTROLLER_GEN): $(LOCALBIN)
215215
.PHONY: envtest
216216
envtest: $(ENVTEST) ## Download envtest-setup locally if necessary.
217217
$(ENVTEST): $(LOCALBIN)
218-
test -s $(LOCALBIN)/setup-envtest || GOBIN=$(LOCALBIN) go install sigs.k8s.io/controller-runtime/tools/setup-envtest@latest
218+
# https://github.com/kubernetes-sigs/kubebuilder/issues/2480
219+
test -s $(LOCALBIN)/setup-envtest || GOBIN=$(LOCALBIN) go install sigs.k8s.io/controller-runtime/tools/[email protected]
219220

220221
.PHONY: bundle
221222
bundle: manifests kustomize ## Generate bundle manifests and metadata, then validate generated files.

PROJECT

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
domain: com
22
layout:
3-
- go.kubebuilder.io/v3
3+
- go.kubebuilder.io/v4
44
plugins:
55
manifests.sdk.operatorframework.io/v2: {}
66
scorecard.sdk.operatorframework.io/v2: {}

api/v1alpha1/dynamicenv_webhook.go

+11-10
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"fmt"
2121
"k8s.io/utils/strings/slices"
2222
"reflect"
23+
"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
2324

2425
"k8s.io/apimachinery/pkg/api/errors"
2526
"k8s.io/apimachinery/pkg/runtime"
@@ -44,37 +45,37 @@ func (de *DynamicEnv) SetupWebhookWithManager(mgr ctrl.Manager) error {
4445
var _ webhook.Validator = &DynamicEnv{}
4546

4647
// ValidateCreate implements webhook.Validator so a webhook will be registered for the type
47-
func (de *DynamicEnv) ValidateCreate() error {
48+
func (de *DynamicEnv) ValidateCreate() (admission.Warnings, error) {
4849
dynamicenvlog.Info("validate create", "name", de.Name)
4950

5051
if err := de.validateIstioMatchAnyOf(); err != nil {
51-
return err
52+
return nil, err
5253
}
5354
if err := de.validateSubsetsProperties(); err != nil {
54-
return err
55+
return nil, err
5556
}
5657

57-
return de.validateStringMatchOneOf()
58+
return nil, de.validateStringMatchOneOf()
5859
}
5960

6061
// ValidateUpdate implements webhook.Validator so a webhook will be registered for the type
61-
func (de *DynamicEnv) ValidateUpdate(old runtime.Object) error {
62+
func (de *DynamicEnv) ValidateUpdate(old runtime.Object) (admission.Warnings, error) {
6263
dynamicenvlog.Info("validate update", "name", de.Name)
6364

6465
if err := de.validateIstioMatchImmutable(old); err != nil {
65-
return err
66+
return nil, err
6667
}
6768
if err := de.validateSubsetsProperties(); err != nil {
68-
return err
69+
return nil, err
6970
}
70-
return de.validatePartialUpdateSubsets(old)
71+
return nil, de.validatePartialUpdateSubsets(old)
7172
}
7273

7374
// ValidateDelete implements webhook.Validator so a webhook will be registered for the type
74-
func (de *DynamicEnv) ValidateDelete() error {
75+
func (de *DynamicEnv) ValidateDelete() (admission.Warnings, error) {
7576
dynamicenvlog.Info("validate delete", "name", de.Name)
7677

77-
return nil
78+
return nil, nil
7879
}
7980

8081
// validateStringMatchOneOf must validate one and only one schema (oneOf) of StringMatch is defined

api/v1alpha1/dynamicenv_webhook_test.go

+12-12
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ var _ = Describe("Validating Webhook", func() {
8585

8686
It("Does not allow to update matchers", func() {
8787
old := runtime.Object(&base)
88-
err := updated.ValidateUpdate(old)
88+
_, err := updated.ValidateUpdate(old)
8989
Expect(err).To(HaveOccurred())
9090
Expect(err.Error()).To(ContainSubstring("field is immutable"))
9191
})
@@ -148,7 +148,7 @@ var _ = Describe("Validating Webhook", func() {
148148

149149
for ind, item := range testCases {
150150
By(fmt.Sprintf("multi stringMatch %d", ind))
151-
err := item.ValidateCreate()
151+
_, err := item.ValidateCreate()
152152
Expect(err).To(HaveOccurred())
153153
Expect(err.Error()).To(ContainSubstring("oneOf"))
154154
}
@@ -163,7 +163,7 @@ var _ = Describe("Validating Webhook", func() {
163163
},
164164
Spec: DynamicEnvSpec{},
165165
}
166-
err := noMatchDe.ValidateCreate()
166+
_, err := noMatchDe.ValidateCreate()
167167
Expect(err).To(HaveOccurred())
168168
Expect(err.Error()).To(ContainSubstring("empty IstioMatch"))
169169
})
@@ -192,7 +192,7 @@ var _ = Describe("Validating Webhook", func() {
192192
},
193193
}
194194

195-
err := de.ValidateCreate()
195+
_, err := de.ValidateCreate()
196196
Expect(err).To(BeNil())
197197
})
198198

@@ -263,9 +263,9 @@ var _ = Describe("Validating Webhook", func() {
263263
},
264264
}
265265

266-
err1 := de1.ValidateCreate()
266+
_, err1 := de1.ValidateCreate()
267267
Expect(err1).To(BeNil(), "Should accept number of replicas in subsets")
268-
err2 := de2.ValidateCreate()
268+
_, err2 := de2.ValidateCreate()
269269
Expect(err2).To(BeNil(), "Should accept number of replicas in consumers")
270270
})
271271

@@ -274,7 +274,7 @@ var _ = Describe("Validating Webhook", func() {
274274
if err != nil {
275275
Fail(err.Error())
276276
}
277-
resultError := de.ValidateCreate()
277+
_, resultError := de.ValidateCreate()
278278
Expect(resultError).To(HaveOccurred())
279279
Expect(resultError.Error()).To(ContainSubstring("At least a single container or init-container"))
280280
})
@@ -284,14 +284,14 @@ var _ = Describe("Validating Webhook", func() {
284284
if err != nil {
285285
Fail(err.Error())
286286
}
287-
resultError := de.ValidateCreate()
287+
_, resultError := de.ValidateCreate()
288288
Expect(resultError).To(HaveOccurred())
289289
Expect(resultError.Error()).To(ContainSubstring("names are unique"))
290290
})
291291

292292
DescribeTable("Create rejects invalid subset properties",
293293
func(de *DynamicEnv, errMsg string) {
294-
err := de.ValidateCreate()
294+
_, err := de.ValidateCreate()
295295
Expect(err).To(Not(BeNil()))
296296
Expect(err.Error()).To(ContainSubstring(errMsg))
297297
},
@@ -517,7 +517,7 @@ var _ = Describe("Validating Webhook", func() {
517517
},
518518
}
519519

520-
err := de.ValidateCreate()
520+
_, err := de.ValidateCreate()
521521
Expect(err).To(HaveOccurred())
522522
Expect(err.Error()).To(ContainSubstring("Invalid value"))
523523
},
@@ -548,7 +548,7 @@ var _ = Describe("Validating Webhook", func() {
548548
if err != nil {
549549
Fail("Error decoding currentData")
550550
}
551-
errorResult := current.ValidateUpdate(runtime.Object(&old))
551+
_, errorResult := current.ValidateUpdate(runtime.Object(&old))
552552
Expect(errorResult).To(BeNil())
553553
},
554554
Entry(
@@ -579,7 +579,7 @@ var _ = Describe("Validating Webhook", func() {
579579
if err != nil {
580580
Fail("Error decoding currentData")
581581
}
582-
errorResult := current.ValidateUpdate(runtime.Object(&old))
582+
_, errorResult := current.ValidateUpdate(runtime.Object(&old))
583583
Expect(errorResult).To(HaveOccurred())
584584
Expect(errorResult.Error()).To(ContainSubstring(partialError))
585585
},

api/v1alpha1/webhook_suite_test.go

+17-9
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,18 @@ import (
2323
"k8s.io/client-go/rest"
2424
"net"
2525
"path/filepath"
26+
"sigs.k8s.io/controller-runtime/pkg/metrics/server"
27+
"sigs.k8s.io/controller-runtime/pkg/webhook"
2628
"testing"
2729
"time"
2830

2931
. "github.com/onsi/ginkgo/v2"
3032
. "github.com/onsi/gomega"
3133

32-
admissionv1beta1 "k8s.io/api/admission/v1beta1"
34+
admissionv1 "k8s.io/api/admission/v1"
3335
//+kubebuilder:scaffold:imports
3436
"k8s.io/apimachinery/pkg/runtime"
37+
_ "k8s.io/client-go/plugin/pkg/client/auth/oidc"
3538
ctrl "sigs.k8s.io/controller-runtime"
3639
"sigs.k8s.io/controller-runtime/pkg/client"
3740
"sigs.k8s.io/controller-runtime/pkg/envtest"
@@ -58,7 +61,6 @@ var _ = BeforeSuite(func() {
5861
logf.SetLogger(zap.New(zap.WriteTo(GinkgoWriter), zap.UseDevMode(true)))
5962

6063
ctx, cancel = context.WithCancel(context.TODO())
61-
6264
By("bootstrapping test environment")
6365
testEnv = &envtest.Environment{
6466
CRDDirectoryPaths: []string{filepath.Join("..", "..", "config", "crd", "bases")},
@@ -77,7 +79,7 @@ var _ = BeforeSuite(func() {
7779
err = AddToScheme(scheme)
7880
Expect(err).NotTo(HaveOccurred())
7981

80-
err = admissionv1beta1.AddToScheme(scheme)
82+
err = admissionv1.AddToScheme(scheme)
8183
Expect(err).NotTo(HaveOccurred())
8284

8385
//+kubebuilder:scaffold:scheme
@@ -88,14 +90,20 @@ var _ = BeforeSuite(func() {
8890

8991
// start webhook server using Manager
9092
webhookInstallOptions := &testEnv.WebhookInstallOptions
93+
9194
mgr, err := ctrl.NewManager(cfg, ctrl.Options{
92-
Scheme: scheme,
93-
Host: webhookInstallOptions.LocalServingHost,
94-
Port: webhookInstallOptions.LocalServingPort,
95-
CertDir: webhookInstallOptions.LocalServingCertDir,
96-
LeaderElection: false,
97-
MetricsBindAddress: "0",
95+
Scheme: scheme,
96+
WebhookServer: webhook.NewServer(webhook.Options{
97+
Host: webhookInstallOptions.LocalServingHost,
98+
Port: webhookInstallOptions.LocalServingPort,
99+
CertDir: webhookInstallOptions.LocalServingCertDir,
100+
}),
101+
LeaderElection: false,
102+
Metrics: server.Options{
103+
BindAddress: "0",
104+
},
98105
})
106+
99107
Expect(err).NotTo(HaveOccurred())
100108

101109
err = (&DynamicEnv{}).SetupWebhookWithManager(mgr)

main.go renamed to cmd/main.go

+12-5
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,12 @@ package main
1919
import (
2020
"flag"
2121
"fmt"
22+
"github.com/riskified/dynamic-environment/internal/controller"
2223
"github.com/riskified/dynamic-environment/pkg/metrics"
2324
"github.com/riskified/dynamic-environment/pkg/names"
2425
"os"
26+
"sigs.k8s.io/controller-runtime/pkg/metrics/server"
27+
"sigs.k8s.io/controller-runtime/pkg/webhook"
2528
"strings"
2629

2730
// Import all Kubernetes client auth plugins (e.g. Azure, GCP, OIDC, etc.)
@@ -37,7 +40,6 @@ import (
3740
"sigs.k8s.io/controller-runtime/pkg/log/zap"
3841

3942
riskifiedv1alpha1 "github.com/riskified/dynamic-environment/api/v1alpha1"
40-
"github.com/riskified/dynamic-environment/controllers"
4143
// "istio.io/client-go/pkg/apis/networking/v1alpha3"
4244
//+kubebuilder:scaffold:imports
4345
)
@@ -105,19 +107,24 @@ func main() {
105107
ctrl.SetLogger(zap.New(zap.UseFlagOptions(&opts)))
106108

107109
mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{
108-
Scheme: scheme,
109-
MetricsBindAddress: metricsAddr,
110-
Port: 9443,
110+
Scheme: scheme,
111+
Metrics: server.Options{
112+
BindAddress: metricsAddr,
113+
},
114+
WebhookServer: webhook.NewServer(webhook.Options{
115+
Port: 9443,
116+
}),
111117
HealthProbeBindAddress: probeAddr,
112118
LeaderElection: enableLeaderElection,
113119
LeaderElectionID: "dynamic-environment-lock",
114120
})
121+
115122
if err != nil {
116123
setupLog.Error(err, "unable to start manager")
117124
os.Exit(1)
118125
}
119126

120-
if err = (&controllers.DynamicEnvReconciler{
127+
if err = (&controller.DynamicEnvReconciler{
121128
Client: mgr.GetClient(),
122129
Scheme: mgr.GetScheme(),
123130
VersionLabel: versionLabel,

0 commit comments

Comments
 (0)