Repository: quarkiverse/quarkus-operator-sdk
Pull request #944 (2024-09-02 20:42:46)

fix: add ConfigurationService implementation to support build-time resolution
- **feat: add build-time ConfigurationService implementation**
- **fix: only add PATCH verb if resource is creatable**



Patch:
diff --git a/annotations/pom.xml b/annotations/pom.xml
index 63f08e9d..fb7a5c87 100644
--- a/annotations/pom.xml
+++ b/annotations/pom.xml
@@ -4,7 +4,7 @@
     <parent>
         <groupId>io.quarkiverse.operatorsdk</groupId>
         <artifactId>quarkus-operator-sdk-parent</artifactId>
-        <version>6.7.4-SNAPSHOT</version>
+        <version>6.8.0-SNAPSHOT</version>
     </parent>
 
     <artifactId>quarkus-operator-sdk-annotations</artifactId>
diff --git a/bom/pom.xml b/bom/pom.xml
index 9b9b95c9..983214c7 100644
--- a/bom/pom.xml
+++ b/bom/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>io.quarkiverse.operatorsdk</groupId>
     <artifactId>quarkus-operator-sdk-parent</artifactId>
-    <version>6.7.4-SNAPSHOT</version>
+    <version>6.8.0-SNAPSHOT</version>
   </parent>
   <artifactId>quarkus-operator-sdk-bom</artifactId>
   <name>Quarkus - Operator SDK - BOM</name>
diff --git a/build-parent/pom.xml b/build-parent/pom.xml
index e8f3c288..d7c4eee6 100644
--- a/build-parent/pom.xml
+++ b/build-parent/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>io.quarkiverse.operatorsdk</groupId>
     <artifactId>quarkus-operator-sdk-parent</artifactId>
-    <version>6.7.4-SNAPSHOT</version>
+    <version>6.8.0-SNAPSHOT</version>
   </parent>
   <artifactId>quarkus-operator-sdk-build-parent</artifactId>
   <packaging>pom</packaging>
diff --git a/bundle-generator/deployment/pom.xml b/bundle-generator/deployment/pom.xml
index 178a543d..b406d3c6 100644
--- a/bundle-generator/deployment/pom.xml
+++ b/bundle-generator/deployment/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <groupId>io.quarkiverse.operatorsdk</groupId>
         <artifactId>quarkus-operator-sdk-bundle-generator-parent</artifactId>
-        <version>6.7.4-SNAPSHOT</version>
+        <version>6.8.0-SNAPSHOT</version>
     </parent>
 
     <name>Quarkus - Operator SDK - Bundle Generator - Deployment</name>
diff --git a/bundle-generator/pom.xml b/bundle-generator/pom.xml
index a1f99aec..5c37a175 100644
--- a/bundle-generator/pom.xml
+++ b/bundle-generator/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <groupId>io.quarkiverse.operatorsdk</groupId>
         <artifactId>quarkus-operator-sdk-build-parent</artifactId>
-        <version>6.7.4-SNAPSHOT</version>
+        <version>6.8.0-SNAPSHOT</version>
         <relativePath>../build-parent/pom.xml</relativePath>
     </parent>
 
diff --git a/bundle-generator/runtime/pom.xml b/bundle-generator/runtime/pom.xml
index efc8ada5..7a2a5368 100644
--- a/bundle-generator/runtime/pom.xml
+++ b/bundle-generator/runtime/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <groupId>io.quarkiverse.operatorsdk</groupId>
         <artifactId>quarkus-operator-sdk-bundle-generator-parent</artifactId>
-        <version>6.7.4-SNAPSHOT</version>
+        <version>6.8.0-SNAPSHOT</version>
     </parent>
 
     <name>Quarkus - Operator SDK - Bundle Generator - Runtime</name>
diff --git a/cli/pom.xml b/cli/pom.xml
index 60211249..9953cf0b 100644
--- a/cli/pom.xml
+++ b/cli/pom.xml
@@ -3,7 +3,7 @@
     <parent>
         <groupId>io.quarkiverse.operatorsdk</groupId>
         <artifactId>quarkus-operator-sdk-build-parent</artifactId>
-        <version>6.7.4-SNAPSHOT</version>
+        <version>6.8.0-SNAPSHOT</version>
         <relativePath>../build-parent/pom.xml</relativePath>
     </parent>
     <modelVersion>4.0.0</modelVersion>
