- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
TL;DR:如何在不知道对象的 Kind
metav1.ObjectMeta
结构提前?
我正在编写一个准入 Controller 端点,它根据 Request 将
字段 - 例如metav1.AdmissionReview
对象的 Request.Object.Raw
字段解编为具体对象。 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
,我们可以使用它来提高灵 active 。
我想要实现的是更接近于:
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
接口(interface),但我需要先从 AdmissionReview.Request.Object
(键入 runtime.RawExtension
)到 runtime.Object
。
最佳答案
我相信你找不到你要找的东西,因为在解码对象时,Kubernetes 使用 GetObjectKind并将结果与 Scheme 进行比较将对象转换为具体类型,而不是使用一些 generic喜欢在不知 Prop 体类型的情况下接近和与对象的字段进行交互。
因此您可以改用反射,例如:
k8sObjValue := reflect.ValueOf(admissionReview.Request.Object.Raw).Elem()
k8sObjObjectMeta := k8sObjValue.FieldByName("ObjectMeta")
annotations, ok := k8sObjObjectMeta.FieldByName("Annotations").Interface().(map[string]string)
if !ok {
panic("failed to retrieve annotations")
}
编辑:
或者更接近你的要求,转换成一个ObjectMeta对象
k8sObjValue := reflect.ValueOf(admissionReview.Request.Object.Raw).Elem()
objMeta, ok := k8sObjValue.FieldByName("ObjectMeta").Interface().(core.ObjectMeta)
if !ok {
panic("failed to retrieve object metadata")
}
关于go - 无论种类如何反序列化 ObjectMeta,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56765480/
TL;DR:如何在不知道对象的 Kindmetav1.ObjectMeta 结构提前? 我正在编写一个准入 Controller 端点,它根据 Request 将 metav1.AdmissionRe
我正在尝试使用 Go 中的 Istio,并且正在使用 Kubernetes 和 Istio go-client 代码。 我遇到的问题是我无法在 Istio-ServiceRole 对象中指定 Obje
我正在尝试使用以下命令运行 Helm chart : helm upgrade --install artifactory-int --set ingress.annotations.'kuberne
我是一名优秀的程序员,十分优秀!