Merge pull request #77522 from jennybuckley/remove-version

Handle conversion errors from ObjectToTyped correctly

Kubernetes-commit: 8765fa2e48974e005ad16e65cb5c3acf5acff17b
This commit is contained in:
Kubernetes Publisher 2019-05-07 17:53:17 -07:00
commit fd6533a7ae
5 changed files with 28 additions and 7 deletions

2
Godeps/Godeps.json generated
View File

@ -396,7 +396,7 @@
},
{
"ImportPath": "k8s.io/apimachinery",
"Rev": "c4317b9d6635"
"Rev": "a0a96b929495"
},
{
"ImportPath": "k8s.io/client-go",

4
go.mod
View File

@ -59,7 +59,7 @@ require (
gopkg.in/yaml.v2 v2.2.1
gotest.tools v2.2.0+incompatible // indirect
k8s.io/api v0.0.0-20190503110853-61630f889b3c
k8s.io/apimachinery v0.0.0-20190506225340-c4317b9d6635
k8s.io/apimachinery v0.0.0-20190507223446-a0a96b929495
k8s.io/client-go v0.0.0-20190425172711-65184652c889
k8s.io/component-base v0.0.0-20190424053038-9fe063da3132
k8s.io/klog v0.3.0
@ -75,7 +75,7 @@ replace (
golang.org/x/sys => golang.org/x/sys v0.0.0-20190209173611-3b5209105503
golang.org/x/tools => golang.org/x/tools v0.0.0-20190313210603-aa82965741a9
k8s.io/api => k8s.io/api v0.0.0-20190503110853-61630f889b3c
k8s.io/apimachinery => k8s.io/apimachinery v0.0.0-20190506225340-c4317b9d6635
k8s.io/apimachinery => k8s.io/apimachinery v0.0.0-20190507223446-a0a96b929495
k8s.io/client-go => k8s.io/client-go v0.0.0-20190425172711-65184652c889
k8s.io/component-base => k8s.io/component-base v0.0.0-20190424053038-9fe063da3132
)

2
go.sum
View File

@ -192,7 +192,7 @@ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
k8s.io/api v0.0.0-20190503110853-61630f889b3c/go.mod h1:42M1T54fVvXj2R/yqB+v9ksH4xI41q6XU/NUlo3hyjk=
k8s.io/apimachinery v0.0.0-20190506225340-c4317b9d6635/go.mod h1:5CBnzrKYGHzv9ZsSKmQ8wHt4XI4/TUBPDwYM9FlZMyw=
k8s.io/apimachinery v0.0.0-20190507223446-a0a96b929495/go.mod h1:5CBnzrKYGHzv9ZsSKmQ8wHt4XI4/TUBPDwYM9FlZMyw=
k8s.io/client-go v0.0.0-20190425172711-65184652c889/go.mod h1:PeVFCnjeDy6EwLN+wdDIZd1DwDY6jnkpQt9psMo5YRU=
k8s.io/component-base v0.0.0-20190424053038-9fe063da3132/go.mod h1:pi2NQz+AaW5UMjaswai1Hfzqzhh7bV6ssi3X3k4s03g=
k8s.io/klog v0.3.0 h1:0VPpR+sizsiivjIfIAQH/rl8tan6jvWkS7lU+0di3lE=

View File

@ -21,6 +21,7 @@ import (
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/kube-openapi/pkg/util/proto"
"sigs.k8s.io/structured-merge-diff/typed"
"sigs.k8s.io/structured-merge-diff/value"
@ -93,7 +94,7 @@ func (c *typeConverter) ObjectToTyped(obj runtime.Object) (typed.TypedValue, err
gvk := obj.GetObjectKind().GroupVersionKind()
t := c.parser.Type(gvk)
if t == nil {
return nil, fmt.Errorf("no corresponding type for %v", gvk)
return nil, newNoCorrespondingTypeError(gvk)
}
return t.FromUnstructured(u)
}
@ -108,7 +109,7 @@ func (c *typeConverter) YAMLToTyped(from []byte) (typed.TypedValue, error) {
gvk := unstructured.GetObjectKind().GroupVersionKind()
t := c.parser.Type(gvk)
if t == nil {
return nil, fmt.Errorf("no corresponding type for %v", gvk)
return nil, newNoCorrespondingTypeError(gvk)
}
return t.FromYAML(typed.YAMLObject(string(from)))
}
@ -125,3 +126,23 @@ func valueToObject(value *value.Value) (runtime.Object, error) {
}
return &unstructured.Unstructured{Object: u}, nil
}
type noCorrespondingTypeErr struct {
gvk schema.GroupVersionKind
}
func newNoCorrespondingTypeError(gvk schema.GroupVersionKind) error {
return &noCorrespondingTypeErr{gvk: gvk}
}
func (k *noCorrespondingTypeErr) Error() string {
return fmt.Sprintf("no corresponding type for %v", k.gvk)
}
func isNoCorrespondingTypeError(err error) bool {
if err == nil {
return false
}
_, ok := err.(*noCorrespondingTypeErr)
return ok
}

View File

@ -97,5 +97,5 @@ func (v *versionConverter) Convert(object typed.TypedValue, version fieldpath.AP
// IsMissingVersionError
func (v *versionConverter) IsMissingVersionError(err error) bool {
return runtime.IsNotRegisteredError(err)
return runtime.IsNotRegisteredError(err) || isNoCorrespondingTypeError(err)
}