diff --git a/camel-k-master/deployment/pom.xml b/camel-k-master/deployment/pom.xml index e7334e815..6fc638086 100644 --- a/camel-k-master/deployment/pom.xml +++ b/camel-k-master/deployment/pom.xml @@ -44,6 +44,12 @@ org.apache.camel.quarkus camel-quarkus-kubernetes-deployment + + org.apache.camel.quarkus + camel-quarkus-kubernetes-cluster-service-deployment + + + diff --git a/camel-k-master/impl/pom.xml b/camel-k-master/impl/pom.xml index 265fbca66..e01edb041 100644 --- a/camel-k-master/impl/pom.xml +++ b/camel-k-master/impl/pom.xml @@ -43,6 +43,10 @@ org.apache.camel camel-kubernetes + + org.apache.camel.quarkus + camel-quarkus-kubernetes-cluster-service + org.apache.camel.k camel-k-core-support diff --git a/camel-k-master/impl/src/main/java/org/apache/camel/k/master/MasterContextCustomizer.java b/camel-k-master/impl/src/main/java/org/apache/camel/k/master/MasterContextCustomizer.java index cc0a887aa..90bc8d07f 100644 --- a/camel-k-master/impl/src/main/java/org/apache/camel/k/master/MasterContextCustomizer.java +++ b/camel-k-master/impl/src/main/java/org/apache/camel/k/master/MasterContextCustomizer.java @@ -17,6 +17,7 @@ package org.apache.camel.k.master; import java.util.Collections; +import java.util.Optional; import org.apache.camel.CamelContext; import org.apache.camel.RuntimeCamelException; @@ -40,7 +41,22 @@ public class MasterContextCustomizer implements ContextCustomizer { @Override public void apply(CamelContext camelContext) { try { + boolean existsService = false; KubernetesClusterService clusterService = new KubernetesClusterService(); + + if (this.rebalancing == null || this.rebalancing) { + RebalancingCamelClusterService existingRebalancingService = camelContext.hasService(RebalancingCamelClusterService.class); + if (existingRebalancingService != null){ + existsService = true; + clusterService = (KubernetesClusterService)existingRebalancingService.getDelegate(); + } + } else { + if (camelContext.hasService(KubernetesClusterService.class) != null) { + clusterService = camelContext.hasService(KubernetesClusterService.class); + existsService = true; + } + } + String resourceName = this.kubernetesResourceName; if (ObjectHelper.isEmpty(resourceName)) { resourceName = this.configMapName; @@ -55,11 +71,13 @@ public void apply(CamelContext camelContext) { clusterService.setLeaseResourceType(this.leaseResourceType); } - if (this.rebalancing == null || this.rebalancing) { - RebalancingCamelClusterService rebalancingService = new RebalancingCamelClusterService(clusterService, clusterService.getRenewDeadlineMillis()); - camelContext.addService(rebalancingService); - } else { - camelContext.addService(clusterService); + if (!existsService) { + if (this.rebalancing == null || this.rebalancing) { + RebalancingCamelClusterService rebalancingService = new RebalancingCamelClusterService(clusterService, clusterService.getRenewDeadlineMillis()); + camelContext.addService(rebalancingService); + } else { + camelContext.addService(clusterService); + } } } catch (Exception ex) { throw new RuntimeCamelException(ex); diff --git a/camel-k-master/runtime/pom.xml b/camel-k-master/runtime/pom.xml index bf1ce7dfc..ac39a6d8a 100644 --- a/camel-k-master/runtime/pom.xml +++ b/camel-k-master/runtime/pom.xml @@ -44,6 +44,10 @@ org.apache.camel.quarkus camel-quarkus-kubernetes + + org.apache.camel.quarkus + camel-quarkus-kubernetes-cluster-service + diff --git a/support/camel-k-maven-plugin/src/it/generate-catalog/verify.groovy b/support/camel-k-maven-plugin/src/it/generate-catalog/verify.groovy index 7727ac7b5..1de6480be 100644 --- a/support/camel-k-maven-plugin/src/it/generate-catalog/verify.groovy +++ b/support/camel-k-maven-plugin/src/it/generate-catalog/verify.groovy @@ -62,8 +62,6 @@ new File(basedir, "catalog.yaml").withReader { assert catalog.spec.runtime.capabilities['master'].runtimeProperties[1].value == '${camel.k.master.resourceName}' assert catalog.spec.runtime.capabilities['master'].runtimeProperties[2].key == 'quarkus.camel.cluster.kubernetes.resource-type' assert catalog.spec.runtime.capabilities['master'].runtimeProperties[2].value == '${camel.k.master.resourceType}' - assert catalog.spec.runtime.capabilities['master'].buildTimeProperties[0].key == 'quarkus.camel.cluster.kubernetes.enabled' - assert catalog.spec.runtime.capabilities['master'].buildTimeProperties[0].value == '${camel.k.master.enabled}' // Telemetry properties assert catalog.spec.runtime.capabilities['telemetry'].runtimeProperties[0].key == 'quarkus.opentelemetry.tracer.exporter.otlp.endpoint' assert catalog.spec.runtime.capabilities['telemetry'].runtimeProperties[0].value == '${camel.k.telemetry.endpoint}' diff --git a/support/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateCatalogMojo.java b/support/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateCatalogMojo.java index feeaa685a..6f8c9a617 100644 --- a/support/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateCatalogMojo.java +++ b/support/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateCatalogMojo.java @@ -506,9 +506,7 @@ private void addCapabilities(RuntimeSpec.Builder runtimeSpec, CamelCatalogSpec.B properties.add(Property.from("quarkus.camel.cluster.kubernetes.resource-name", "${camel.k.master.resourceName}")); properties.add(Property.from("quarkus.camel.cluster.kubernetes.resource-type", "${camel.k.master.resourceType}")); properties.add(Property.from("quarkus.camel.cluster.kubernetes.labels.\"${camel.k.master.labelKey}\"", "${camel.k.master.labelValue}")); - List buildTimeProps = new ArrayList<>(); - buildTimeProps.add(Property.from("quarkus.camel.cluster.kubernetes.enabled", "${camel.k.master.enabled}")); - addCapability(runtimeSpec, catalogSpec, "master", artifacts, properties, buildTimeProps, new ArrayList<>(), true); + addCapability(runtimeSpec, catalogSpec, "master", artifacts, properties, new ArrayList<>(), new ArrayList<>(), true); artifacts.clear(); artifacts.add(Artifact.from("org.apache.camel.quarkus", "camel-quarkus-hashicorp-vault"));