github.com/argoproj-labs/argocd-operator@v0.10.0/controllers/notificationsconfiguration/configmap.go (about) 1 package notificationsconfiguration 2 3 import ( 4 "context" 5 "fmt" 6 "reflect" 7 8 "github.com/argoproj-labs/argocd-operator/api/v1alpha1" 9 "github.com/argoproj-labs/argocd-operator/controllers/argoutil" 10 corev1 "k8s.io/api/core/v1" 11 "k8s.io/apimachinery/pkg/api/errors" 12 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 13 "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" 14 ) 15 16 const ( 17 ArgoCDNotificationsConfigMap = "argocd-notifications-cm" 18 ) 19 20 // reconcileNotificationsConfigmap will ensure that the notifications configuration is updated 21 func (r *NotificationsConfigurationReconciler) reconcileNotificationsConfigmap(cr *v1alpha1.NotificationsConfiguration) error { 22 23 NotificationsConfigMap := &corev1.ConfigMap{ 24 ObjectMeta: metav1.ObjectMeta{ 25 Name: ArgoCDNotificationsConfigMap, 26 Namespace: cr.Namespace, 27 }, 28 } 29 if err := argoutil.FetchObject(r.Client, cr.Namespace, NotificationsConfigMap.Name, NotificationsConfigMap); err != nil { 30 if !errors.IsNotFound(err) { 31 return fmt.Errorf("failed to get the configmap %s : %s", NotificationsConfigMap.Name, err) 32 } 33 34 if err := controllerutil.SetControllerReference(cr, NotificationsConfigMap, r.Scheme); err != nil { 35 return err 36 } 37 38 err := r.Client.Create(context.TODO(), NotificationsConfigMap) 39 if err != nil { 40 return err 41 } 42 } 43 44 // Verify if Notifications Configmap data is up to date with NotificationsConfiguration CR data 45 expectedConfiguration := make(map[string]string) 46 47 for k, v := range cr.Spec.Triggers { 48 expectedConfiguration[k] = v 49 } 50 51 for k, v := range cr.Spec.Templates { 52 expectedConfiguration[k] = v 53 } 54 55 for k, v := range cr.Spec.Services { 56 expectedConfiguration[k] = v 57 } 58 59 for k, v := range cr.Spec.Subscriptions { 60 expectedConfiguration[k] = v 61 } 62 63 if !reflect.DeepEqual(expectedConfiguration, NotificationsConfigMap.Data) { 64 NotificationsConfigMap.Data = expectedConfiguration 65 err := r.Client.Update(context.TODO(), NotificationsConfigMap) 66 if err != nil { 67 return err 68 } 69 } 70 71 // Do nothing 72 return nil 73 }