diff --git a/docs/book/src/developer/providers/migrations/v1.5-to-v1.6.md b/docs/book/src/developer/providers/migrations/v1.5-to-v1.6.md index 983b303d9dad..e9437b858b5b 100644 --- a/docs/book/src/developer/providers/migrations/v1.5-to-v1.6.md +++ b/docs/book/src/developer/providers/migrations/v1.5-to-v1.6.md @@ -31,3 +31,45 @@ maintainers of providers and consumers of our Go API. ### Suggested changes for providers +- To enable clients to encode and decode your API, your types must be able to be registered within a [scheme](https://pkg.go.dev/k8s.io/apimachinery/pkg/runtime#Scheme). The default kubebuilder scheme builder introduces a dependency on controller-runtime to your API types. + + To mitigate it, Cluster API removed the reliance on controller-runtime scheme builder (see [#9045](https://github.com/kubernetes-sigs/cluster-api/pull/9045)) in order to reduce the number of dependancies being introcuded to its API types and make API types easily consumable by other projects. + + E.g. now CAPI uses the following schemebuilder pattern: + + ```diff + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + import "k8s.io/apimachinery/pkg/runtime" + - import "sigs.k8s.io/controller-runtime/pkg/scheme" + + var ( + // GroupVersion is group version used to register these objects. + .... + + + // schemeBuilder is used to add go types to the GroupVersionKind scheme. + + schemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + - // SchemeBuilder is used to add go types to the GroupVersionKind scheme. + - SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion} + + // AddToScheme adds the types in this group-version to the given scheme. + + AddToScheme = schemeBuilder.AddToScheme + - AddToScheme = SchemeBuilder.AddToScheme + + + objectTypes = []runtime.Object{} + ) + + + func addKnownTypes(scheme *runtime.Scheme) error { + + scheme.AddKnownTypes(GroupVersion, objectTypes...) + + metav1.AddToGroupVersion(scheme, GroupVersion) + + return nil + + } + ``` + + and type registration: + + ```diff + func init() { + + objectTypes = append(objectTypes, &Captain{}, &CaptainList{}) + - SchemeBuilder.Register(&Captain{}, &CaptainList{}) + } + ``` \ No newline at end of file