Fix thirdparty codec to return GVK

pull/6/head
Kris 2016-08-11 09:55:37 -07:00
parent 63a512fe47
commit d1aa3dd0b4
1 changed files with 19 additions and 16 deletions

View File

@ -269,35 +269,42 @@ func parseObject(data []byte) (map[string]interface{}, error) {
return mapObj, nil return mapObj, nil
} }
func (t *thirdPartyResourceDataDecoder) populate(data []byte) (runtime.Object, error) { func (t *thirdPartyResourceDataDecoder) populate(data []byte) (runtime.Object, *unversioned.GroupVersionKind, error) {
mapObj, err := parseObject(data) mapObj, err := parseObject(data)
if err != nil { if err != nil {
return nil, err return nil, nil, err
} }
return t.populateFromObject(mapObj, data) return t.populateFromObject(mapObj, data)
} }
func (t *thirdPartyResourceDataDecoder) populateFromObject(mapObj map[string]interface{}, data []byte) (runtime.Object, error) { func (t *thirdPartyResourceDataDecoder) populateFromObject(mapObj map[string]interface{}, data []byte) (runtime.Object, *unversioned.GroupVersionKind, error) {
typeMeta := unversioned.TypeMeta{} typeMeta := unversioned.TypeMeta{}
if err := json.Unmarshal(data, &typeMeta); err != nil { if err := json.Unmarshal(data, &typeMeta); err != nil {
return nil, err return nil, nil, err
} }
gv, err := unversioned.ParseGroupVersion(typeMeta.APIVersion)
if err != nil {
return nil, nil, err
}
gvk := gv.WithKind(typeMeta.Kind)
isList := strings.HasSuffix(typeMeta.Kind, "List") isList := strings.HasSuffix(typeMeta.Kind, "List")
switch { switch {
case !isList && (len(t.kind) == 0 || typeMeta.Kind == t.kind): case !isList && (len(t.kind) == 0 || typeMeta.Kind == t.kind):
result := &extensions.ThirdPartyResourceData{} result := &extensions.ThirdPartyResourceData{}
if err := t.populateResource(result, mapObj, data); err != nil { if err := t.populateResource(result, mapObj, data); err != nil {
return nil, err return nil, nil, err
} }
return result, nil return result, &gvk, nil
case isList && (len(t.kind) == 0 || typeMeta.Kind == t.kind+"List"): case isList && (len(t.kind) == 0 || typeMeta.Kind == t.kind+"List"):
list := &extensions.ThirdPartyResourceDataList{} list := &extensions.ThirdPartyResourceDataList{}
if err := t.populateListResource(list, mapObj); err != nil { if err := t.populateListResource(list, mapObj); err != nil {
return nil, err return nil, nil, err
} }
return list, nil return list, &gvk, nil
default: default:
return nil, fmt.Errorf("unexpected kind: %s, expected %s", typeMeta.Kind, t.kind) return nil, nil, fmt.Errorf("unexpected kind: %s, expected %s", typeMeta.Kind, t.kind)
} }
} }
@ -359,11 +366,7 @@ func (t *thirdPartyResourceDataDecoder) Decode(data []byte, gvk *unversioned.Gro
return t.delegate.Decode(data, gvk, into) return t.delegate.Decode(data, gvk, into)
} }
} }
obj, err := t.populate(data) return t.populate(data)
if err != nil {
return nil, nil, err
}
return obj, gvk, nil
} }
switch o := into.(type) { switch o := into.(type) {
case *extensions.ThirdPartyResourceData: case *extensions.ThirdPartyResourceData:
@ -377,14 +380,14 @@ func (t *thirdPartyResourceDataDecoder) Decode(data []byte, gvk *unversioned.Gro
return t.delegate.Decode(data, gvk, into) return t.delegate.Decode(data, gvk, into)
} }
} }
obj, err := t.populate(data) obj, outGVK, err := t.populate(data)
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
} }
o.Objects = []runtime.Object{ o.Objects = []runtime.Object{
obj, obj,
} }
return o, gvk, nil return o, outGVK, nil
default: default:
return t.delegate.Decode(data, gvk, into) return t.delegate.Decode(data, gvk, into)
} }