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 21:56:39 UTC

[camel] 01/03: 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 camel-2.21.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 31acd884fa6670370393c7196bcb3fc3f425e396
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 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
lburgazzoli@apache.org.