func shouldCreateOrUpdateConfigMap()

in internal/controller/utils.go [321:351]


func shouldCreateOrUpdateConfigMap(existingConfigMap *corev1.ConfigMap, latestConfigMapSettings map[string]string, dataOptions *acpv1.ConfigMapDataOptions) bool {
	if existingConfigMap == nil || existingConfigMap.Data == nil {
		return true
	}

	if dataOptions == nil || dataOptions.Type == acpv1.Default || dataOptions.Type == acpv1.Properties {
		return !reflect.DeepEqual(existingConfigMap.Data, latestConfigMapSettings)
	}

	// spec.target.configMapData.key is changed
	if _, ok := existingConfigMap.Data[dataOptions.Key]; !ok {
		return true
	}

	var existingSettings, latestSettings map[string]interface{}
	if dataOptions.Type == acpv1.Yaml {
		_ = yaml.Unmarshal([]byte(existingConfigMap.Data[dataOptions.Key]), &existingSettings)
		_ = yaml.Unmarshal([]byte(latestConfigMapSettings[dataOptions.Key]), &latestSettings)

		return !reflect.DeepEqual(existingSettings, latestSettings)
	}

	if dataOptions.Type == acpv1.Json {
		_ = json.Unmarshal([]byte(existingConfigMap.Data[dataOptions.Key]), &existingSettings)
		_ = json.Unmarshal([]byte(latestConfigMapSettings[dataOptions.Key]), &latestSettings)

		return !reflect.DeepEqual(existingSettings, latestSettings)
	}

	return false
}