diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/BUILD b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/BUILD index 8f0fe68bcb4..2fe6dbeb8f1 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/BUILD +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/BUILD @@ -23,6 +23,7 @@ go_library( "//vendor/k8s.io/kube-openapi/pkg/util/proto:go_default_library", "//vendor/sigs.k8s.io/structured-merge-diff/fieldpath:go_default_library", "//vendor/sigs.k8s.io/structured-merge-diff/merge:go_default_library", + "//vendor/sigs.k8s.io/structured-merge-diff/schema:go_default_library", "//vendor/sigs.k8s.io/structured-merge-diff/typed:go_default_library", "//vendor/sigs.k8s.io/structured-merge-diff/value:go_default_library", "//vendor/sigs.k8s.io/yaml:go_default_library", diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/gvkparser.go b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/gvkparser.go index 14d90f964f1..704097329f4 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/gvkparser.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/gvkparser.go @@ -22,6 +22,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/kube-openapi/pkg/schemaconv" "k8s.io/kube-openapi/pkg/util/proto" + smdschema "sigs.k8s.io/structured-merge-diff/schema" "sigs.k8s.io/structured-merge-diff/typed" ) @@ -48,6 +49,7 @@ func newGVKParser(models proto.Models) (*gvkParser, error) { if err != nil { return nil, fmt.Errorf("failed to convert models to schema: %v", err) } + typeSchema = makeRawExtensionUntyped(typeSchema) parser := gvkParser{ gvks: map[schema.GroupVersionKind]string{}, } @@ -114,3 +116,20 @@ func parseGroupVersionKind(s proto.Schema) []schema.GroupVersionKind { return gvkListResult } + +// makeRawExtensionUntyped explicitly sets RawExtension's type in the schema to Untyped atomic +// TODO: remove this once kube-openapi is updated to include +// https://github.com/kubernetes/kube-openapi/pull/133 +func makeRawExtensionUntyped(s *smdschema.Schema) *smdschema.Schema { + s2 := &smdschema.Schema{} + for _, t := range s.Types { + t2 := t + if t2.Name == "io.k8s.apimachinery.pkg.runtime.RawExtension" { + t2.Atom = smdschema.Atom{ + Untyped: &smdschema.Untyped{}, + } + } + s2.Types = append(s2.Types, t2) + } + return s2 +}