From 429b183c52169dd2cfda937c73e2ea37f5f58d9c Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Mon, 29 Sep 2014 10:55:45 +0100 Subject: [PATCH] Add skeleton docs --- Guardfile | 11 +++ src/main/adoc/spring-cloud-cloudfoundry.adoc | 74 ++++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 Guardfile create mode 100644 src/main/adoc/spring-cloud-cloudfoundry.adoc diff --git a/Guardfile b/Guardfile new file mode 100644 index 0000000..326569f --- /dev/null +++ b/Guardfile @@ -0,0 +1,11 @@ +require 'asciidoctor' +require 'erb' + +options = {:mkdirs => true, :safe => :unsafe, :attributes => 'linkcss'} + +guard 'shell' do + watch(/^[A-Za-z].*\.adoc$/) {|m| + Asciidoctor.render_file('src/main/adoc/README.adoc', options.merge(:to_file => './README.md')) + Asciidoctor.render_file('src/main/adoc/spring-cloud-cloudfoundry.adoc', options.merge(:to_dir => 'target/docs')) + } +end diff --git a/src/main/adoc/spring-cloud-cloudfoundry.adoc b/src/main/adoc/spring-cloud-cloudfoundry.adoc new file mode 100644 index 0000000..1a5dafc --- /dev/null +++ b/src/main/adoc/spring-cloud-cloudfoundry.adoc @@ -0,0 +1,74 @@ += Spring Cloud Cloud Foundry + +Integration between https://github.com/cloudfoundry[Cloud Foundry] +and https://github.com/spring-cloud[Spring Cloud]. + +Add this project to a Spring Boot REST service and deploy to +Cloudfoundry (and use the Actuator for maximum flexibility). It will +expose service-broker endpoints automatically (look in /mappings for +/v2/*) and you can register it with the Cloud Controller as described +here: +http://docs.cloudfoundry.org/services/managing-service-brokers.html[http://docs.cloudfoundry.org/services/managing-service-brokers.html]. + +Example script to deploy and register a broker: + +``` +DOMAIN=mydomain.net +cf push app -p target/*.jar --no-start +cf env app | grep SPRING_PROFILES_ACTIVE || cf set-env app SPRING_PROFILES_ACTIVE cloud +cf env app | grep APPLICATION_DOMAIN || cf set-env app APPLICATION_DOMAIN ${DOMAIN} + +cf services | grep configserver && cf bind app configserver + +cf restart app +cf create-service-broker app user secure http://app.${DOMAIN} + +for f in `cf curl /v2/service_plans | grep '\"guid' | sed -e 's/.*: "//' -e 's/".*//'`; do + cf curl v2/service_plans/$f -X PUT -d '{"public":true}' +done + +cf create-service app free appi +``` + +At which point you have a service called "app" and a service instance called "appi": + +``` +$ cf marketplace +OK + +service plans description +app free Singleton service app +$ cf services +Getting services in org default / space development as admin... +OK + +name service plan bound apps +appi app free +``` + +Your application can define a configuration property +`application.domain` (defaults to "cfapps.io") which will be used to +construct the credentials for any app that binds to your service. Or +it can define the URI directly using +`cloudfoundry.service.definition.metadata.uri`. + +You can change some other basic metadata by setting config properties: + +* `cloudfoundry.service.definition.*` is bound to a + `ServiceDefinition` (defined in spring-boot-cf-service-broker) which + has optional setters for plans and metadata. + +* `cloudfoundry.service.broker.*` is bound to an internal bean. It has + optional setters for "name" (the service name), "description" (user + friendly description) and "prefix" (used to create a unique id from + the name). + +An app which binds to your service will get credentials that contain a +"uri" property linking to your service. A Spring Boot app can bind to +that through the `vcap.services.[service].credentials.uri` environment +property. + +If your service also has a +https://github.com/Netflix/eureka[Eureka core] dependency, and you +can expose it as a Eureka service, then any service which registers +with Eureka will also become a Cloud Foundry service.