func()

in internal/controller/appconfigurationprovider_controller.go [373:421]


func (reconciler *AzureAppConfigurationProviderReconciler) createOrUpdateConfigMap(
	ctx context.Context,
	existingConfigMap *corev1.ConfigMap,
	provider *acpv1.AzureAppConfigurationProvider,
	settings *loader.TargetKeyValueSettings) (reconcile.Result, error) {
	if !shouldCreateOrUpdateConfigMap(existingConfigMap, settings.ConfigMapSettings, provider.Spec.Target.ConfigMapData) {
		klog.V(5).Infof("Skip updating the configMap %q in %q namespace since data is not changed", provider.Spec.Target.ConfigMapName, provider.Namespace)
		return reconcile.Result{}, nil
	}

	configMapObj := &corev1.ConfigMap{
		ObjectMeta: metav1.ObjectMeta{
			Name:      provider.Spec.Target.ConfigMapName,
			Namespace: provider.Namespace,
		},
	}
	// Important: set the ownership of configMap
	if err := controllerutil.SetControllerReference(provider, configMapObj, reconciler.Scheme); err != nil {
		reconciler.logAndSetFailStatus(provider, err)
		return reconcile.Result{Requeue: true, RequeueAfter: RequeueReconcileAfter}, err
	}

	annotations := make(map[string]string)
	maps.Copy(annotations, provider.Annotations)
	annotations[LastReconcileTimeAnnotation] = metav1.Now().UTC().String()
	if len(settings.ConfigMapSettings) == 0 {
		klog.V(3).Info("No configMap settings are fetched from Azure AppConfiguration")
	}
	operationResult, err := ctrl.CreateOrUpdate(ctx, reconciler.Client, configMapObj, func() error {
		configMapObj.Data = settings.ConfigMapSettings
		configMapObj.Labels = provider.Labels
		configMapObj.Annotations = annotations

		return nil
	})
	if err != nil {
		reconciler.logAndSetFailStatus(provider, err)
		return reconcile.Result{Requeue: true, RequeueAfter: RequeueReconcileAfter}, err
	}

	namespacedName := types.NamespacedName{
		Name:      provider.Name,
		Namespace: provider.Namespace,
	}
	reconciler.ProvidersReconcileState[namespacedName].ConfigMapResourceVersion = &configMapObj.ResourceVersion
	klog.V(5).Infof("configMap %q in %q namespace is %s", configMapObj.Name, configMapObj.Namespace, string(operationResult))

	return reconcile.Result{}, nil
}