diff --git a/core/runtime/src/main/java/io/quarkiverse/operatorsdk/runtime/OperatorProducer.java b/core/runtime/src/main/java/io/quarkiverse/operatorsdk/runtime/OperatorProducer.java index 22936862b..9be3f6343 100644 --- a/core/runtime/src/main/java/io/quarkiverse/operatorsdk/runtime/OperatorProducer.java +++ b/core/runtime/src/main/java/io/quarkiverse/operatorsdk/runtime/OperatorProducer.java @@ -12,7 +12,10 @@ import io.fabric8.kubernetes.api.model.HasMetadata; import io.javaoperatorsdk.operator.Operator; +import io.javaoperatorsdk.operator.api.config.ControllerConfiguration; +import io.javaoperatorsdk.operator.api.config.ControllerConfigurationOverrider; import io.javaoperatorsdk.operator.api.reconciler.Reconciler; +import io.quarkiverse.operatorsdk.runtime.api.ConfigurableReconciler; import io.quarkus.arc.DefaultBean; @Singleton @@ -30,6 +33,7 @@ public class OperatorProducer { * @param reconcilers the detected {@link Reconciler} implementations * @return a properly configured {@link Operator} instance */ + @SuppressWarnings({ "rawtypes", "unchecked" }) @Produces @DefaultBean @ApplicationScoped @@ -48,7 +52,14 @@ Operator operator(QuarkusConfigurationService configuration, Instance reconciler : reconcilers) { - operator.register(reconciler); + if (reconciler instanceof ConfigurableReconciler configurable) { + ControllerConfiguration conf = configuration.getConfigurationFor(reconciler); + final var override = ControllerConfigurationOverrider.override(conf); + conf = configurable.updateConfigurationFrom(override); + operator.register(reconciler, conf); + } else { + operator.register(reconciler); + } } // if we set a termination timeout, install a shutdown hook diff --git a/core/runtime/src/main/java/io/quarkiverse/operatorsdk/runtime/api/ConfigurableReconciler.java b/core/runtime/src/main/java/io/quarkiverse/operatorsdk/runtime/api/ConfigurableReconciler.java new file mode 100644 index 000000000..9b2af77c1 --- /dev/null +++ b/core/runtime/src/main/java/io/quarkiverse/operatorsdk/runtime/api/ConfigurableReconciler.java @@ -0,0 +1,29 @@ +package io.quarkiverse.operatorsdk.runtime.api; + +import io.fabric8.kubernetes.api.model.HasMetadata; +import io.javaoperatorsdk.operator.api.config.ConfigurationService; +import io.javaoperatorsdk.operator.api.config.ControllerConfiguration; +import io.javaoperatorsdk.operator.api.config.ControllerConfigurationOverrider; +import io.javaoperatorsdk.operator.api.reconciler.Reconciler; + +/** + * Implement to change a {@link io.javaoperatorsdk.operator.api.reconciler.Reconciler}'s + * configuration at runtime + * + * @param

the primary resource type of the reconciler + * @since 7.2 + */ +public interface ConfigurableReconciler

{ + /** + * Updates the reconciler's configuration by applying the modifications specified by the provided + * {@link ControllerConfigurationOverrider} and then replacing the existing configuration in the + * {@link ConfigurationService} for this reconciler. Note that this method will not be applied if + * there is no configuration (as determined by {@link + * ConfigurationService#getConfigurationFor(Reconciler)} for the reconciler. + * + * @param configOverrider provides the modifications to apply to the existing reconciler's + * configuration + * @return the updated {@link ControllerConfiguration} to use to register the associated {@link Reconciler} + */ + ControllerConfiguration

updateConfigurationFrom(ControllerConfigurationOverrider

configOverrider); +}