Skip to content

Commit d20babd

Browse files
committed
🌱 Deprecate the scheme builder
Controller-Runtime should never be imported into api packages and the scheme builder is only useful in those, so deprecate it.
1 parent e4c1c38 commit d20babd

13 files changed

Lines changed: 144 additions & 120 deletions

File tree

alias.go

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,34 @@ type Manager = manager.Manager
4949
type Options = manager.Options
5050

5151
// SchemeBuilder builds a new Scheme for mapping go types to Kubernetes GroupVersionKinds.
52-
type SchemeBuilder = scheme.Builder
52+
//
53+
// Deprecated: Controller-Runtime should not be imported in api packages and this
54+
// helper is only useful within api packages. Use the apimachinery builder instead:
55+
//
56+
// import (
57+
// metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
58+
// "k8s.io/apimachinery/pkg/runtime"
59+
// "k8s.io/apimachinery/pkg/runtime/schema"
60+
// )
61+
//
62+
// const GroupName = ""
63+
//
64+
// var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"}
65+
//
66+
// var (
67+
// SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes)
68+
// AddToScheme = SchemeBuilder.AddToScheme
69+
// )
70+
//
71+
// func addKnownTypes(scheme *runtime.Scheme) error {
72+
// scheme.AddKnownTypes(SchemeGroupVersion,
73+
// &Pod{},
74+
// )
75+
//
76+
// metav1.AddToGroupVersion(scheme, SchemeGroupVersion)
77+
// return nil
78+
// }
79+
type SchemeBuilder = scheme.Builder //nolint:staticcheck // this is the deprecation alias
5380

5481
// GroupVersion contains the "group" and the "version", which uniquely identifies the API.
5582
type GroupVersion = schema.GroupVersion

examples/crd/pkg/groupversion_info.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,27 @@ limitations under the License.
2020
package pkg
2121

2222
import (
23+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
24+
"k8s.io/apimachinery/pkg/runtime"
2325
"k8s.io/apimachinery/pkg/runtime/schema"
24-
"sigs.k8s.io/controller-runtime/pkg/scheme"
2526
)
2627

2728
var (
2829
// SchemeGroupVersion is group version used to register these objects
2930
SchemeGroupVersion = schema.GroupVersion{Group: "chaosapps.metamagical.io", Version: "v1"}
3031

3132
// SchemeBuilder is used to add go types to the GroupVersionKind scheme
32-
SchemeBuilder = &scheme.Builder{GroupVersion: SchemeGroupVersion}
33+
SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes)
3334

3435
// AddToScheme is required by pkg/client/...
3536
AddToScheme = SchemeBuilder.AddToScheme
3637
)
38+
39+
func addKnownTypes(scheme *runtime.Scheme) error {
40+
scheme.AddKnownTypes(SchemeGroupVersion,
41+
&ChaosPod{},
42+
&ChaosPodList{},
43+
)
44+
metav1.AddToGroupVersion(scheme, SchemeGroupVersion)
45+
return nil
46+
}

examples/crd/pkg/resource.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,3 @@ type ChaosPodList struct {
5555
metav1.ListMeta `json:"metadata,omitempty"`
5656
Items []ChaosPod `json:"items"`
5757
}
58-
59-
func init() {
60-
SchemeBuilder.Register(&ChaosPod{}, &ChaosPodList{})
61-
}

pkg/builder/controller_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ import (
4444
"sigs.k8s.io/controller-runtime/pkg/manager"
4545
"sigs.k8s.io/controller-runtime/pkg/predicate"
4646
"sigs.k8s.io/controller-runtime/pkg/reconcile"
47-
"sigs.k8s.io/controller-runtime/pkg/scheme"
4847
"sigs.k8s.io/controller-runtime/pkg/source"
4948
)
5049

