Use same logic to guess gvk of resource object

This commit is contained in:
Yang Le
2020-05-21 18:08:14 +08:00
parent 315e8a683f
commit af80dfbc19
2 changed files with 13 additions and 28 deletions

View File

@@ -411,48 +411,28 @@ func buildManifestResourceMeta(index int, object runtime.Object, restMapper *res
Ordinal: int32(index),
}
if object == nil {
if object == nil || reflect.ValueOf(object).IsNil() {
return resourceMeta, err
}
var gvk schema.GroupVersionKind
var namespace, name string
switch objectType := object.(type) {
case *unstructured.Unstructured:
if objectType == nil {
return resourceMeta, err
}
gvk = objectType.GroupVersionKind()
namespace = objectType.GetNamespace()
name = objectType.GetName()
default:
if reflect.ValueOf(objectType).IsNil() {
return resourceMeta, err
}
gvk = resourcehelper.GuessObjectGroupVersionKind(objectType)
if accessor, e := meta.Accessor(objectType); err != nil {
err = fmt.Errorf("cannot access metadata of %v: %w", objectType, e)
} else {
namespace = accessor.GetNamespace()
name = accessor.GetName()
}
}
// set gvk
gvk := resourcehelper.GuessObjectGroupVersionKind(object)
resourceMeta.Group = gvk.Group
resourceMeta.Version = gvk.Version
resourceMeta.Kind = gvk.Kind
// set namespace/name
resourceMeta.Namespace = namespace
resourceMeta.Name = name
if accessor, e := meta.Accessor(object); e != nil {
err = fmt.Errorf("cannot access metadata of %v: %w", object, e)
} else {
resourceMeta.Namespace = accessor.GetNamespace()
resourceMeta.Name = accessor.GetName()
}
// set resource
if restMapper == nil {
return resourceMeta, err
}
if mapping, e := restMapper.MappingForGVK(gvk); e == nil {
resourceMeta.Resource = mapping.Resource.Resource
}

View File

@@ -731,6 +731,11 @@ func TestBuildManifestResourceMeta(t *testing.T) {
object: u,
expected: workapiv1.ManifestResourceMeta{},
},
{
name: "build meta with nil",
object: nil,
expected: workapiv1.ManifestResourceMeta{},
},
}
for _, c := range cases {