diff --git a/common-deployment/pom.xml b/common-deployment/pom.xml
index b3748dcc..36a1f352 100644
--- a/common-deployment/pom.xml
+++ b/common-deployment/pom.xml
@@ -3,7 +3,7 @@
   <parent>
     <groupId>io.quarkiverse.operatorsdk</groupId>
     <artifactId>quarkus-operator-sdk-build-parent</artifactId>
-    <version>6.7.4-SNAPSHOT</version>
+    <version>6.8.0-SNAPSHOT</version>
     <relativePath>../build-parent/pom.xml</relativePath>
   </parent>
   <modelVersion>4.0.0</modelVersion>
diff --git a/common/pom.xml b/common/pom.xml
index 06b17837..c5239fc6 100644
--- a/common/pom.xml
+++ b/common/pom.xml
@@ -4,7 +4,7 @@
     <parent>
         <groupId>io.quarkiverse.operatorsdk</groupId>
         <artifactId>quarkus-operator-sdk-build-parent</artifactId>
-        <version>6.7.4-SNAPSHOT</version>
+        <version>6.8.0-SNAPSHOT</version>
         <relativePath>../build-parent/pom.xml</relativePath>
     </parent>
 
diff --git a/core/deployment/pom.xml b/core/deployment/pom.xml
index 4048e0b0..1204a647 100644
--- a/core/deployment/pom.xml
+++ b/core/deployment/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>io.quarkiverse.operatorsdk</groupId>
     <artifactId>quarkus-operator-sdk-core-parent</artifactId>
-    <version>6.7.4-SNAPSHOT</version>
+    <version>6.8.0-SNAPSHOT</version>
   </parent>
   <artifactId>quarkus-operator-sdk-deployment</artifactId>
   <name>Quarkus - Operator SDK - Core - Deployment</name>
diff --git a/core/deployment/src/main/java/io/quarkiverse/operatorsdk/deployment/AddClusterRolesDecorator.java b/core/deployment/src/main/java/io/quarkiverse/operatorsdk/deployment/AddClusterRolesDecorator.java
index ace2d504..1ca6a359 100644
--- a/core/deployment/src/main/java/io/quarkiverse/operatorsdk/deployment/AddClusterRolesDecorator.java
+++ b/core/deployment/src/main/java/io/quarkiverse/operatorsdk/deployment/AddClusterRolesDecorator.java
@@ -122,7 +122,8 @@ public class AddClusterRolesDecorator extends ResourceProvidingDecorator<Kuberne
                 if (Deleter.class.isAssignableFrom(dependentResourceClass)) {
                     verbs.add(RBACVerbs.DELETE);
                 }
-                if (Creator.class.isAssignableFrom(dependentResourceClass)) {
+                final var isCreator = Creator.class.isAssignableFrom(dependentResourceClass);
+                if (isCreator) {
                     verbs.add(RBACVerbs.CREATE);
                 }
 
@@ -140,8 +141,8 @@ public class AddClusterRolesDecorator extends ResourceProvidingDecorator<Kuberne
                             resourcePlural = gvk.getPluralOrDefault();
                         }
 
