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  }