Update SNAPSHOT to 2.0.4

This commit is contained in:
buildmaster
2021-09-22 09:43:33 +00:00
parent 6f9afa83bd
commit 1670846c7d
53 changed files with 234 additions and 60 deletions

View File

@@ -272,6 +272,9 @@ spring:
In the preceding example, if `spring.cloud.kubernetes.config.namespace` had not been set,
the `ConfigMap` named `c1` would be looked up in the namespace that the application runs.
See <<namespace-resolution,Namespace resolution>> to get a better understanding of how the namespace
of the application is resolved.
Any matching `ConfigMap` that is found is processed as follows:
@@ -494,6 +497,135 @@ spec:
----
====
You could run into a situation where there are multiple configs maps that have the same property names. For example:
====
[source,yaml]
----
kind: ConfigMap
apiVersion: v1
metadata:
name: config-map-one
data:
application.yml: |-
greeting:
message: Say Hello from one
----
====
and
====
[source,yaml]
----
kind: ConfigMap
apiVersion: v1
metadata:
name: config-map-two
data:
application.yml: |-
greeting:
message: Say Hello from two
----
====
Depending on the order in which you place these in `bootstrap.yaml|properties`, you might end up with an un-expected result (the last config map wins). For example:
====
[source,yaml]
----
spring:
application:
name: cloud-k8s-app
cloud:
kubernetes:
config:
namespace: default-namespace
sources:
- name: config-map-two
- name: config-map-one
----
====
will result in property `greetings.message` being `Say Hello from one`.
There is a way to change this default configuration by specifying `useNameAsPrefix`. For example:
====
[source,yaml]
----
spring:
application:
name: with-prefix
cloud:
kubernetes:
config:
useNameAsPrefix: true
namespace: default-namespace
sources:
- name: config-map-one
useNameAsPrefix: false
- name: config-map-two
----
====
Such a configuration will result in two properties being generated:
- `greetings.message` equal to `Say Hello from one`.
- `config-map-two.greetings.message` equal to `Say Hello from two`
Notice that `spring.cloud.kubernetes.config.useNameAsPrefix` has a _lower_ priority than `spring.cloud.kubernetes.config.sources.useNameAsPrefix`.
This allows you to set a "default" strategy for all sources, at the same time allowing to override only a few.
If using the config map name is not an option, you can specify a different strategy, called : `explicitPrefix`. Since this is an _explicit_ prefix that
you select, it can only be supplied to the `sources` level. At the same time it has a higher priority than `useNameASPrefix`. Let's suppose we have a third config map with these entries:
====
[source,yaml]
----
kind: ConfigMap
apiVersion: v1
metadata:
name: config-map-three
data:
application.yml: |-
greeting:
message: Say Hello from three
----
====
A configuration like the one below:
====
[source,yaml]
----
spring:
application:
name: with-prefix
cloud:
kubernetes:
config:
useNameAsPrefix: true
namespace: default-namespace
sources:
- name: config-map-one
useNameAsPrefix: false
- name: config-map-two
explicitPrefix: two
- name: config-map-three
----
====
will result in three properties being generated:
- `greetings.message` equal to `Say Hello from one`.
- `two.greetings.message` equal to `Say Hello from two`.
- `config-map-three.greetings.message` equal to `Say Hello from three`.
NOTE: You should check the security configuration section. To access config maps from inside a pod you need to have the correct
Kubernetes service accounts, roles and role bindings.
@@ -659,7 +791,7 @@ spring:
sources:
# Spring Cloud Kubernetes looks up a Secret named s1 in namespace default-namespace
- name: s1
# Spring Cloud Kubernetes looks up a Secret named default-name in whatever namespace n2
# Spring Cloud Kubernetes looks up a Secret named default-name in namespace n2
- namespace: n2
# Spring Cloud Kubernetes looks up a Secret named s3 in namespace n3
- namespace: n3
@@ -669,6 +801,8 @@ spring:
In the preceding example, if `spring.cloud.kubernetes.secrets.namespace` had not been set,
the `Secret` named `s1` would be looked up in the namespace that the application runs.
See <<namespace-resolution,namespace-resolution>> to get a better understanding of how the namespace
of the application is resolved.
.Properties:
@@ -694,6 +828,44 @@ https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-Configuration-Bi
You can find an example of an application that uses secrets (though it has not been updated to use the new `spring-cloud-kubernetes` project) at
https://github.com/fabric8-quickstarts/spring-boot-camel-config[spring-boot-camel-config]
[[namespace-resolution]]
=== Namespace resolution
Finding an application namespace happens on a best-effort basis. There are some steps that we iterate in order
to find it. The easiest and most common one, is to specify it in the proper configuration, for example:
====
[source,yaml]
----
spring:
application:
name: app
cloud:
kubernetes:
secrets:
name: secret
namespace: default
sources:
# Spring Cloud Kubernetes looks up a Secret named 'a' in namespace 'default'
- name: a
# Spring Cloud Kubernetes looks up a Secret named 'secret' in namespace 'b'
- namespace: b
# Spring Cloud Kubernetes looks up a Secret named 'd' in namespace 'c'
- namespace: c
name: d
----
====
Remember that the same can be done for config maps. If such a namespace is not specified, it will be read (in this order):
1. from property `spring.cloud.kubernetes.client.namespace`
2. from a String residing in a file denoted by `spring.cloud.kubernetes.client.serviceAccountNamespacePath` property
3. from a String residing in `/var/run/secrets/kubernetes.io/serviceaccount/namespace` file
(kubernetes default namespace path)
4. from a designated client method call (for example fabric8's : `KubernetesClient::getNamespace`), if the client provides
such a method.
Failure to find a namespace from the above steps will result in an Exception being raised.
=== `PropertySource` Reload
WARNING: This functionality has been deprecated in the 2020.0 release. Please see
@@ -856,13 +1028,16 @@ The Kubernetes health indicator (which is part of the core module) exposes the f
* Pod name, IP address, namespace, service account, node name, and its IP address
* A flag that indicates whether the Spring Boot application is internal or external to Kubernetes
You can disable this `HealthContributor` by setting `management.health.kubernetes.enabled`
to `false` in `application.[properties | yaml]`.
== Info Contributor
Spring Cloud Kubernetes includes an `InfoContributor` which adds Pod information to
Spring Boot's `/info` Acturator endpoint.
You can disable this `InfoContributor` by setting `management.info.kubernetes.enabled`
to `false` in `bootstrap.[properties | yaml]`.
to `false` in `application.[properties | yaml]`.
== Leader Election
The Spring Cloud Kubernetes leader election mechanism implements the leader election API of Spring Integration using a Kubernetes ConfigMap.

View File

@@ -8,7 +8,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-kubernetes</artifactId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<packaging>jar</packaging>
<name>Spring Cloud Kubernetes Docs</name>

View File

@@ -52,6 +52,7 @@
|spring.cloud.kubernetes.config.namespace | |
|spring.cloud.kubernetes.config.paths | |
|spring.cloud.kubernetes.config.sources | |
|spring.cloud.kubernetes.config.use-name-as-prefix | `false` |
|spring.cloud.kubernetes.discovery.all-namespaces | `false` | If discovering all namespaces.
|spring.cloud.kubernetes.discovery.cache-loading-timeout-seconds | `60` | Timeout for initializing discovery cache, will abort the application if exceeded.
|spring.cloud.kubernetes.discovery.enabled | `true` | If Kubernetes Discovery is enabled.
@@ -96,5 +97,6 @@
|spring.cloud.kubernetes.secrets.namespace | |
|spring.cloud.kubernetes.secrets.paths | |
|spring.cloud.kubernetes.secrets.sources | |
|spring.cloud.kubernetes.secrets.use-name-as-prefix | `false` |
|===

View File

@@ -29,7 +29,7 @@
</parent>
<artifactId>spring-cloud-kubernetes</artifactId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
<packaging>pom</packaging>
<name>Spring Cloud Kubernetes</name>
@@ -62,10 +62,10 @@
<properties>
<!-- Dependency Versions -->
<spring-cloud-commons.version>3.0.5-SNAPSHOT</spring-cloud-commons.version>
<spring-cloud-config.version>3.0.6-SNAPSHOT</spring-cloud-config.version>
<spring-cloud-commons.version>3.0.4</spring-cloud-commons.version>
<spring-cloud-config.version>3.0.5</spring-cloud-config.version>
<spring-cloud-bus.version>3.0.3</spring-cloud-bus.version>
<spring-cloud-contract.version>3.0.5-SNAPSHOT</spring-cloud-contract.version>
<spring-cloud-contract.version>3.0.4</spring-cloud-contract.version>
<!-- Maven Plugin Versions -->
<maven-compiler-plugin.version>3.5</maven-compiler-plugin.version>

View File

@@ -5,7 +5,7 @@
<parent>
<artifactId>spring-cloud-kubernetes</artifactId>
<groupId>org.springframework.cloud</groupId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -5,7 +5,7 @@
<parent>
<artifactId>spring-cloud-kubernetes</artifactId>
<groupId>org.springframework.cloud</groupId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -5,7 +5,7 @@
<parent>
<artifactId>spring-cloud-kubernetes</artifactId>
<groupId>org.springframework.cloud</groupId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -5,7 +5,7 @@
<parent>
<artifactId>spring-cloud-kubernetes</artifactId>
<groupId>org.springframework.cloud</groupId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -5,7 +5,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-kubernetes</artifactId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -5,7 +5,7 @@
<parent>
<artifactId>spring-cloud-kubernetes</artifactId>
<groupId>org.springframework.cloud</groupId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>pom</packaging>

View File

@@ -5,7 +5,7 @@
<parent>
<artifactId>spring-cloud-kubernetes-controllers</artifactId>
<groupId>org.springframework.cloud</groupId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -23,11 +23,11 @@
<parent>
<artifactId>spring-cloud-dependencies-parent</artifactId>
<groupId>org.springframework.cloud</groupId>
<version>3.0.5-SNAPSHOT</version>
<version>3.0.4</version>
<relativePath/>
</parent>
<artifactId>spring-cloud-kubernetes-dependencies</artifactId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
<packaging>pom</packaging>
<name>Spring Cloud Kubernetes :: Dependencies</name>
<description>Spring Cloud Kubernetes Dependencies</description>

View File

@@ -5,7 +5,7 @@
<parent>
<artifactId>spring-cloud-kubernetes-examples</artifactId>
<groupId>org.springframework.cloud</groupId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -6,7 +6,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-kubernetes-examples</artifactId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<artifactId>kubernetes-leader-election-example</artifactId>

View File

@@ -5,7 +5,7 @@
<parent>
<artifactId>kubernetes-loadbalancer-example</artifactId>
<groupId>org.springframework.cloud</groupId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -5,7 +5,7 @@
<parent>
<artifactId>kubernetes-loadbalancer-example</artifactId>
<groupId>org.springframework.cloud</groupId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -5,7 +5,7 @@
<parent>
<artifactId>spring-cloud-kubernetes-examples</artifactId>
<groupId>org.springframework.cloud</groupId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>kubernetes-loadbalancer-example</artifactId>

View File

@@ -22,7 +22,7 @@
<parent>
<artifactId>spring-cloud-kubernetes-examples</artifactId>
<groupId>org.springframework.cloud</groupId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -23,7 +23,7 @@
<parent>
<artifactId>spring-cloud-kubernetes</artifactId>
<groupId>org.springframework.cloud</groupId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<artifactId>spring-cloud-kubernetes-examples</artifactId>

View File

@@ -23,7 +23,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-kubernetes</artifactId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -5,7 +5,7 @@
<parent>
<artifactId>spring-cloud-kubernetes</artifactId>
<groupId>org.springframework.cloud</groupId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -22,7 +22,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-kubernetes</artifactId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -5,7 +5,7 @@
<parent>
<artifactId>spring-cloud-kubernetes</artifactId>
<groupId>org.springframework.cloud</groupId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -22,7 +22,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-kubernetes</artifactId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<artifactId>spring-cloud-kubernetes-fabric8-leader</artifactId>

View File

@@ -5,7 +5,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-kubernetes</artifactId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>discovery-parent</artifactId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<artifactId>discovery-client</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>discovery-parent</artifactId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<artifactId>discovery-service-a</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>discovery-parent</artifactId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<artifactId>discovery-service-b</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>discovery-parent</artifactId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<artifactId>kubernetes-client-discovery</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-kubernetes-integration-tests</artifactId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<name>Spring Cloud Kubernetes :: Integration Tests :: Discovery Parent</name>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>discovery-parent</artifactId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<artifactId>tests</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-kubernetes-integration-tests</artifactId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<name>Spring Cloud Kubernetes :: Integration Tests :: Istio</name>

View File

@@ -5,7 +5,7 @@
<parent>
<artifactId>spring-cloud-kubernetes-integration-tests</artifactId>
<groupId>org.springframework.cloud</groupId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -6,7 +6,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-kubernetes</artifactId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<artifactId>spring-cloud-kubernetes-integration-tests</artifactId>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-kubernetes-integration-tests</artifactId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<name>Spring Cloud Kubernetes :: Integration Tests :: Simple Configmap</name>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-kubernetes-integration-tests</artifactId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<name>Spring Cloud Kubernetes :: Integration Tests :: Simple Core</name>

View File

@@ -5,7 +5,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-kubernetes-integration-tests</artifactId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -5,7 +5,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-kubernetes-integration-tests</artifactId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -211,8 +211,7 @@ public class LoadBalancerIT {
}
private V1Ingress getWiremockIngress() throws Exception {
V1Ingress ingress = (V1Ingress) k8SUtils
.readYamlFromClasspath("wiremock-ingress.yaml");
V1Ingress ingress = (V1Ingress) k8SUtils.readYamlFromClasspath("wiremock-ingress.yaml");
return ingress;
}

View File

@@ -5,7 +5,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-kubernetes-integration-tests</artifactId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -213,8 +213,7 @@ public class ReactiveDiscoveryClientIT {
}
private V1Ingress getWiremockIngress() throws Exception {
V1Ingress ingress = (V1Ingress) k8SUtils
.readYamlFromClasspath("wiremock-ingress.yaml");
V1Ingress ingress = (V1Ingress) k8SUtils.readYamlFromClasspath("wiremock-ingress.yaml");
return ingress;
}

View File

@@ -5,7 +5,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-kubernetes-integration-tests</artifactId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -177,8 +177,7 @@ public class ActuatorRefreshIT {
}
private V1Ingress getWiremockIngress() throws Exception {
V1Ingress ingress = (V1Ingress) k8SUtils
.readYamlFromClasspath("wiremock-ingress.yaml");
V1Ingress ingress = (V1Ingress) k8SUtils.readYamlFromClasspath("wiremock-ingress.yaml");
return ingress;
}

View File

@@ -5,7 +5,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-kubernetes-integration-tests</artifactId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -5,7 +5,7 @@
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-kubernetes</artifactId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -5,7 +5,7 @@
<parent>
<artifactId>spring-cloud-kubernetes</artifactId>
<groupId>org.springframework.cloud</groupId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -5,7 +5,7 @@
<parent>
<artifactId>spring-cloud-kubernetes</artifactId>
<groupId>org.springframework.cloud</groupId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -5,7 +5,7 @@
<parent>
<artifactId>spring-cloud-kubernetes</artifactId>
<groupId>org.springframework.cloud</groupId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -21,7 +21,7 @@
<parent>
<artifactId>spring-cloud-kubernetes</artifactId>
<groupId>org.springframework.cloud</groupId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -22,7 +22,7 @@
<parent>
<artifactId>spring-cloud-kubernetes</artifactId>
<groupId>org.springframework.cloud</groupId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -22,7 +22,7 @@
<parent>
<artifactId>spring-cloud-kubernetes</artifactId>
<groupId>org.springframework.cloud</groupId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -5,7 +5,7 @@
<parent>
<artifactId>spring-cloud-kubernetes</artifactId>
<groupId>org.springframework.cloud</groupId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<modelVersion>4.0.0</modelVersion>

View File

@@ -22,7 +22,7 @@
<parent>
<artifactId>spring-cloud-kubernetes</artifactId>
<groupId>org.springframework.cloud</groupId>
<version>2.0.5-SNAPSHOT</version>
<version>2.0.4</version>
</parent>
<modelVersion>4.0.0</modelVersion>