如何在事先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
一个。
守候你守候我
一只名叫tom的猫
摇曳的蔷薇
相关分类