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
}