@@ -37,7 +37,6 @@ import (
3737 "k8s.io/apimachinery/pkg/util/strategicpatch"
3838 "k8s.io/apimachinery/pkg/util/wait"
3939 "k8s.io/cli-runtime/pkg/resource"
40- "k8s.io/kube-openapi/pkg/util/proto"
4140 cmdutil "k8s.io/kubectl/pkg/cmd/util"
4241 "k8s.io/kubectl/pkg/scheme"
4342 "k8s.io/kubectl/pkg/util"
@@ -123,12 +122,10 @@ func (p *Patcher) patchSimple(obj runtime.Object, modified []byte, namespace, na
123122 // if openapischema is used, we'll try to get required patch type for this GVK from Open API.
124123 // if it fails or could not find any patch type, fall back to baked-in patch type determination.
125124 if patchType , err = p .getPatchTypeFromOpenAPI (p .Mapping .GroupVersionKind ); err == nil && patchType == types .StrategicMergePatchType {
126- if s := p .findOpenAPIResource (p .Mapping .GroupVersionKind ); s != nil {
127- patch , err = p .buildStrategicMergeFromOpenAPI (s , original , modified , current )
128- if err != nil {
129- // Warn user about problem and continue strategic merge patching using builtin types.
130- fmt .Fprintf (errOut , "warning: error calculating patch from openapi spec: %v\n " , err )
131- }
125+ patch , err = p .buildStrategicMergeFromOpenAPI (original , modified , current )
126+ if err != nil {
127+ // Warn user about problem and continue strategic merge patching using builtin types.
128+ fmt .Fprintf (errOut , "warning: error calculating patch from openapi spec: %v\n " , err )
132129 }
133130 }
134131 }
@@ -187,7 +184,12 @@ func (p *Patcher) buildMergePatch(original, modified, current []byte) ([]byte, e
187184
188185// buildStrategicMergeFromOpenAPI builds patch from OpenAPI if it is enabled.
189186// This is used for core types which is published in openapi.
190- func (p * Patcher ) buildStrategicMergeFromOpenAPI (schema proto.Schema , original , modified , current []byte ) ([]byte , error ) {
187+ func (p * Patcher ) buildStrategicMergeFromOpenAPI (original , modified , current []byte ) ([]byte , error ) {
188+ schema := p .OpenapiSchema .LookupResource (p .Mapping .GroupVersionKind )
189+ if schema == nil {
190+ // Missing schema returns nil patch; also no error.
191+ return nil , nil
192+ }
191193 lookupPatchMeta := strategicpatch.PatchMetaFromOpenAPI {Schema : schema }
192194 if openapiPatch , err := strategicpatch .CreateThreeWayMergePatch (original , modified , current , lookupPatchMeta , p .Overwrite ); err != nil {
193195 return nil , err
@@ -196,14 +198,6 @@ func (p *Patcher) buildStrategicMergeFromOpenAPI(schema proto.Schema, original,
196198 }
197199}
198200
199- // findOpenAPIResource finds schema of GVK in OpenAPI endpoint.
200- func (p * Patcher ) findOpenAPIResource (gvk schema.GroupVersionKind ) proto.Schema {
201- if p .OpenapiSchema == nil {
202- return nil
203- }
204- return p .OpenapiSchema .LookupResource (gvk )
205- }
206-
207201// getPatchTypeFromOpenAPI looks up patch types supported by given GroupVersionKind in Open API.
208202func (p * Patcher ) getPatchTypeFromOpenAPI (gvk schema.GroupVersionKind ) (types.PatchType , error ) {
209203 if pc := p .OpenapiSchema .GetConsumes (p .Mapping .GroupVersionKind , "PATCH" ); pc != nil {
0 commit comments