当前位置:  开发笔记 > 编程语言 > 正文

无论类型如何,反序列化ObjectMeta

如何解决《无论类型如何,反序列化ObjectMeta》经验,为你挑选了0个好方法。

TL; DR:如何在不事先metav1.ObjectMeta知道k8s API对象的情况下灵活地对其进行解码并检查其顶层结构Kind


我正在编写一个准入控制器端点,该端点根据字段将metav1.AdmissionReview对象的Request.Object.Raw字段解组为具体的对象Request.Kind-例如

if kind == "Pod" {
    var pod core.Pod
    // ...
    if _, _, err := deserializer.Decode(admissionReview.Request.Object.Raw, nil, &pod); err != nil {
        return nil, err
    }

    annotations := pod.ObjectMeta.Annotations
    // inspect/validate the annotations...

这需要map[kind]corev1.Object预先知道所有可能的类型,或者要求用户提供我们可以使用的更灵活的类型。

我想实现的目标更接近:

var objMeta core.ObjectMeta
if _, _, err := deserializer.Decode(admissionReview.Request.Object.Raw, nil, &objMeta); err != nil {
        return nil, err
}

// if objMeta is populated, validate the fields, else
// assume it is an object that does not define an ObjectMeta
// as part of its schema.

这可能吗?k8s API涉及面非常广泛,对于没有相关示例的现有技术,我已经对metav1 godoc,corev1 godoc和https://cs.k8s.io进行了爬网。

我找到的最接近的可能是ObjectMetaAccessor接口,但是我需要从AdmissionReview.Request.Object(type runtime.RawExtension)到runtime.Object第一个。

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有