@@ -377,10 +376,11 @@ var _ = Describe("application", func() {
377376
Expect(err).NotTo(HaveOccurred())
378377

379378
By("registering the type in the Scheme")
380-
builder := scheme.Builder{GroupVersion: testDefaultValidatorGVK.GroupVersion()}
381-
builder.Register(&TestDefaultValidator{}, &TestDefaultValidatorList{})
382-
err = builder.AddToScheme(m.GetScheme())
383-
Expect(err).NotTo(HaveOccurred())
379+
m.GetScheme().AddKnownTypes(testDefaultValidatorGVK.GroupVersion(),
380+
&TestDefaultValidator{},
381+
&TestDefaultValidatorList{},
382+
)
383+
metav1.AddToGroupVersion(m.GetScheme(), testDefaultValidatorGVK.GroupVersion())
384384

385385
By("creating the 1st controller")
386386
ctrl1, err := ControllerManagedBy(m).

pkg/builder/webhook_test.go

Lines changed: 22 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ import (
3737
logf "sigs.k8s.io/controller-runtime/pkg/log"
3838
"sigs.k8s.io/controller-runtime/pkg/log/zap"
3939
"sigs.k8s.io/controller-runtime/pkg/manager"
40-
"sigs.k8s.io/controller-runtime/pkg/scheme"
4140
"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
4241
)
4342

@@ -92,10 +91,7 @@ func runTests(admissionReviewVersion string) {
9291
ExpectWithOffset(1, err).NotTo(HaveOccurred())
9392

9493
By("registering the type in the Scheme")
95-
builder := scheme.Builder{GroupVersion: testDefaulterGVK.GroupVersion()}
96-
builder.Register(&TestDefaulterObject{}, &TestDefaulterList{})
97-
err = builder.AddToScheme(m.GetScheme())
98-
ExpectWithOffset(1, err).NotTo(HaveOccurred())
94+
addToScheme(m.GetScheme())
9995

10096
webhookBuilder := WebhookManagedBy(m, &TestDefaulterObject{})
10197
build(webhookBuilder)
@@ -176,10 +172,7 @@ func runTests(admissionReviewVersion string) {
176172
ExpectWithOffset(1, err).NotTo(HaveOccurred())
177173

178174
By("registering the type in the Scheme")
179-
builder := scheme.Builder{GroupVersion: testDefaulterGVK.GroupVersion()}
180-
builder.Register(&TestDefaulterObject{}, &TestDefaulterList{})
181-
err = builder.AddToScheme(m.GetScheme())
182-
ExpectWithOffset(1, err).NotTo(HaveOccurred())
175+
addToScheme(m.GetScheme())
183176

184177
customPath := "/custom-defaulting-path"
185178
webhookBuilder := WebhookManagedBy(m, &TestDefaulterObject{})
@@ -263,10 +256,7 @@ func runTests(admissionReviewVersion string) {
263256
ExpectWithOffset(1, err).NotTo(HaveOccurred())
264257

265258
By("registering the type in the Scheme")
266-
builder := scheme.Builder{GroupVersion: testDefaulterGVK.GroupVersion()}
267-
builder.Register(&TestDefaulterObject{}, &TestDefaulterList{})
268-
err = builder.AddToScheme(m.GetScheme())
269-
ExpectWithOffset(1, err).NotTo(HaveOccurred())
259+
addToScheme(m.GetScheme())
270260

271261
webhookBuilder := WebhookManagedBy(m, &TestDefaulterObject{})
272262
build(webhookBuilder)
@@ -334,10 +324,7 @@ func runTests(admissionReviewVersion string) {
334324
ExpectWithOffset(1, err).NotTo(HaveOccurred())
335325

336326
By("registering the type in the Scheme")
337-
builder := scheme.Builder{GroupVersion: testValidatorGVK.GroupVersion()}
338-
builder.Register(&TestValidatorObject{}, &TestValidatorList{})
339-
err = builder.AddToScheme(m.GetScheme())
340-
ExpectWithOffset(1, err).NotTo(HaveOccurred())
327+
addToScheme(m.GetScheme())
341328

342329
webhook := WebhookManagedBy(m, &TestValidatorObject{})
343330
build(webhook)
@@ -459,10 +446,7 @@ func runTests(admissionReviewVersion string) {
459446
ExpectWithOffset(1, err).NotTo(HaveOccurred())
460447

461448
By("registering the type in the Scheme")
462-
builder := scheme.Builder{GroupVersion: testValidatorGVK.GroupVersion()}
463-
builder.Register(&TestValidatorObject{}, &TestValidatorList{})
464-
err = builder.AddToScheme(m.GetScheme())
465-
ExpectWithOffset(1, err).NotTo(HaveOccurred())
449+
addToScheme(m.GetScheme())
466450

467451
customPath := "/custom-validating-path"
468452
webhookBuilder := WebhookManagedBy(m, &TestValidatorObject{})
@@ -546,10 +530,7 @@ func runTests(admissionReviewVersion string) {
546530
ExpectWithOffset(1, err).NotTo(HaveOccurred())
547531

548532
By("registering the type in the Scheme")
549-
builder := scheme.Builder{GroupVersion: testValidatorGVK.GroupVersion()}
550-
builder.Register(&TestValidatorObject{}, &TestValidatorList{})
551-
err = builder.AddToScheme(m.GetScheme())
552-
ExpectWithOffset(1, err).NotTo(HaveOccurred())
533+
addToScheme(m.GetScheme())
553534

554535
webhookBuilder := WebhookManagedBy(m, &TestValidatorObject{})
555536
build(webhookBuilder)
@@ -619,10 +600,7 @@ func runTests(admissionReviewVersion string) {
619600
ExpectWithOffset(1, err).NotTo(HaveOccurred())
620601

621602
By("registering the type in the Scheme")
622-
builder := scheme.Builder{GroupVersion: testValidatorGVK.GroupVersion()}
623-
builder.Register(&TestValidatorObject{}, &TestValidatorList{})
624-
err = builder.AddToScheme(m.GetScheme())
625-
ExpectWithOffset(1, err).NotTo(HaveOccurred())
603+
addToScheme(m.GetScheme())
626604

627605
webhookBuilder := WebhookManagedBy(m, &TestValidatorObject{})
628606
build(webhookBuilder)
@@ -717,10 +695,7 @@ func runTests(admissionReviewVersion string) {
717695
ExpectWithOffset(1, err).NotTo(HaveOccurred())
718696

719697
By("registering the type in the Scheme")
720-
builder := scheme.Builder{GroupVersion: testValidatorGVK.GroupVersion()}
721-
builder.Register(&TestDefaultValidator{}, &TestDefaultValidatorList{})
722-
err = builder.AddToScheme(m.GetScheme())
723-
ExpectWithOffset(1, err).NotTo(HaveOccurred())
698+
addToScheme(m.GetScheme())
724699

725700
webhookBuilder := WebhookManagedBy(m, &TestDefaultValidator{})
726701
build(webhookBuilder)
@@ -817,10 +792,7 @@ func runTests(admissionReviewVersion string) {
817792
ExpectWithOffset(1, err).NotTo(HaveOccurred())
818793

819794
By("registering the type in the Scheme")
820-
builder := scheme.Builder{GroupVersion: testValidatorGVK.GroupVersion()}
821-
builder.Register(&TestDefaultValidator{}, &TestDefaultValidatorList{})
822-
err = builder.AddToScheme(m.GetScheme())
823-
ExpectWithOffset(1, err).NotTo(HaveOccurred())
795+
addToScheme(m.GetScheme())
824796

825797
validatingCustomPath := "/custom-validating-path"
826798
defaultingCustomPath := "/custom-defaulting-path"
@@ -940,10 +912,7 @@ func runTests(admissionReviewVersion string) {
940912
ExpectWithOffset(1, err).NotTo(HaveOccurred())
941913

942914
By("registering the type in the Scheme")
943-
builder := scheme.Builder{GroupVersion: testValidatorGVK.GroupVersion()}
944-
builder.Register(&TestDefaultValidator{}, &TestDefaultValidatorList{})
945-
err = builder.AddToScheme(m.GetScheme())
946-
ExpectWithOffset(1, err).NotTo(HaveOccurred())
915+
addToScheme(m.GetScheme())
947916

948917
err = WebhookManagedBy(m, &TestDefaultValidator{}).
949918
WithCustomDefaulter(&TestCustomDefaultValidator{}).
@@ -963,10 +932,7 @@ func runTests(admissionReviewVersion string) {
963932
ExpectWithOffset(1, err).NotTo(HaveOccurred())
964933

965934
By("registering the type in the Scheme")
966-
builder := scheme.Builder{GroupVersion: testDefaulterGVK.GroupVersion()}
967-
builder.Register(&TestDefaulterObject{}, &TestDefaulterList{})
968-
err = builder.AddToScheme(m.GetScheme())
969-
ExpectWithOffset(1, err).NotTo(HaveOccurred())
935+
addToScheme(m.GetScheme())
970936

971937
webhookBuilder := WebhookManagedBy(m, &TestDefaulterObject{})
972938
build(webhookBuilder)
@@ -994,10 +960,7 @@ func runTests(admissionReviewVersion string) {
994960
ExpectWithOffset(1, err).NotTo(HaveOccurred())
995961

996962
By("registering the type in the Scheme")
997-
builder := scheme.Builder{GroupVersion: testValidatorGVK.GroupVersion()}
998-
builder.Register(&TestValidatorObject{}, &TestValidatorList{})
999-
err = builder.AddToScheme(m.GetScheme())
1000-
ExpectWithOffset(1, err).NotTo(HaveOccurred())
963+
addToScheme(m.GetScheme())
1001964

1002965
webhookBuilder := WebhookManagedBy(m, &TestValidatorObject{})
1003966
build(webhookBuilder)
@@ -1022,10 +985,7 @@ func runTests(admissionReviewVersion string) {
1022985
m, err := manager.New(cfg, manager.Options{})
1023986
ExpectWithOffset(1, err).NotTo(HaveOccurred())
1024987

1025-
builder := scheme.Builder{GroupVersion: testDefaulterGVK.GroupVersion()}
1026-
builder.Register(&TestDefaulterObject{}, &TestDefaulterList{})
1027-
err = builder.AddToScheme(m.GetScheme())
1028-
ExpectWithOffset(1, err).NotTo(HaveOccurred())
988+
addToScheme(m.GetScheme())
1029989

1030990
err = WebhookManagedBy(m, &TestDefaulterObject{}).
1031991
WithDefaulter(&testDefaulter{}).
@@ -1038,10 +998,7 @@ func runTests(admissionReviewVersion string) {
1038998
m, err := manager.New(cfg, manager.Options{})
1039999
ExpectWithOffset(1, err).NotTo(HaveOccurred())
10401000

1041-
builder := scheme.Builder{GroupVersion: testValidatorGVK.GroupVersion()}
1042-
builder.Register(&TestValidatorObject{}, &TestValidatorList{})
1043-
err = builder.AddToScheme(m.GetScheme())
1044-
ExpectWithOffset(1, err).NotTo(HaveOccurred())
1001+
addToScheme(m.GetScheme())
10451002

10461003
err = WebhookManagedBy(m, &TestValidatorObject{}).
10471004
WithValidator(&testValidator{}).
@@ -1064,6 +1021,14 @@ type TestDefaulterObject struct {
10641021

10651022
var testDefaulterGVK = schema.GroupVersionKind{Group: "foo.test.org", Version: "v1", Kind: testDefaulterKind}
10661023

1024+
func addToScheme(scheme *runtime.Scheme) {
1025+
scheme.AddKnownTypes(testDefaulterGVK.GroupVersion(),
1026+
&TestDefaulterObject{},
1027+
&TestDefaulterList{},
1028+
)
1029+
metav1.AddToGroupVersion(scheme, testDefaulterGVK.GroupVersion())
1030+
}
1031+
10671032
func (d *TestDefaulterObject) GetObjectKind() schema.ObjectKind { return d }
10681033
func (d *TestDefaulterObject) DeepCopyObject() runtime.Object {
10691034
return &TestDefaulterObject{

pkg/cache/informer_cache_unit_test.go

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ import (
2929

3030
"sigs.k8s.io/controller-runtime/pkg/cache/internal"
3131
"sigs.k8s.io/controller-runtime/pkg/controller/controllertest"
32-
crscheme "sigs.k8s.io/controller-runtime/pkg/scheme"
3332
)
3433

3534
const (
@@ -86,14 +85,9 @@ var _ = Describe("ip.objectTypeForListObject", func() {
8685
It("should find the object type of a list with a slice of pointers items field", func() {
8786
By("registering the type", func() {
8887
ip.scheme = runtime.NewScheme()
89-
err := (&crscheme.Builder{
90-
GroupVersion: schema.GroupVersion{Group: itemPointerSliceTypeGroupName, Version: itemPointerSliceTypeVersion},
91-
}).
92-
Register(
93-
&controllertest.UnconventionalListType{},
94-
&controllertest.UnconventionalListTypeList{},
95-
).AddToScheme(ip.scheme)
96-
Expect(err).ToNot(HaveOccurred())
88+
gv := schema.GroupVersion{Group: itemPointerSliceTypeGroupName, Version: itemPointerSliceTypeVersion}
89+
ip.scheme.AddKnownTypes(gv, &controllertest.UnconventionalListType{}, &controllertest.UnconventionalListTypeList{})
90+
metav1.AddToGroupVersion(ip.scheme, gv)
9791
})
9892

9993
By("calling objectTypeForListObject", func() {

0 commit comments

Comments
 (0)