From 46fa2110da7c7ce77a7f6386145bf5d940eb74e0 Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Wed, 24 Feb 2016 13:48:14 -0700 Subject: [PATCH] Use default instanceid for sidecar fixes gh-847 --- spring-cloud-netflix-eureka-client/pom.xml | 2 ++ .../netflix/sidecar/SidecarConfiguration.java | 17 ++++++++++++--- .../sidecar/SidecarApplicationTests.java | 21 ++++++++++++++----- .../src/test/resources/application.yml | 1 + 4 files changed, 33 insertions(+), 8 deletions(-) diff --git a/spring-cloud-netflix-eureka-client/pom.xml b/spring-cloud-netflix-eureka-client/pom.xml index 7e28f957..fc917453 100644 --- a/spring-cloud-netflix-eureka-client/pom.xml +++ b/spring-cloud-netflix-eureka-client/pom.xml @@ -13,6 +13,8 @@ Spring Cloud Netflix Eureka Client Spring Cloud Netflix Eureka Client + + false ${basedir}/.. diff --git a/spring-cloud-netflix-sidecar/src/main/java/org/springframework/cloud/netflix/sidecar/SidecarConfiguration.java b/spring-cloud-netflix-sidecar/src/main/java/org/springframework/cloud/netflix/sidecar/SidecarConfiguration.java index cf274e2d..a9c278e3 100644 --- a/spring-cloud-netflix-sidecar/src/main/java/org/springframework/cloud/netflix/sidecar/SidecarConfiguration.java +++ b/spring-cloud-netflix-sidecar/src/main/java/org/springframework/cloud/netflix/sidecar/SidecarConfiguration.java @@ -26,10 +26,14 @@ import org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean; import org.springframework.cloud.util.InetUtils; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.ConfigurableEnvironment; +import org.springframework.util.StringUtils; import com.netflix.appinfo.HealthCheckHandler; import com.netflix.discovery.EurekaClientConfig; +import static org.springframework.cloud.util.IdUtils.getDefaultInstanceId; + /** * @author Spencer Gibb */ @@ -57,17 +61,24 @@ public class SidecarConfiguration { @Autowired private InetUtils inetUtils; - @Value("${server.port:${SERVER_PORT:${PORT:8080}}}") - private int serverPort = 8080; - @Value("${management.port:${MANAGEMENT_PORT:${PORT:8080}}}") private int managementPort = 8080; + @Value("${eureka.instance.hostname:${EUREKA_INSTANCE_HOSTNAME:}}") + String hostname; + + @Autowired + ConfigurableEnvironment env; + @Bean public EurekaInstanceConfigBean eurekaInstanceConfigBean() { EurekaInstanceConfigBean config = new EurekaInstanceConfigBean(inetUtils); int port = this.sidecarProperties.getPort(); config.setNonSecurePort(port); + config.setInstanceId(getDefaultInstanceId(this.env)); + if (StringUtils.hasText(this.hostname)) { + config.setHostname(this.hostname); + } String scheme = config.getSecurePortEnabled() ? "https" : "http"; config.setStatusPageUrl(scheme + "://" + config.getHostname() + ":" + this.managementPort + config.getStatusPageUrlPath()); diff --git a/spring-cloud-netflix-sidecar/src/test/java/org/springframework/cloud/netflix/sidecar/SidecarApplicationTests.java b/spring-cloud-netflix-sidecar/src/test/java/org/springframework/cloud/netflix/sidecar/SidecarApplicationTests.java index 5a3ff2d6..fca2240f 100644 --- a/spring-cloud-netflix-sidecar/src/test/java/org/springframework/cloud/netflix/sidecar/SidecarApplicationTests.java +++ b/spring-cloud-netflix-sidecar/src/test/java/org/springframework/cloud/netflix/sidecar/SidecarApplicationTests.java @@ -18,19 +18,30 @@ package org.springframework.cloud.netflix.sidecar; import org.junit.Test; import org.junit.runner.RunWith; -import org.springframework.boot.test.IntegrationTest; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.boot.test.WebIntegrationTest; +import org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.web.WebAppConfiguration; + +import static org.hamcrest.Matchers.equalTo; +import static org.junit.Assert.assertThat; @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = SidecarApplication.class) -@IntegrationTest("server.port=0") -@WebAppConfiguration +@WebIntegrationTest(randomPort = true, value = {"spring.application.name=mytest", "spring.cloud.client.hostname=mhhost", "spring.application.instance_id=1", "eureka.instance.hostname=mhhost", "sidecar.port=7000"}) public class SidecarApplicationTests { + @Autowired + EurekaInstanceConfigBean config; + @Test - public void contextLoads() { + public void testEurekaConfigBean() { + assertThat(this.config.getAppname(), equalTo("mytest")); + assertThat(this.config.getHostname(), equalTo("mhhost")); + assertThat(this.config.getInstanceId(), equalTo("mhhost:mytest:1")); + assertThat(this.config.getNonSecurePort(), equalTo(7000)); + System.out.println(); } } diff --git a/spring-cloud-netflix-sidecar/src/test/resources/application.yml b/spring-cloud-netflix-sidecar/src/test/resources/application.yml index d6dac53b..c58d365c 100644 --- a/spring-cloud-netflix-sidecar/src/test/resources/application.yml +++ b/spring-cloud-netflix-sidecar/src/test/resources/application.yml @@ -11,6 +11,7 @@ sidecar: eureka: instance: app-group-name: mysidecargroup + hostname: mysidecarhost client: serviceUrl: defaultZone: http://user:password@localhost:8761/eureka/