+
+// Handle Delete CR event for additional cleanup
+func (r *ReconcileCollectdPlugin) handleDelete(reqLogger logr.Logger, cr *onapv1alpha1.CollectdPlugin) (bool, error) {
+ // Check if the CollectdPlugin instance is marked to be deleted, which is
+ // indicated by the deletion timestamp being set.
+ isMarkedToBeDeleted := cr.GetDeletionTimestamp() != nil
+ if isMarkedToBeDeleted {
+ if contains(cr.GetFinalizers(), collectdPluginFinalizer) {
+ // Run finalization logic for collectdPluginFinalizer. If the
+ // finalization logic fails, don't remove the finalizer so
+ // that we can retry during the next reconciliation.
+ if err := r.finalizeCollectdPlugin(reqLogger, cr); err != nil {
+ return isMarkedToBeDeleted, err
+ }
+
+ // Remove collectdPluginFinalizer. Once all finalizers have been
+ // removed, the object will be deleted.
+ cr.SetFinalizers(remove(cr.GetFinalizers(), collectdPluginFinalizer))
+ err := r.client.Update(context.TODO(), cr)
+ if err != nil {
+ return isMarkedToBeDeleted, err
+ }
+ }
+ }
+ return isMarkedToBeDeleted, nil
+}
+
+func (r *ReconcileCollectdPlugin) updateStatus(cr *onapv1alpha1.CollectdPlugin) error {
+ podList := &corev1.PodList{}
+ opts := &client.ListOptions{}
+ opts.SetLabelSelector("app=collectd")
+ var pods []string
+ opts.InNamespace(cr.Namespace)
+ err := r.client.List(context.TODO(), opts, podList)
+ if err != nil {
+ return err
+ }
+
+ if podList.Items == nil || len(podList.Items) == 0 {
+ return err
+ }
+
+ for _, pod := range podList.Items {
+ pods = append(pods, pod.Name)
+ }
+ cr.Status.CollectdAgents = pods
+ err = r.client.Status().Update(context.TODO(), cr)
+ return err
+}
+
+func (r *ReconcileCollectdPlugin) finalizeCollectdPlugin(reqLogger logr.Logger, cr *onapv1alpha1.CollectdPlugin) error {
+ // Cleanup by regenerating new collectd conf and rolling update of DaemonSet
+ if err := r.handleCollectdPlugin(reqLogger, cr); err != nil {
+ reqLogger.Error(err, "Finalize CollectdPlugin failed!!")
+ return err
+ }
+ reqLogger.Info("Successfully finalized CollectdPlugin!!")
+ return nil
+}
+
+func (r *ReconcileCollectdPlugin) addFinalizer(reqLogger logr.Logger, cr *onapv1alpha1.CollectdPlugin) error {
+ reqLogger.Info("Adding Finalizer for the CollectdPlugin")
+ cr.SetFinalizers(append(cr.GetFinalizers(), collectdPluginFinalizer))
+
+ // Update CR
+ err := r.client.Update(context.TODO(), cr)
+ if err != nil {
+ reqLogger.Error(err, "Failed to update CollectdPlugin with finalizer")
+ return err
+ }
+ return nil
+}
+
+func contains(list []string, s string) bool {
+ for _, v := range list {
+ if v == s {
+ return true
+ }
+ }
+ return false
+}
+
+func remove(list []string, s string) []string {
+ for i, v := range list {
+ if v == s {
+ list = append(list[:i], list[i+1:]...)
+ }
+ }
+ return list
+}