This is an automated email from the ASF dual-hosted git repository. lburgazzoli pushed a commit to branch camel-2.21.x in repository https://gitbox.apache.org/repos/asf/camel.git
commit 31acd884fa6670370393c7196bcb3fc3f425e396 Author: lburgazzoli <lburgazz...@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 1f0f6c4..aef0bfb 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 lburgazz...@apache.org.