func()

in internal/controller/processor.go [135:198]


func (processor *AppConfigurationProviderProcessor) processKeyValueRefresh(existingConfigMap *corev1.ConfigMap) error {
	provider := processor.Provider
	reconcileState := processor.ReconciliationState
	var err error
	// Check if the sentinel based refresh is enabled
	if provider.Spec.Configuration.Refresh != nil &&
		provider.Spec.Configuration.Refresh.Enabled {
		processor.RefreshOptions.keyValueRefreshEnabled = true
	} else {
		reconcileState.NextKeyValueRefreshReconcileTime = metav1.Time{}
		return nil
	}

	refreshInterval, _ := time.ParseDuration(provider.Spec.Configuration.Refresh.Interval)
	nextKeyValueRefreshReconcileTime := metav1.Time{Time: processor.CurrentTime.Add(refreshInterval)}
	if processor.ShouldReconcile {
		reconcileState.NextKeyValueRefreshReconcileTime = nextKeyValueRefreshReconcileTime
		return nil
	}

	if !processor.CurrentTime.After(reconcileState.NextKeyValueRefreshReconcileTime.Time) {
		return nil
	}

	if provider.Spec.Configuration.Refresh.Monitoring != nil {
		if processor.RefreshOptions.sentinelChanged, processor.RefreshOptions.updatedSentinelETags, err = (processor.Retriever).CheckAndRefreshSentinels(processor.Context, processor.Provider, reconcileState.SentinelETags); err != nil {
			return err
		}
	} else {
		if processor.RefreshOptions.keyValuePageETagsChanged, err = (processor.Retriever).CheckPageETags(processor.Context, reconcileState.KeyValueETags); err != nil {
			return err
		}
	}

	if !processor.RefreshOptions.sentinelChanged && !processor.RefreshOptions.keyValuePageETagsChanged {
		reconcileState.NextKeyValueRefreshReconcileTime = nextKeyValueRefreshReconcileTime
		return nil
	}

	// Get the latest key value settings
	existingConfigMapSettings := &existingConfigMap.Data
	if processor.Settings.ConfigMapSettings != nil {
		existingConfigMapSettings = &processor.Settings.ConfigMapSettings
	}

	keyValueRefreshedSettings, err := (processor.Retriever).RefreshKeyValueSettings(processor.Context, existingConfigMapSettings, processor.SecretReferenceResolver)
	if err != nil {
		return err
	}

	processor.Settings = keyValueRefreshedSettings
	processor.RefreshOptions.ConfigMapSettingPopulated = true
	if processor.RefreshOptions.keyValuePageETagsChanged {
		processor.RefreshOptions.updatedKeyValueETags = keyValueRefreshedSettings.KeyValueETags

	}
	if processor.Provider.Spec.Secret != nil {
		processor.RefreshOptions.SecretSettingPopulated = true
	}
	// Update next refresh time only if settings updated successfully
	reconcileState.NextKeyValueRefreshReconcileTime = nextKeyValueRefreshReconcileTime

	return nil
}