func()

in pkg/controllers/configmap_controller.go [95:144]


func (cmc *configMapControl) PatchConfigMap(
	ctx context.Context, sc *SyncContext) (cm *corev1.ConfigMap, err error) {

	nc := sc.ndb
	configMapName := nc.GetConfigMapName()
	cmOrg, err := cmc.getConfigMap(nc.Namespace, configMapName)
	if err != nil {
		klog.Errorf("Error retrieving ConfigMap %q : %s", getNamespacedName2(nc.Namespace, configMapName), err)
		return nil, err
	}

	// Get an updated config map copy
	cs := sc.configSummary
	cmChg := resources.GetUpdatedConfigMap(nc, cmOrg, cs)

	j, err := json.Marshal(cmOrg)
	if err != nil {
		return nil, err
	}

	j2, err := json.Marshal(cmChg)
	if err != nil {
		return nil, err
	}

	patchBytes, err := strategicpatch.CreateTwoWayMergePatch(j, j2, corev1.ConfigMap{})
	if err != nil {
		return nil, err
	}

	var result *corev1.ConfigMap
	ConfigMapInterface := cmc.getConfigMapInterface(nc.Namespace)
	// Patch the ConfigMap with retries on failure
	updateErr := wait.ExponentialBackoff(retry.DefaultBackoff, func() (ok bool, err error) {

		result, err = ConfigMapInterface.Patch(
			ctx, cmOrg.Name, types.StrategicMergePatchType, patchBytes, metav1.PatchOptions{})

		if err != nil {
			klog.Errorf("Failed to patch ConfigMap %q : %s",
				getNamespacedName2(nc.Namespace, configMapName), err)
			return false, err
		}

		return true, nil
	})

	klog.Infof("Successfully patched ConfigMap %q", getNamespacedName(cmChg))
	return result, updateErr
}