Я только начинаю работать с kubebuilder и Golang, чтобы расширить наш Kubernetes-кластер с помощью настраиваемого ресурса. Я бы хотел делать разные вещи в функции согласования в зависимости от события, которое на самом деле его вызвало.
Ресурс был создан? Это было обновлено? Он был удален?
Каждое из этих событий запускает контроллер, однако я не могу найти возможности увидеть, какое из этих событий действительно произошло. Я могу обойти эту проблему, написав такую программу согласования:
func (r *ServiceDescriptorReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
service := &batchv1.ServiceDescriptor{}
if err := r.Get(context.TODO(), req.NamespacedName, service); err != nil && errors.IsNotFound(err) {
fmt.Println("Resource was not found -> must have been deleted")
else {
fmt.Println("No errors found -> Resource must have been created or updated")
}
}
Однако это кажется странным неявным и отчасти хакерским.
Есть ли чистый (возможно, собственный) способ получения типа события вызова согласователя?