You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by lb...@apache.org on 2018/06/08 16:14:13 UTC
[camel] branch master updated: CAMEL-12560: camel-kubernetes:
serviceCall EIP configuration is not read from application.properties
This is an automated email from the ASF dual-hosted git repository.
lburgazzoli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push:
new caa6db3 CAMEL-12560: camel-kubernetes: serviceCall EIP configuration is not read from application.properties
caa6db3 is described below
commit caa6db3349aee3566b69216ea2c063e3180ee7b2
Author: lburgazzoli <lb...@gmail.com>
AuthorDate: Fri Jun 8 18:12:44 2018 +0200
CAMEL-12560: camel-kubernetes: serviceCall EIP configuration is not read from application.properties
---
...ubernetesServiceDiscoveryAutoConfiguration.java | 105 +++++++++++++++++++++
.../src/main/resources/META-INF/spring.factories | 1 +
...netesServiceDiscoveryAutoConfigurationTest.java | 66 +++++++++++++
...ernetesClusterServiceAutoConfigurationTest.java | 1 +
.../src/test/resources/logback.xml | 42 +++++++++
5 files changed, 215 insertions(+)
diff --git a/platforms/spring-boot/components-starter/camel-kubernetes-starter/src/main/java/org/apache/camel/component/kubernetes/springboot/cloud/KubernetesServiceDiscoveryAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-kubernetes-starter/src/main/java/org/apache/camel/component/kubernetes/springboot/cloud/KubernetesServiceDiscoveryAutoConfiguration.java
new file mode 100644
index 0000000..86f8bfa
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-kubernetes-starter/src/main/java/org/apache/camel/component/kubernetes/springboot/cloud/KubernetesServiceDiscoveryAutoConfiguration.java
@@ -0,0 +1,105 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.kubernetes.springboot.cloud;
+
+import java.util.HashMap;
+import java.util.Map;
+import javax.annotation.PostConstruct;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.cloud.ServiceDiscovery;
+import org.apache.camel.component.kubernetes.cloud.KubernetesServiceDiscoveryFactory;
+import org.apache.camel.model.cloud.springboot.KubernetesServiceCallServiceDiscoveryConfigurationCommon;
+import org.apache.camel.model.cloud.springboot.KubernetesServiceCallServiceDiscoveryConfigurationProperties;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.util.GroupCondition;
+import org.apache.camel.util.IntrospectionSupport;
+import org.springframework.beans.factory.BeanCreationException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.config.ConfigurableBeanFactory;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Conditional;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Lazy;
+
+@Configuration
+@ConditionalOnBean({ CamelAutoConfiguration.class, CamelContext.class })
+@Conditional(KubernetesServiceDiscoveryAutoConfiguration.Condition.class)
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@EnableConfigurationProperties(KubernetesServiceCallServiceDiscoveryConfigurationProperties.class)
+public class KubernetesServiceDiscoveryAutoConfiguration {
+ @Autowired
+ private CamelContext camelContext;
+ @Autowired
+ private KubernetesServiceCallServiceDiscoveryConfigurationProperties configuration;
+ @Autowired
+ private ConfigurableBeanFactory beanFactory;
+
+ @Lazy
+ @Bean(name = "kubernetes-service-discovery")
+ public ServiceDiscovery configureServiceDiscoveryFactory() throws Exception {
+ KubernetesServiceDiscoveryFactory factory = new KubernetesServiceDiscoveryFactory();
+
+ IntrospectionSupport.setProperties(
+ camelContext,
+ camelContext.getTypeConverter(),
+ factory,
+ IntrospectionSupport.getNonNullProperties(configuration));
+
+ return factory.newInstance(camelContext);
+ }
+
+ @PostConstruct
+ public void postConstruct() {
+ if (beanFactory != null) {
+ Map<String, Object> parameters = new HashMap<>();
+
+ for (Map.Entry<String, KubernetesServiceCallServiceDiscoveryConfigurationCommon> entry : configuration.getConfigurations().entrySet()) {
+ // clean up params
+ parameters.clear();
+
+ // The instance factory
+ KubernetesServiceDiscoveryFactory factory = new KubernetesServiceDiscoveryFactory();
+
+ try {
+ IntrospectionSupport.getProperties(entry.getValue(), parameters, null, false);
+ IntrospectionSupport.setProperties(camelContext, camelContext.getTypeConverter(), factory, parameters);
+
+ beanFactory.registerSingleton(entry.getKey(), factory.newInstance(camelContext));
+ } catch (Exception e) {
+ throw new BeanCreationException(entry.getKey(), e.getMessage(), e);
+ }
+ }
+ }
+ }
+
+ // *******************************
+ // Condition
+ // *******************************
+
+ public static class Condition extends GroupCondition {
+ public Condition() {
+ super(
+ "camel.cloud.kubernetes",
+ "camel.cloud.kubernetes.service-discovery"
+ );
+ }
+ }
+}
diff --git a/platforms/spring-boot/components-starter/camel-kubernetes-starter/src/main/resources/META-INF/spring.factories b/platforms/spring-boot/components-starter/camel-kubernetes-starter/src/main/resources/META-INF/spring.factories
index 276298c..2cd83c3 100644
--- a/platforms/spring-boot/components-starter/camel-kubernetes-starter/src/main/resources/META-INF/spring.factories
+++ b/platforms/spring-boot/components-starter/camel-kubernetes-starter/src/main/resources/META-INF/spring.factories
@@ -23,6 +23,7 @@ org.apache.camel.component.kubernetes.nodes.springboot.KubernetesNodesComponentA
org.apache.camel.component.kubernetes.pods.springboot.KubernetesPodsComponentAutoConfiguration,\
org.apache.camel.component.kubernetes.secrets.springboot.KubernetesSecretsComponentAutoConfiguration,\
org.apache.camel.component.kubernetes.springboot.KubernetesComponentAutoConfiguration,\
+org.apache.camel.component.kubernetes.springboot.cloud.KubernetesServiceDiscoveryAutoConfiguration,\
org.apache.camel.component.kubernetes.springboot.cluster.KubernetesClusterServiceAutoConfiguration,\
org.apache.camel.component.kubernetes.replication_controllers.springboot.KubernetesReplicationControllersComponentAutoConfiguration,\
org.apache.camel.component.kubernetes.persistent_volumes.springboot.KubernetesPersistentVolumesComponentAutoConfiguration,\
diff --git a/platforms/spring-boot/components-starter/camel-kubernetes-starter/src/test/java/org/apache/camel/component/kubernetes/springboot/test/cloud/KubernetesServiceDiscoveryAutoConfigurationTest.java b/platforms/spring-boot/components-starter/camel-kubernetes-starter/src/test/java/org/apache/camel/component/kubernetes/springboot/test/cloud/KubernetesServiceDiscoveryAutoConfigurationTest.java
new file mode 100644
index 0000000..5c9bd3f
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-kubernetes-starter/src/test/java/org/apache/camel/component/kubernetes/springboot/test/cloud/KubernetesServiceDiscoveryAutoConfigurationTest.java
@@ -0,0 +1,66 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.kubernetes.springboot.test.cloud;
+
+import org.apache.camel.cloud.ServiceDiscovery;
+import org.apache.camel.model.cloud.springboot.KubernetesServiceCallServiceDiscoveryConfigurationProperties;
+import org.junit.Test;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+import org.springframework.context.annotation.Configuration;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class KubernetesServiceDiscoveryAutoConfigurationTest {
+
+ @Test
+ public void testServiceDiscoveryDisabled() {
+ new ApplicationContextRunner()
+ .withUserConfiguration(TestConfiguration.class)
+ .withPropertyValues(
+ "spring.main.banner-mode=off",
+ "camel.cloud.kubernetes.service-discovery.enabled=false")
+ .run(
+ context -> {
+ assertThat(context).doesNotHaveBean(KubernetesServiceCallServiceDiscoveryConfigurationProperties.class);
+ assertThat(context).getBeans(ServiceDiscovery.class).doesNotContainKeys("kubernetes-service-discovery");
+ }
+ );
+ }
+
+
+ @Test
+ public void testServiceDiscoveryEnabled() {
+ new ApplicationContextRunner()
+ .withUserConfiguration(TestConfiguration.class)
+ .withPropertyValues(
+ "spring.main.banner-mode=off",
+ "camel.cloud.kubernetes.service-discovery.enabled=true")
+ .run(
+ context -> {
+ assertThat(context).hasSingleBean(KubernetesServiceCallServiceDiscoveryConfigurationProperties.class);
+ assertThat(context).getBeans(ServiceDiscovery.class).containsKeys("kubernetes-service-discovery");
+ }
+ );
+ }
+
+
+ @EnableAutoConfiguration
+ @Configuration
+ public static class TestConfiguration {
+ }
+}
diff --git a/platforms/spring-boot/components-starter/camel-kubernetes-starter/src/test/java/org/apache/camel/component/kubernetes/springboot/test/cluster/KubernetesClusterServiceAutoConfigurationTest.java b/platforms/spring-boot/components-starter/camel-kubernetes-starter/src/test/java/org/apache/camel/component/kubernetes/springboot/test/cluster/KubernetesClusterServiceAutoConfigurationTest.java
index 1bcc929..b6f8485 100644
--- a/platforms/spring-boot/components-starter/camel-kubernetes-starter/src/test/java/org/apache/camel/component/kubernetes/springboot/test/cluster/KubernetesClusterServiceAutoConfigurationTest.java
+++ b/platforms/spring-boot/components-starter/camel-kubernetes-starter/src/test/java/org/apache/camel/component/kubernetes/springboot/test/cluster/KubernetesClusterServiceAutoConfigurationTest.java
@@ -38,6 +38,7 @@ import static org.junit.Assert.assertNotNull;
@DirtiesContext
@ContextConfiguration(classes = KubernetesClusterServiceAutoConfiguration.class)
@SpringBootTest(properties = {
+ "spring.main.banner-mode=off",
"camel.component.kubernetes.cluster.service.enabled=true",
"camel.component.kubernetes.cluster.service.id=myid1",
"camel.component.kubernetes.cluster.service.master-url=http://myurl:9000",
diff --git a/platforms/spring-boot/components-starter/camel-kubernetes-starter/src/test/resources/logback.xml b/platforms/spring-boot/components-starter/camel-kubernetes-starter/src/test/resources/logback.xml
new file mode 100644
index 0000000..29ad9de
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-kubernetes-starter/src/test/resources/logback.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+<configuration>
+
+ <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+ <!-- encoders are assigned the type
+ ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
+ <encoder>
+ <pattern>%d{HH:mm:ss.SSS} [%-15.15thread] %-5level %-30.30logger - %msg%n</pattern>
+ </encoder>
+ </appender>
+
+ <appender name="FILE" class="ch.qos.logback.core.FileAppender">
+ <encoder>
+ <pattern>%d{HH:mm:ss.SSS} [%-15.15thread] %-5level %-30.30logger - %msg%n</pattern>
+ </encoder>
+ <file>target/camel-kubernetes-starter-test.log</file>
+ </appender>
+
+ <root level="INFO">
+ <!--<appender-ref ref="STDOUT"/>-->
+ <appender-ref ref="FILE"/>
+ </root>
+
+</configuration>
\ No newline at end of file
--
To stop receiving notification emails like this one, please contact
lburgazzoli@apache.org.