如何将runtime.Object转换为特定类型?

时间:2019-09-23 22:37:49

标签: kubernetes

我正在用Kubebuilder框架编写自定义控制器,在一种方法中,我得到了runtime.Object类型的对象,我知道我应该能够将其转换为特定的类型,例如MyCustomResource,但我无法从文档中找出答案。

1 个答案:

答案 0 :(得分:1)

它应该像这样简单:

func convertToMyCustomResource(obj runtime.Object) *v1alpha1.MyCustomResource {
  myobj := obj.(*v1alpha1.MyCustomResource)
  return myobj
}

如果这会产生错误(例如,不可能的类型声明),请确保MyCustomResource满足runtime.Object接口;即

  1. 运行控制器生成工具以生成DeepCopyObject方法

    go run vendor/sigs.k8s.io/controller-tools/cmd/controller-gen/main.go paths=./api/... object
    
  2. "k8s.io/apimachinery/pkg/apis/meta/v1".TypeMeta字段添加到实现MyCustomResource方法的GetObjectKind结构中。

    import (
      metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    )

    type MyCustomResource struct {
      metav1.TypeMeta `json:",inline"`
      // ... other stuff
    }