@@ -22,6 +22,7 @@ import (
2222
2323 "github.com/getkin/kin-openapi/openapi3"
2424 apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
25+ "k8s.io/apimachinery/pkg/runtime"
2526 "sigs.k8s.io/controller-runtime/pkg/client"
2627 "sigs.k8s.io/yaml"
2728
@@ -33,6 +34,7 @@ import (
3334// translator implements Translator to translate from a given CRD to and from
3435// a given SDK version using the same upstream OpenAPI schema
3536type translator struct {
37+ scheme * runtime.Scheme
3638 majorVersion string
3739 mappingSchema * openapi3.SchemaRef
3840}
@@ -130,6 +132,11 @@ func (tr *translator) MajorVersion() string {
130132 return tr .majorVersion
131133}
132134
135+ // Scheme returns the Kubernetes scheme used to translate the CRD.
136+ func (tr * translator ) Scheme () * runtime.Scheme {
137+ return tr .scheme
138+ }
139+
133140// NewTranslator creates a translator for a particular CRD version. It is also
134141// locked into a particular API majorVersion.
135142//
@@ -143,7 +150,7 @@ func (tr *translator) MajorVersion() string {
143150// v20250312:
144151//
145152// In the above case crdVersion is "v1" and majorVersion is "v20250312".
146- func NewTranslator (crd * apiextensionsv1.CustomResourceDefinition , crdVersion string , majorVersion string ) (Translator , error ) {
153+ func NewTranslator (scheme * runtime. Scheme , crd * apiextensionsv1.CustomResourceDefinition , crdVersion string , majorVersion string ) (Translator , error ) {
147154 specVersion := crds .SelectVersion (& crd .Spec , crdVersion )
148155 if err := crds .AssertMajorVersion (specVersion , crd .Spec .Names .Kind , majorVersion ); err != nil {
149156 return nil , fmt .Errorf ("failed to assert major version %s in CRD: %w" , majorVersion , err )
@@ -161,6 +168,7 @@ func NewTranslator(crd *apiextensionsv1.CustomResourceDefinition, crdVersion str
161168 }
162169
163170 return & translator {
171+ scheme : scheme ,
164172 majorVersion : majorVersion ,
165173 mappingSchema : & openapi3.SchemaRef {Value : & mappingSchema },
166174 }, nil
@@ -216,7 +224,7 @@ func collapseReferences(tr Translator, req map[string]any, main client.Object, o
216224 if err != nil {
217225 return fmt .Errorf ("failed to extract mappings to collapse: %w" , err )
218226 }
219- return refs .CollapseAll (mappings , main , objs , req )
227+ return refs .CollapseAll (tr . Scheme (), mappings , main , objs , req )
220228}
221229
222230// expandReferences finds all API fields that must be referenced, and expand
@@ -227,7 +235,7 @@ func expandReferences(tr Translator, cr map[string]any, main client.Object, objs
227235 if err != nil {
228236 return nil , fmt .Errorf ("failed to extract mappings to expand: %w" , err )
229237 }
230- return refs .ExpandAll (mappings , main , objs , cr )
238+ return refs .ExpandAll (tr . Scheme (), mappings , main , objs , cr )
231239}
232240
233241func propertyValueOrNil (schema * openapi3.Schema , propertyName string ) * openapi3.Schema {
0 commit comments