You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2022/06/26 13:10:59 UTC
[camel] 02/02: CAMEL-18171: camel-kubernetes - Add secret/configmap property placeholder function. Use configurer to avoid reflection.
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
commit b209832bf4e3c4df45ed917c44d654b51489519b
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Jun 26 15:10:38 2022 +0200
CAMEL-18171: camel-kubernetes - Add secret/configmap property placeholder function. Use configurer to avoid reflection.
---
components/camel-kubernetes/pom.xml | 49 +++
.../client/ConfigFluentImplConfigurer.java | 370 +++++++++++++++++++++
.../io.fabric8.kubernetes.client.ConfigBuilder | 2 +
.../properties/BasePropertiesFunction.java | 28 +-
.../properties/KubernetesClientConfigureTest.java | 8 +-
5 files changed, 453 insertions(+), 4 deletions(-)
diff --git a/components/camel-kubernetes/pom.xml b/components/camel-kubernetes/pom.xml
index eeb56522e43..0bf54b52e92 100644
--- a/components/camel-kubernetes/pom.xml
+++ b/components/camel-kubernetes/pom.xml
@@ -147,4 +147,53 @@
<scope>test</scope>
</dependency>
</dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <!-- we need to generate additional configurer classes -->
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-package-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>generate-configurer</id>
+ <phase>process-classes</phase>
+ <goals>
+ <goal>generate-configurer</goal>
+ </goals>
+ <configuration>
+ <discoverClasses>false</discoverClasses>
+ <allowBuilderPattern>true</allowBuilderPattern>
+ <skipDeprecated>true</skipDeprecated>
+ <classes>io.fabric8.kubernetes.client.ConfigBuilder=io.fabric8.kubernetes.client.ConfigFluentImpl</classes>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>add-source</goal>
+ <goal>add-resource</goal>
+ </goals>
+ <configuration>
+ <sources>
+ <source>src/generated/java</source>
+ </sources>
+ <resources>
+ <resource>
+ <directory>src/generated/resources</directory>
+ </resource>
+ </resources>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
</project>
diff --git a/components/camel-kubernetes/src/generated/java/io/fabric8/kubernetes/client/ConfigFluentImplConfigurer.java b/components/camel-kubernetes/src/generated/java/io/fabric8/kubernetes/client/ConfigFluentImplConfigurer.java
new file mode 100644
index 00000000000..28da60102d1
--- /dev/null
+++ b/components/camel-kubernetes/src/generated/java/io/fabric8/kubernetes/client/ConfigFluentImplConfigurer.java
@@ -0,0 +1,370 @@
+/* Generated by camel build tools - do NOT edit this file! */
+package io.fabric8.kubernetes.client;
+
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spi.ExtendedPropertyConfigurerGetter;
+import org.apache.camel.spi.PropertyConfigurerGetter;
+import org.apache.camel.spi.ConfigurerStrategy;
+import org.apache.camel.spi.GeneratedPropertyConfigurer;
+import org.apache.camel.util.CaseInsensitiveMap;
+import io.fabric8.kubernetes.client.ConfigBuilder;
+
+/**
+ * Generated by camel build tools - do NOT edit this file!
+ */
+@SuppressWarnings("unchecked")
+public class ConfigFluentImplConfigurer extends org.apache.camel.support.component.PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
+
+ @Override
+ public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) {
+ io.fabric8.kubernetes.client.ConfigBuilder target = (io.fabric8.kubernetes.client.ConfigBuilder) obj;
+ switch (ignoreCase ? name.toLowerCase() : name) {
+ case "apiversion":
+ case "ApiVersion": target.withApiVersion(property(camelContext, java.lang.String.class, value)); return true;
+ case "authprovider":
+ case "AuthProvider": target.withAuthProvider(property(camelContext, io.fabric8.kubernetes.api.model.AuthProviderConfig.class, value)); return true;
+ case "cacertdata":
+ case "CaCertData": target.withCaCertData(property(camelContext, java.lang.String.class, value)); return true;
+ case "cacertfile":
+ case "CaCertFile": target.withCaCertFile(property(camelContext, java.lang.String.class, value)); return true;
+ case "clientcertdata":
+ case "ClientCertData": target.withClientCertData(property(camelContext, java.lang.String.class, value)); return true;
+ case "clientcertfile":
+ case "ClientCertFile": target.withClientCertFile(property(camelContext, java.lang.String.class, value)); return true;
+ case "clientkeyalgo":
+ case "ClientKeyAlgo": target.withClientKeyAlgo(property(camelContext, java.lang.String.class, value)); return true;
+ case "clientkeydata":
+ case "ClientKeyData": target.withClientKeyData(property(camelContext, java.lang.String.class, value)); return true;
+ case "clientkeyfile":
+ case "ClientKeyFile": target.withClientKeyFile(property(camelContext, java.lang.String.class, value)); return true;
+ case "clientkeypassphrase":
+ case "ClientKeyPassphrase": target.withClientKeyPassphrase(property(camelContext, java.lang.String.class, value)); return true;
+ case "connectiontimeout":
+ case "ConnectionTimeout": target.withConnectionTimeout(property(camelContext, int.class, value)); return true;
+ case "contexts":
+ case "Contexts": target.withContexts(property(camelContext, java.util.List.class, value)); return true;
+ case "currentcontext":
+ case "CurrentContext": target.withCurrentContext(property(camelContext, io.fabric8.kubernetes.api.model.NamedContext.class, value)); return true;
+ case "customheaders":
+ case "CustomHeaders": target.withCustomHeaders(property(camelContext, java.util.Map.class, value)); return true;
+ case "disablehostnameverification":
+ case "DisableHostnameVerification": target.withDisableHostnameVerification(property(camelContext, boolean.class, value)); return true;
+ case "errormessages":
+ case "ErrorMessages": target.withErrorMessages(property(camelContext, java.util.Map.class, value)); return true;
+ case "http2disable":
+ case "Http2Disable": target.withHttp2Disable(property(camelContext, boolean.class, value)); return true;
+ case "httpproxy":
+ case "HttpProxy": target.withHttpProxy(property(camelContext, java.lang.String.class, value)); return true;
+ case "httpsproxy":
+ case "HttpsProxy": target.withHttpsProxy(property(camelContext, java.lang.String.class, value)); return true;
+ case "impersonateextras":
+ case "ImpersonateExtras": target.withImpersonateExtras(property(camelContext, java.util.Map.class, value)); return true;
+ case "impersonategroup":
+ case "ImpersonateGroup": target.withImpersonateGroup(property(camelContext, java.lang.String.class, value)); return true;
+ case "impersonategroups":
+ case "ImpersonateGroups": target.withImpersonateGroups(property(camelContext, java.lang.String[].class, value)); return true;
+ case "impersonateusername":
+ case "ImpersonateUsername": target.withImpersonateUsername(property(camelContext, java.lang.String.class, value)); return true;
+ case "keystorefile":
+ case "KeyStoreFile": target.withKeyStoreFile(property(camelContext, java.lang.String.class, value)); return true;
+ case "keystorepassphrase":
+ case "KeyStorePassphrase": target.withKeyStorePassphrase(property(camelContext, java.lang.String.class, value)); return true;
+ case "logginginterval":
+ case "LoggingInterval": target.withLoggingInterval(property(camelContext, int.class, value)); return true;
+ case "masterurl":
+ case "MasterUrl": target.withMasterUrl(property(camelContext, java.lang.String.class, value)); return true;
+ case "maxconcurrentrequests":
+ case "MaxConcurrentRequests": target.withMaxConcurrentRequests(property(camelContext, int.class, value)); return true;
+ case "maxconcurrentrequestsperhost":
+ case "MaxConcurrentRequestsPerHost": target.withMaxConcurrentRequestsPerHost(property(camelContext, int.class, value)); return true;
+ case "namespace":
+ case "Namespace": target.withNamespace(property(camelContext, java.lang.String.class, value)); return true;
+ case "noproxy":
+ case "NoProxy": target.withNoProxy(property(camelContext, java.lang.String[].class, value)); return true;
+ case "oauthtoken":
+ case "OauthToken": target.withOauthToken(property(camelContext, java.lang.String.class, value)); return true;
+ case "oauthtokenprovider":
+ case "OauthTokenProvider": target.withOauthTokenProvider(property(camelContext, io.fabric8.kubernetes.client.OAuthTokenProvider.class, value)); return true;
+ case "password":
+ case "Password": target.withPassword(property(camelContext, java.lang.String.class, value)); return true;
+ case "proxypassword":
+ case "ProxyPassword": target.withProxyPassword(property(camelContext, java.lang.String.class, value)); return true;
+ case "proxyusername":
+ case "ProxyUsername": target.withProxyUsername(property(camelContext, java.lang.String.class, value)); return true;
+ case "requestretrybackoffinterval":
+ case "RequestRetryBackoffInterval": target.withRequestRetryBackoffInterval(property(camelContext, int.class, value)); return true;
+ case "requestretrybackofflimit":
+ case "RequestRetryBackoffLimit": target.withRequestRetryBackoffLimit(property(camelContext, int.class, value)); return true;
+ case "requesttimeout":
+ case "RequestTimeout": target.withRequestTimeout(property(camelContext, int.class, value)); return true;
+ case "rollingtimeout":
+ case "RollingTimeout": target.withRollingTimeout(property(camelContext, long.class, value)); return true;
+ case "scaletimeout":
+ case "ScaleTimeout": target.withScaleTimeout(property(camelContext, long.class, value)); return true;
+ case "tlsversions":
+ case "TlsVersions": target.withTlsVersions(property(camelContext, io.fabric8.kubernetes.client.http.TlsVersion[].class, value)); return true;
+ case "trustcerts":
+ case "TrustCerts": target.withTrustCerts(property(camelContext, boolean.class, value)); return true;
+ case "truststorefile":
+ case "TrustStoreFile": target.withTrustStoreFile(property(camelContext, java.lang.String.class, value)); return true;
+ case "truststorepassphrase":
+ case "TrustStorePassphrase": target.withTrustStorePassphrase(property(camelContext, java.lang.String.class, value)); return true;
+ case "uploadconnectiontimeout":
+ case "UploadConnectionTimeout": target.withUploadConnectionTimeout(property(camelContext, int.class, value)); return true;
+ case "uploadrequesttimeout":
+ case "UploadRequestTimeout": target.withUploadRequestTimeout(property(camelContext, int.class, value)); return true;
+ case "useragent":
+ case "UserAgent": target.withUserAgent(property(camelContext, java.lang.String.class, value)); return true;
+ case "username":
+ case "Username": target.withUsername(property(camelContext, java.lang.String.class, value)); return true;
+ case "watchreconnectinterval":
+ case "WatchReconnectInterval": target.withWatchReconnectInterval(property(camelContext, int.class, value)); return true;
+ case "watchreconnectlimit":
+ case "WatchReconnectLimit": target.withWatchReconnectLimit(property(camelContext, int.class, value)); return true;
+ case "websocketpinginterval":
+ case "WebsocketPingInterval": target.withWebsocketPingInterval(property(camelContext, long.class, value)); return true;
+ case "websockettimeout":
+ case "WebsocketTimeout": target.withWebsocketTimeout(property(camelContext, long.class, value)); return true;
+ default: return false;
+ }
+ }
+
+ @Override
+ public Class<?> getOptionType(String name, boolean ignoreCase) {
+ switch (ignoreCase ? name.toLowerCase() : name) {
+ case "apiversion":
+ case "ApiVersion": return java.lang.String.class;
+ case "authprovider":
+ case "AuthProvider": return io.fabric8.kubernetes.api.model.AuthProviderConfig.class;
+ case "cacertdata":
+ case "CaCertData": return java.lang.String.class;
+ case "cacertfile":
+ case "CaCertFile": return java.lang.String.class;
+ case "clientcertdata":
+ case "ClientCertData": return java.lang.String.class;
+ case "clientcertfile":
+ case "ClientCertFile": return java.lang.String.class;
+ case "clientkeyalgo":
+ case "ClientKeyAlgo": return java.lang.String.class;
+ case "clientkeydata":
+ case "ClientKeyData": return java.lang.String.class;
+ case "clientkeyfile":
+ case "ClientKeyFile": return java.lang.String.class;
+ case "clientkeypassphrase":
+ case "ClientKeyPassphrase": return java.lang.String.class;
+ case "connectiontimeout":
+ case "ConnectionTimeout": return int.class;
+ case "contexts":
+ case "Contexts": return java.util.List.class;
+ case "currentcontext":
+ case "CurrentContext": return io.fabric8.kubernetes.api.model.NamedContext.class;
+ case "customheaders":
+ case "CustomHeaders": return java.util.Map.class;
+ case "disablehostnameverification":
+ case "DisableHostnameVerification": return boolean.class;
+ case "errormessages":
+ case "ErrorMessages": return java.util.Map.class;
+ case "http2disable":
+ case "Http2Disable": return boolean.class;
+ case "httpproxy":
+ case "HttpProxy": return java.lang.String.class;
+ case "httpsproxy":
+ case "HttpsProxy": return java.lang.String.class;
+ case "impersonateextras":
+ case "ImpersonateExtras": return java.util.Map.class;
+ case "impersonategroup":
+ case "ImpersonateGroup": return java.lang.String.class;
+ case "impersonategroups":
+ case "ImpersonateGroups": return java.lang.String[].class;
+ case "impersonateusername":
+ case "ImpersonateUsername": return java.lang.String.class;
+ case "keystorefile":
+ case "KeyStoreFile": return java.lang.String.class;
+ case "keystorepassphrase":
+ case "KeyStorePassphrase": return java.lang.String.class;
+ case "logginginterval":
+ case "LoggingInterval": return int.class;
+ case "masterurl":
+ case "MasterUrl": return java.lang.String.class;
+ case "maxconcurrentrequests":
+ case "MaxConcurrentRequests": return int.class;
+ case "maxconcurrentrequestsperhost":
+ case "MaxConcurrentRequestsPerHost": return int.class;
+ case "namespace":
+ case "Namespace": return java.lang.String.class;
+ case "noproxy":
+ case "NoProxy": return java.lang.String[].class;
+ case "oauthtoken":
+ case "OauthToken": return java.lang.String.class;
+ case "oauthtokenprovider":
+ case "OauthTokenProvider": return io.fabric8.kubernetes.client.OAuthTokenProvider.class;
+ case "password":
+ case "Password": return java.lang.String.class;
+ case "proxypassword":
+ case "ProxyPassword": return java.lang.String.class;
+ case "proxyusername":
+ case "ProxyUsername": return java.lang.String.class;
+ case "requestretrybackoffinterval":
+ case "RequestRetryBackoffInterval": return int.class;
+ case "requestretrybackofflimit":
+ case "RequestRetryBackoffLimit": return int.class;
+ case "requesttimeout":
+ case "RequestTimeout": return int.class;
+ case "rollingtimeout":
+ case "RollingTimeout": return long.class;
+ case "scaletimeout":
+ case "ScaleTimeout": return long.class;
+ case "tlsversions":
+ case "TlsVersions": return io.fabric8.kubernetes.client.http.TlsVersion[].class;
+ case "trustcerts":
+ case "TrustCerts": return boolean.class;
+ case "truststorefile":
+ case "TrustStoreFile": return java.lang.String.class;
+ case "truststorepassphrase":
+ case "TrustStorePassphrase": return java.lang.String.class;
+ case "uploadconnectiontimeout":
+ case "UploadConnectionTimeout": return int.class;
+ case "uploadrequesttimeout":
+ case "UploadRequestTimeout": return int.class;
+ case "useragent":
+ case "UserAgent": return java.lang.String.class;
+ case "username":
+ case "Username": return java.lang.String.class;
+ case "watchreconnectinterval":
+ case "WatchReconnectInterval": return int.class;
+ case "watchreconnectlimit":
+ case "WatchReconnectLimit": return int.class;
+ case "websocketpinginterval":
+ case "WebsocketPingInterval": return long.class;
+ case "websockettimeout":
+ case "WebsocketTimeout": return long.class;
+ default: return null;
+ }
+ }
+
+ @Override
+ public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
+ io.fabric8.kubernetes.client.ConfigBuilder target = (io.fabric8.kubernetes.client.ConfigBuilder) obj;
+ switch (ignoreCase ? name.toLowerCase() : name) {
+ case "apiversion":
+ case "ApiVersion": return target.getApiVersion();
+ case "authprovider":
+ case "AuthProvider": return target.getAuthProvider();
+ case "cacertdata":
+ case "CaCertData": return target.getCaCertData();
+ case "cacertfile":
+ case "CaCertFile": return target.getCaCertFile();
+ case "clientcertdata":
+ case "ClientCertData": return target.getClientCertData();
+ case "clientcertfile":
+ case "ClientCertFile": return target.getClientCertFile();
+ case "clientkeyalgo":
+ case "ClientKeyAlgo": return target.getClientKeyAlgo();
+ case "clientkeydata":
+ case "ClientKeyData": return target.getClientKeyData();
+ case "clientkeyfile":
+ case "ClientKeyFile": return target.getClientKeyFile();
+ case "clientkeypassphrase":
+ case "ClientKeyPassphrase": return target.getClientKeyPassphrase();
+ case "connectiontimeout":
+ case "ConnectionTimeout": return target.getConnectionTimeout();
+ case "contexts":
+ case "Contexts": return target.getContexts();
+ case "currentcontext":
+ case "CurrentContext": return target.getCurrentContext();
+ case "customheaders":
+ case "CustomHeaders": return target.getCustomHeaders();
+ case "disablehostnameverification":
+ case "DisableHostnameVerification": return target.isDisableHostnameVerification();
+ case "errormessages":
+ case "ErrorMessages": return target.getErrorMessages();
+ case "http2disable":
+ case "Http2Disable": return target.isHttp2Disable();
+ case "httpproxy":
+ case "HttpProxy": return target.getHttpProxy();
+ case "httpsproxy":
+ case "HttpsProxy": return target.getHttpsProxy();
+ case "impersonateextras":
+ case "ImpersonateExtras": return target.getImpersonateExtras();
+ case "impersonategroup":
+ case "ImpersonateGroup": return target.getImpersonateGroup();
+ case "impersonategroups":
+ case "ImpersonateGroups": return target.getImpersonateGroups();
+ case "impersonateusername":
+ case "ImpersonateUsername": return target.getImpersonateUsername();
+ case "keystorefile":
+ case "KeyStoreFile": return target.getKeyStoreFile();
+ case "keystorepassphrase":
+ case "KeyStorePassphrase": return target.getKeyStorePassphrase();
+ case "logginginterval":
+ case "LoggingInterval": return target.getLoggingInterval();
+ case "masterurl":
+ case "MasterUrl": return target.getMasterUrl();
+ case "maxconcurrentrequests":
+ case "MaxConcurrentRequests": return target.getMaxConcurrentRequests();
+ case "maxconcurrentrequestsperhost":
+ case "MaxConcurrentRequestsPerHost": return target.getMaxConcurrentRequestsPerHost();
+ case "namespace":
+ case "Namespace": return target.getNamespace();
+ case "noproxy":
+ case "NoProxy": return target.getNoProxy();
+ case "oauthtoken":
+ case "OauthToken": return target.getOauthToken();
+ case "oauthtokenprovider":
+ case "OauthTokenProvider": return target.getOauthTokenProvider();
+ case "password":
+ case "Password": return target.getPassword();
+ case "proxypassword":
+ case "ProxyPassword": return target.getProxyPassword();
+ case "proxyusername":
+ case "ProxyUsername": return target.getProxyUsername();
+ case "requestretrybackoffinterval":
+ case "RequestRetryBackoffInterval": return target.getRequestRetryBackoffInterval();
+ case "requestretrybackofflimit":
+ case "RequestRetryBackoffLimit": return target.getRequestRetryBackoffLimit();
+ case "requesttimeout":
+ case "RequestTimeout": return target.getRequestTimeout();
+ case "rollingtimeout":
+ case "RollingTimeout": return target.getRollingTimeout();
+ case "scaletimeout":
+ case "ScaleTimeout": return target.getScaleTimeout();
+ case "tlsversions":
+ case "TlsVersions": return target.getTlsVersions();
+ case "trustcerts":
+ case "TrustCerts": return target.isTrustCerts();
+ case "truststorefile":
+ case "TrustStoreFile": return target.getTrustStoreFile();
+ case "truststorepassphrase":
+ case "TrustStorePassphrase": return target.getTrustStorePassphrase();
+ case "uploadconnectiontimeout":
+ case "UploadConnectionTimeout": return target.getUploadConnectionTimeout();
+ case "uploadrequesttimeout":
+ case "UploadRequestTimeout": return target.getUploadRequestTimeout();
+ case "useragent":
+ case "UserAgent": return target.getUserAgent();
+ case "username":
+ case "Username": return target.getUsername();
+ case "watchreconnectinterval":
+ case "WatchReconnectInterval": return target.getWatchReconnectInterval();
+ case "watchreconnectlimit":
+ case "WatchReconnectLimit": return target.getWatchReconnectLimit();
+ case "websocketpinginterval":
+ case "WebsocketPingInterval": return target.getWebsocketPingInterval();
+ case "websockettimeout":
+ case "WebsocketTimeout": return target.getWebsocketTimeout();
+ default: return null;
+ }
+ }
+
+ @Override
+ public Object getCollectionValueType(Object target, String name, boolean ignoreCase) {
+ switch (ignoreCase ? name.toLowerCase() : name) {
+ case "contexts":
+ case "Contexts": return io.fabric8.kubernetes.api.model.NamedContext.class;
+ default: return null;
+ }
+ }
+}
+
diff --git a/components/camel-kubernetes/src/generated/resources/META-INF/services/org/apache/camel/configurer/io.fabric8.kubernetes.client.ConfigBuilder b/components/camel-kubernetes/src/generated/resources/META-INF/services/org/apache/camel/configurer/io.fabric8.kubernetes.client.ConfigBuilder
new file mode 100644
index 00000000000..4126dfff367
--- /dev/null
+++ b/components/camel-kubernetes/src/generated/resources/META-INF/services/org/apache/camel/configurer/io.fabric8.kubernetes.client.ConfigBuilder
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=io.fabric8.kubernetes.client.ConfigFluentImplConfigurer
diff --git a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/properties/BasePropertiesFunction.java b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/properties/BasePropertiesFunction.java
index 9b670086ec6..227ae01ed49 100644
--- a/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/properties/BasePropertiesFunction.java
+++ b/components/camel-kubernetes/src/main/java/org/apache/camel/component/kubernetes/properties/BasePropertiesFunction.java
@@ -29,8 +29,10 @@ import io.fabric8.kubernetes.client.DefaultKubernetesClient;
import io.fabric8.kubernetes.client.KubernetesClient;
import org.apache.camel.CamelContext;
import org.apache.camel.CamelContextAware;
+import org.apache.camel.ExtendedCamelContext;
import org.apache.camel.spi.PropertiesComponent;
import org.apache.camel.spi.PropertiesFunction;
+import org.apache.camel.spi.PropertyConfigurer;
import org.apache.camel.support.CamelContextHelper;
import org.apache.camel.support.PropertyBindingSupport;
import org.apache.camel.support.service.ServiceSupport;
@@ -87,15 +89,30 @@ abstract class BasePropertiesFunction extends ServiceSupport implements Properti
k -> k.replace("camel.kubernetes-client.", "").replace("camel.kubernetesClient.", ""));
if (!properties.isEmpty()) {
ConfigBuilder config = new ConfigBuilder();
+
+ PropertyConfigurer configurer = camelContext.adapt(ExtendedCamelContext.class)
+ .getConfigurerResolver().resolvePropertyConfigurer(ConfigBuilder.class.getName(), camelContext);
+
+ // use copy to keep track of which options was configureed or not
+ OrderedLocationProperties copy = new OrderedLocationProperties();
+ copy.putAll(properties);
+
PropertyBindingSupport.build()
- .withProperties((Map) properties)
+ .withProperties((Map) copy)
.withFluentBuilder(true)
.withIgnoreCase(true)
- .withReflection(true)
+ .withReflection(false)
+ .withConfigurer(configurer)
.withTarget(config)
.withCamelContext(camelContext)
- .withRemoveParameters(false)
+ .withRemoveParameters(true)
.bind();
+ if (!copy.isEmpty()) {
+ // some options were not possible to configure
+ for (var e : copy.entrySet()) {
+ properties.remove(e.getKey());
+ }
+ }
client = new DefaultKubernetesClient(config.build());
LOG.info("Auto-configuration KubernetesClient summary");
for (var entry : properties.entrySet()) {
@@ -108,6 +125,11 @@ abstract class BasePropertiesFunction extends ServiceSupport implements Properti
LOG.info(" {} {}={}", loc, k, v);
}
}
+ if (!copy.isEmpty()) {
+ for (var e : copy.entrySet()) {
+ LOG.warn("Property not auto-configured: camel.kubernetes-client.{}={}", e.getKey(), e.getValue());
+ };
+ }
} else {
// create a default client to use
client = new DefaultKubernetesClient();
diff --git a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/KubernetesClientConfigureTest.java b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/KubernetesClientConfigureTest.java
index 664a3d14c11..0c6efad34af 100644
--- a/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/KubernetesClientConfigureTest.java
+++ b/components/camel-kubernetes/src/test/java/org/apache/camel/component/kubernetes/properties/KubernetesClientConfigureTest.java
@@ -20,7 +20,9 @@ import java.util.Map;
import io.fabric8.kubernetes.client.ConfigBuilder;
import org.apache.camel.CamelContext;
+import org.apache.camel.ExtendedCamelContext;
import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.spi.PropertyConfigurer;
import org.apache.camel.support.PropertyBindingSupport;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -33,11 +35,15 @@ public class KubernetesClientConfigureTest {
context.start();
ConfigBuilder config = new ConfigBuilder();
+
+ PropertyConfigurer configurer = context.adapt(ExtendedCamelContext.class).getConfigurerResolver().resolvePropertyConfigurer(ConfigBuilder.class.getName(), context);
+ Assertions.assertNotNull(configurer, "Cannot find generated configurer");
+
PropertyBindingSupport.build()
.withProperties(Map.of("masterUrl", "http://localhost:1234"))
.withFluentBuilder(true)
.withIgnoreCase(true)
- .withReflection(true)
+ .withConfigurer(configurer)
.withTarget(config)
.withCamelContext(context)
.withRemoveParameters(false)