-                        // if we use SSA and the dependent resource class is not excluded from using SSA, we also need PATCH permissions for finalizer
-                        if (cri.getConfigurationService().shouldUseSSA(kubeResource)) {
+                        // if we use SSA and the dependent resource class is not excluded from using SSA, we also need PATCH permissions for finalizer when the dependent resource is creatable
+                        if (isCreator && cri.getConfigurationService().shouldUseSSA(kubeResource)) {
                             verbs.add(RBACVerbs.PATCH);
                         }
                     } catch (Exception e) {
diff --git a/core/deployment/src/main/java/io/quarkiverse/operatorsdk/deployment/BuildTimeConfigurationServiceBuildItem.java b/core/deployment/src/main/java/io/quarkiverse/operatorsdk/deployment/BuildTimeConfigurationServiceBuildItem.java
new file mode 100644
index 00000000..3ee81f8f
--- /dev/null
+++ b/core/deployment/src/main/java/io/quarkiverse/operatorsdk/deployment/BuildTimeConfigurationServiceBuildItem.java
@@ -0,0 +1,16 @@
+package io.quarkiverse.operatorsdk.deployment;
+
+import io.quarkiverse.operatorsdk.runtime.BuildTimeConfigurationService;
+import io.quarkus.builder.item.SimpleBuildItem;
+
+public final class BuildTimeConfigurationServiceBuildItem extends SimpleBuildItem {
+    private final BuildTimeConfigurationService service;
+
+    BuildTimeConfigurationServiceBuildItem(BuildTimeConfigurationService service) {
+        this.service = service;
+    }
+
+    public BuildTimeConfigurationService getConfigurationService() {
+        return service;
+    }
+}
diff --git a/core/deployment/src/main/java/io/quarkiverse/operatorsdk/deployment/BuildTimeConfigurationServiceBuildStep.java b/core/deployment/src/main/java/io/quarkiverse/operatorsdk/deployment/BuildTimeConfigurationServiceBuildStep.java
new file mode 100644
index 00000000..e3150e92
--- /dev/null
+++ b/core/deployment/src/main/java/io/quarkiverse/operatorsdk/deployment/BuildTimeConfigurationServiceBuildStep.java
@@ -0,0 +1,22 @@
+package io.quarkiverse.operatorsdk.deployment;
+
+import io.quarkiverse.operatorsdk.runtime.BuildTimeConfigurationService;
+import io.quarkiverse.operatorsdk.runtime.BuildTimeOperatorConfiguration;
+import io.quarkus.deployment.annotations.BuildStep;
+
+public class BuildTimeConfigurationServiceBuildStep {
+
+    @BuildStep
+    BuildTimeConfigurationServiceBuildItem createBuildTimeConfigurationService(VersionBuildItem versionBuildItem,
+            GeneratedCRDInfoBuildItem generatedCRDs, BuildTimeOperatorConfiguration buildTimeConfig) {
+        final var service = new BuildTimeConfigurationService(
+                versionBuildItem.getVersion(),
+                generatedCRDs.getCRDGenerationInfo(),
+                buildTimeConfig.startOperator(),
+                buildTimeConfig.closeClientOnStop(),
+                buildTimeConfig.stopOnInformerErrorDuringStartup(),
+                buildTimeConfig.enableSSA(),
+                buildTimeConfig.activateLeaderElectionForProfiles());
+        return new BuildTimeConfigurationServiceBuildItem(service);
+    }
+}
diff --git a/core/deployment/src/main/java/io/quarkiverse/operatorsdk/deployment/OperatorSDKProcessor.java b/core/deployment/src/main/java/io/quarkiverse/operatorsdk/deployment/OperatorSDKProcessor.java
index 483c6b9b..d98b24ce 100644
--- a/core/deployment/src/main/java/io/quarkiverse/operatorsdk/deployment/OperatorSDKProcessor.java
+++ b/core/deployment/src/main/java/io/quarkiverse/operatorsdk/deployment/OperatorSDKProcessor.java
@@ -121,18 +121,15 @@ class OperatorSDKProcessor {
     @BuildStep
     @Record(ExecutionTime.RUNTIME_INIT)
     void updateControllerConfigurations(
+            BuildTimeConfigurationServiceBuildItem buildTimeConfigurationServiceBuildItem,
             ConfigurationServiceRecorder recorder,
             RunTimeOperatorConfiguration runTimeConfiguration,
             BuildProducer<SyntheticBeanBuildItem> syntheticBeanBuildItemBuildProducer,
-            GeneratedCRDInfoBuildItem generatedCRDs,
-            ControllerConfigurationsBuildItem serviceBuildItem,
-            VersionBuildItem versionBuildItem) {
+            ControllerConfigurationsBuildItem serviceBuildItem) {
         final var supplier = recorder.configurationServiceSupplier(
-                versionBuildItem.getVersion(),
+                buildTimeConfigurationServiceBuildItem.getConfigurationService(),
                 serviceBuildItem.getControllerConfigs(),
-                generatedCRDs.getCRDGenerationInfo(),
-                runTimeConfiguration,
-                buildTimeConfiguration);
+                runTimeConfiguration);
         syntheticBeanBuildItemBuildProducer.produce(
                 SyntheticBeanBuildItem.configure(QuarkusConfigurationService.class)
                         .scope(Singleton.class)
@@ -186,12 +183,10 @@ class OperatorSDKProcessor {
      * Gathers the CustomResource implementations that are not part of the application index because they are part of an
      * external, reusable module for example.
      *
+     * <p>
      * Note that this will be obsolete once <a href="https://github.com/quarkusio/quarkus/pull/38586">Quarkus #38586</a> is
      * usable
-     *
-     * @param combinedIndexBuildItem
-     * @param applicationIndexBuildItem
-     * @param reflectiveClassProducer
+     * </p>
      */
     @BuildStep
     void gatherOutOfAppCustomResourceImplementations(CombinedIndexBuildItem combinedIndexBuildItem,
@@ -253,7 +248,6 @@ class OperatorSDKProcessor {
             ControllerConfigurationsBuildItem configurations,
             BuildProducer<RunTimeConfigurationDefaultBuildItem> runtimeConfig) {
         configurations.getControllerConfigs().forEach((name, configuration) -> {
-            @SuppressWarnings("unchecked")
             final var namespaces = String.join(",", configuration.getNamespaces());
             runtimeConfig.produce(new RunTimeConfigurationDefaultBuildItem(
                     "quarkus.operator-sdk.controllers." + configuration.getName() + ".namespaces",
@@ -266,7 +260,11 @@ class OperatorSDKProcessor {
      * Ignore warnings related to non-indexed classes in the reflective hierarchy. At this point, we cannot know
      * if they are actually needed for native compilation.
      *
-     * This could probably be removed once https://github.com/quarkiverse/quarkus-operator-sdk/issues/941 is resolved.
+     * <p>
+     * This could probably be removed once <a href=
+     * "https://github.com/quarkiverse/quarkus-operator-sdk/issues/941">https://github.com/quarkiverse/quarkus-operator-sdk/issues/941</a>
+     * is resolved.
+     * </p>
      *
      */
     @BuildStep
diff --git a/core/deployment/src/main/java/io/quarkiverse/operatorsdk/deployment/QuarkusControllerConfigurationBuildStep.java b/core/deployment/src/main/java/io/quarkiverse/operatorsdk/deployment/QuarkusControllerConfigurationBuildStep.java
index 710f6bb4..3ae93534 100644
--- a/core/deployment/src/main/java/io/quarkiverse/operatorsdk/deployment/QuarkusControllerConfigurationBuildStep.java
+++ b/core/deployment/src/main/java/io/quarkiverse/operatorsdk/deployment/QuarkusControllerConfigurationBuildStep.java
@@ -85,6 +85,7 @@ class QuarkusControllerConfigurationBuildStep {
     @BuildStep
     @SuppressWarnings("unused")
     ControllerConfigurationsBuildItem createControllerConfigurations(
+            BuildTimeConfigurationServiceBuildItem buildTimeConfigurationServiceBuildItem,
             ReconcilerInfosBuildItem reconcilers,
             AnnotationConfigurablesBuildItem annotationConfigurables,
             BuildTimeOperatorConfiguration buildTimeConfiguration,
@@ -119,6 +120,7 @@ class QuarkusControllerConfigurationBuildStep {
                     if (configuration == null) {
                         configuration = createConfiguration(reconcilerInfo,
                                 annotationConfigurables.getConfigurableInfos(),
+                                buildTimeConfigurationServiceBuildItem.getConfigurationService(),
                                 buildTimeConfiguration,
                                 combinedIndexBuildItem.getIndex());
                     }
@@ -139,6 +141,7 @@ class QuarkusControllerConfigurationBuildStep {
     static QuarkusControllerConfiguration createConfiguration(
             ReconcilerAugmentedClassInfo reconcilerInfo,
             Map<String, AnnotationConfigurableAugmentedClassInfo> configurableInfos,
+            BuildTimeConfigurationService buildTimeConfigurationService,
             BuildTimeOperatorConfiguration buildTimeConfiguration,
             IndexView index) {
 
@@ -183,7 +186,7 @@ class QuarkusControllerConfigurationBuildStep {
             final var interval = ConfigurationUtils.annotationValueOrDefault(
                     intervalFromAnnotation, "interval", AnnotationValue::asLong,
                     () -> MaxReconciliationInterval.DEFAULT_INTERVAL);
-            final var timeUnit = (TimeUnit) ConfigurationUtils.annotationValueOrDefault(
+            final var timeUnit = ConfigurationUtils.annotationValueOrDefault(
                     intervalFromAnnotation,
                     "timeUnit",
                     av -> TimeUnit.valueOf(av.asEnum()),
@@ -283,6 +286,9 @@ class QuarkusControllerConfigurationBuildStep {
                 rateLimiterConfigurationClass, dependentResources, null, additionalRBACRules, additionalRBACRoleRefs,
                 fieldManager, itemStore);
 
+        // setting the configuration service with build-time known information for resolution of some information such as resource classes associated with dependent resources or whether SSA should be used for a given dependent
+        configuration.setParent(buildTimeConfigurationService);
+
         if (hasDependents) {
             dependentResourceInfos.forEach(dependent -> {
                 final var spec = createDependentResourceSpec(dependent, index, configuration);
diff --git a/core/pom.xml b/core/pom.xml
index 56ca4eac..264c6af8 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <groupId>io.quarkiverse.operatorsdk</groupId>
         <artifactId>quarkus-operator-sdk-build-parent</artifactId>
-        <version>6.7.4-SNAPSHOT</version>
+        <version>6.8.0-SNAPSHOT</version>
         <relativePath>../build-parent/pom.xml</relativePath>
     </parent>
 
diff --git a/core/runtime/pom.xml b/core/runtime/pom.xml
index f7d95d6d..10597121 100644
--- a/core/runtime/pom.xml
+++ b/core/runtime/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>io.quarkiverse.operatorsdk</groupId>
     <artifactId>quarkus-operator-sdk-core-parent</artifactId>
-    <version>6.7.4-SNAPSHOT</version>
+    <version>6.8.0-SNAPSHOT</version>
   </parent>
   <artifactId>quarkus-operator-sdk</artifactId>
   <name>Quarkus - Operator SDK - Core - Runtime</name>
diff --git a/core/runtime/src/main/java/io/quarkiverse/operatorsdk/runtime/BuildTimeConfigurationService.java b/core/runtime/src/main/java/io/quarkiverse/operatorsdk/runtime/BuildTimeConfigurationService.java
new file mode 100644
index 00000000..d4f235b9
--- /dev/null
+++ b/core/runtime/src/main/java/io/quarkiverse/operatorsdk/runtime/BuildTimeConfigurationService.java
@@ -0,0 +1,75 @@
+package io.quarkiverse.operatorsdk.runtime;
+
+import java.util.List;
+import java.util.Set;
+
+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.reconciler.Reconciler;
+import io.quarkus.runtime.annotations.IgnoreProperty;
+
+public class BuildTimeConfigurationService implements ConfigurationService {
+    private final Version version;
+    private final CRDGenerationInfo crdInfo;
+    private final boolean startOperator;
+    private final boolean closeClientOnStop;
+    private final boolean stopOnInformerErrorDuringStartup;
+    private final boolean enableSSA;
+    private final List<String> leaderElectionActivationProfiles;
+
+    public BuildTimeConfigurationService(Version version, CRDGenerationInfo crdInfo, boolean startOperator,
+            boolean closeClientOnStop, boolean stopOnInformerErrorDuringStartup, boolean enableSSA,
+            List<String> leaderElectionActivationProfiles) {
+        this.version = version;
+        this.crdInfo = crdInfo;
+        this.startOperator = startOperator;
+        this.closeClientOnStop = closeClientOnStop;
+        this.stopOnInformerErrorDuringStartup = stopOnInformerErrorDuringStartup;
+        this.enableSSA = enableSSA;
+        this.leaderElectionActivationProfiles = leaderElectionActivationProfiles;
+    }
+
+    @Override
+    public <R extends HasMetadata> ControllerConfiguration<R> getConfigurationFor(Reconciler<R> reconciler) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    @IgnoreProperty
+    public Set<String> getKnownReconcilerNames() {
+        throw new UnsupportedOperationException();
+    }
+
+    public Version getVersion() {
+        return version;
+    }
+
+    public CRDGenerationInfo getCrdInfo() {
+        return crdInfo;
+    }
+
+    public boolean isStartOperator() {
+        return startOperator;
+    }
+
+    public boolean isCloseClientOnStop() {
+        return closeClientOnStop;
+    }
+
+    public boolean isStopOnInformerErrorDuringStartup() {
+        return stopOnInformerErrorDuringStartup;
+    }
+
+    public boolean isEnableSSA() {
+        return enableSSA;
+    }
+
+    public boolean activateLeaderElection(List<String> activeProfiles) {
+        return activeProfiles.stream().anyMatch(leaderElectionActivationProfiles::contains);
+    }
+
+    public List<String> getLeaderElectionActivationProfiles() {
+        return leaderElectionActivationProfiles;
+    }
+}
diff --git a/core/runtime/src/main/java/io/quarkiverse/operatorsdk/runtime/ConfigurationServiceRecorder.java b/core/runtime/src/main/java/io/quarkiverse/operatorsdk/runtime/ConfigurationServiceRecorder.java
index ea3794dc..7436129e 100644
--- a/core/runtime/src/main/java/io/quarkiverse/operatorsdk/runtime/ConfigurationServiceRecorder.java
+++ b/core/runtime/src/main/java/io/quarkiverse/operatorsdk/runtime/ConfigurationServiceRecorder.java
@@ -25,10 +25,10 @@ public class ConfigurationServiceRecorder {
 
     static final Logger log = Logger.getLogger(ConfigurationServiceRecorder.class.getName());
 
-    public Supplier<QuarkusConfigurationService> configurationServiceSupplier(Version version,
+    public Supplier<QuarkusConfigurationService> configurationServiceSupplier(
+            BuildTimeConfigurationService buildTimeConfigurationService,
             Map<String, QuarkusControllerConfiguration<?>> configurations,
-            CRDGenerationInfo crdInfo, RunTimeOperatorConfiguration runTimeConfiguration,
-            BuildTimeOperatorConfiguration buildTimeConfiguration) {
+            RunTimeOperatorConfiguration runTimeConfiguration) {
         final var maxThreads = runTimeConfiguration.concurrentReconciliationThreads()
                 .orElse(ConfigurationService.DEFAULT_RECONCILIATION_THREADS_NUMBER);
         final var timeout = runTimeConfiguration.terminationTimeoutSeconds()
@@ -70,31 +70,30 @@ public class ConfigurationServiceRecorder {
             // deactivate leader election in dev mode
             LeaderElectionConfiguration leaderElectionConfiguration = null;
             final var profiles = ConfigUtils.getProfiles();
-            final var leaderElectionActivationProfiles = buildTimeConfiguration.activateLeaderElectionForProfiles();
-            if (profiles.stream().anyMatch(leaderElectionActivationProfiles::contains)) {
+            if (buildTimeConfigurationService.activateLeaderElection(profiles)) {
                 leaderElectionConfiguration = container.instance(LeaderElectionConfiguration.class).get();
             } else {
                 log.info("Leader election deactivated because it is only activated for "
-                        + leaderElectionActivationProfiles
+                        + buildTimeConfigurationService.getLeaderElectionActivationProfiles()
                         + " profiles. Currently active profiles: " + profiles);
             }
 
             return new QuarkusConfigurationService(
-                    version,
+                    buildTimeConfigurationService.getVersion(),
                     configurations.values(),
                     container.instance(KubernetesClient.class).get(),
-                    crdInfo,
+                    buildTimeConfigurationService.getCrdInfo(),
                     maxThreads,
                     workflowThreads,
                     timeout,
                     cacheSyncTimeout,
                     container.instance(Metrics.class).get(),
-                    buildTimeConfiguration.startOperator(),
+                    buildTimeConfigurationService.isStartOperator(),
                     leaderElectionConfiguration,
                     container.instance(InformerStoppedHandler.class).orElse(null),
-                    buildTimeConfiguration.closeClientOnStop(),
-                    buildTimeConfiguration.stopOnInformerErrorDuringStartup(),
-                    buildTimeConfiguration.enableSSA());
+                    buildTimeConfigurationService.isCloseClientOnStop(),
+                    buildTimeConfigurationService.isStopOnInformerErrorDuringStartup(),
+                    buildTimeConfigurationService.isEnableSSA());
         };
     }
 
diff --git a/core/runtime/src/main/java/io/quarkiverse/operatorsdk/runtime/QuarkusControllerConfiguration.java b/core/runtime/src/main/java/io/quarkiverse/operatorsdk/runtime/QuarkusControllerConfiguration.java
index de851c88..d0289b26 100644
--- a/core/runtime/src/main/java/io/quarkiverse/operatorsdk/runtime/QuarkusControllerConfiguration.java
+++ b/core/runtime/src/main/java/io/quarkiverse/operatorsdk/runtime/QuarkusControllerConfiguration.java
@@ -93,7 +93,7 @@ public class QuarkusControllerConfiguration<R extends HasMetadata> implements Co
     private Retry retry;
     private RateLimiter rateLimiter;
     private ManagedWorkflow<R> workflow;
-    private QuarkusConfigurationService parent;
+    private ConfigurationService parent;
 
     @RecordableConstructor
     @SuppressWarnings("unchecked")
@@ -157,7 +157,7 @@ public class QuarkusControllerConfiguration<R extends HasMetadata> implements Co
         return parent;
     }
 
-    public void setParent(QuarkusConfigurationService parent) {
+    public void setParent(ConfigurationService parent) {
         this.parent = parent;
     }
 
diff --git a/docs/pom.xml b/docs/pom.xml
index 008ad208..16f1ce2c 100644
--- a/docs/pom.xml
+++ b/docs/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <groupId>io.quarkiverse.operatorsdk</groupId>
         <artifactId>quarkus-operator-sdk-build-parent</artifactId>
-        <version>6.7.4-SNAPSHOT</version>
+        <version>6.8.0-SNAPSHOT</version>
         <relativePath>../build-parent/pom.xml</relativePath>
     </parent>
 
diff --git a/pom.xml b/pom.xml
index 3a53432a..8729cdb9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,7 +8,7 @@
   </parent>
   <groupId>io.quarkiverse.operatorsdk</groupId>
   <artifactId>quarkus-operator-sdk-parent</artifactId>
-  <version>6.7.4-SNAPSHOT</version>
+  <version>6.8.0-SNAPSHOT</version>
   <packaging>pom</packaging>
   <name>Quarkus - Operator SDK - Parent</name>
   <properties>
diff --git a/samples/exposedapp/pom.xml b/samples/exposedapp/pom.xml
index 7cefa0ad..1c554e99 100644
--- a/samples/exposedapp/pom.xml
+++ b/samples/exposedapp/pom.xml
@@ -3,7 +3,7 @@
   <parent>
     <artifactId>quarkus-operator-sdk-samples</artifactId>
     <groupId>io.quarkiverse.operatorsdk</groupId>
-    <version>6.7.4-SNAPSHOT</version>
+    <version>6.8.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
diff --git a/samples/joke/pom.xml b/samples/joke/pom.xml
index 0943d2d4..9b859121 100644
--- a/samples/joke/pom.xml
+++ b/samples/joke/pom.xml
@@ -3,7 +3,7 @@
   <parent>
     <groupId>io.quarkiverse.operatorsdk</groupId>
     <artifactId>quarkus-operator-sdk-samples</artifactId>
-    <version>6.7.4-SNAPSHOT</version>
+    <version>6.8.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
diff --git a/samples/mysql-schema/pom.xml b/samples/mysql-schema/pom.xml
index 7de72c1f..cec543a1 100644
--- a/samples/mysql-schema/pom.xml
+++ b/samples/mysql-schema/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>io.quarkiverse.operatorsdk</groupId>
     <artifactId>quarkus-operator-sdk-samples</artifactId>
-    <version>6.7.4-SNAPSHOT</version>
+    <version>6.8.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>quarkus-operator-sdk-samples-mysql-schema</artifactId>
diff --git a/samples/pingpong/pom.xml b/samples/pingpong/pom.xml
index 0b496b13..6701d653 100644
--- a/samples/pingpong/pom.xml
+++ b/samples/pingpong/pom.xml
@@ -3,7 +3,7 @@
   <parent>
     <groupId>io.quarkiverse.operatorsdk</groupId>
     <artifactId>quarkus-operator-sdk-samples</artifactId>
-    <version>6.7.4-SNAPSHOT</version>
+    <version>6.8.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
diff --git a/samples/pom.xml b/samples/pom.xml
index e411e4da..8be575bf 100644
--- a/samples/pom.xml
+++ b/samples/pom.xml
@@ -3,7 +3,7 @@
   <parent>
     <artifactId>quarkus-operator-sdk-build-parent</artifactId>
     <groupId>io.quarkiverse.operatorsdk</groupId>
-    <version>6.7.4-SNAPSHOT</version>
+    <version>6.8.0-SNAPSHOT</version>
     <relativePath>../build-parent/pom.xml</relativePath>
   </parent>
   <modelVersion>4.0.0</modelVersion>


Test patch:
diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
index 31c05856..ec2b4b65 100644
--- a/integration-tests/pom.xml
+++ b/integration-tests/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <groupId>io.quarkiverse.operatorsdk</groupId>
     <artifactId>quarkus-operator-sdk-build-parent</artifactId>
-    <version>6.7.4-SNAPSHOT</version>
+    <version>6.8.0-SNAPSHOT</version>
     <relativePath>../build-parent/pom.xml</relativePath>
   </parent>
   <artifactId>quarkus-operator-sdk-integration-tests</artifactId>