mirror of https://github.com/k3s-io/k3s
Fix thirdparty codec to return GVK
parent
63a512fe47
commit
d1aa3dd0b4
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue