我能够使用 unstructured.Unstructured 类型解决这个问题。
使用以下示例,您可以在控制器 ( Ref ) 中查看 CR (ExampleCR )。
// You can also watch unstructured objects
u := &unstructured.Unstructured{}
u.SetGroupVersionKind(schema.GroupVersionKind{
Kind: "ExampleCR",
Group: "",
Version: "version", // set version here
})
//watch for primary resource
err = c.Watch(&source.Kind{Type: u}, &handler.EnqueueRequestForObject{})
//watch for secondary resource
err = c.Watch(&source.Kind{Type: u}, &handler.EnqueueRequestForOwner{
IsController: true,
OwnerType: &ownerVersion.OwnerType{}})
完成此操作后,控制器将收到对帐请求。
CRUD 操作将与我们对其他类型(例如 Pod)的操作相同。
可以使用以下方法创建对象
func newExampleCR() (*unstructured.Unstructured)
&unstructured.Unstructured{
Object: map[string]interface{}{
"apiVersion": "version", //set version here
"kind": "ExampleCR", // set CR name here
"metadata": map[string]interface{}{
"name": "demo-deployment",
},
"spec": map[string]interface{}{
//spec goes here
},
},
}
}
可以在此处找到部署对象的完整示例
注意:在启动管理器之前,您必须确保 CRD 已在方案中注册。