├── .gitignore ├── .jdk8 ├── .mvn ├── jvm.config ├── maven.config └── wrapper │ ├── maven-wrapper.jar │ └── maven-wrapper.properties ├── .settings.xml ├── .travis.yml ├── CODE_OF_CONDUCT.adoc ├── LICENSE ├── NOTICE ├── README.adoc ├── mvnw ├── mvnw.cmd ├── pom.xml ├── spring-cloud-dataflow-server-cloudfoundry-autoconfig ├── .jdk8 ├── pom.xml └── src │ └── main │ ├── java │ └── org │ │ └── springframework │ │ └── cloud │ │ └── dataflow │ │ └── server │ │ └── cloudfoundry │ │ └── config │ │ ├── CloudFoundryDataFlowServerConfiguration.java │ │ ├── CloudFoundrySchedulerConfiguration.java │ │ ├── CloudFoundryServerConfigurationProperties.java │ │ ├── DataSourceCloudConfig.java │ │ ├── TaskFeatureAutoToggleEnvironmentPostProcessor.java │ │ └── security │ │ ├── CloudFoundryOAuthSecurityConfiguration.java │ │ └── support │ │ ├── AccessLevel.java │ │ ├── CloudFoundryAuthorizationException.java │ │ ├── CloudFoundryDataflowAuthoritiesExtractor.java │ │ ├── CloudFoundryPrincipalExtractor.java │ │ └── CloudFoundrySecurityService.java │ └── resources │ └── META-INF │ └── spring.factories ├── spring-cloud-dataflow-server-cloudfoundry-docs ├── .jdk8 ├── pom.xml └── src │ └── main │ ├── asciidoc │ ├── Guardfile │ ├── api-guide-link.adoc │ ├── appendix.adoc │ ├── building.adoc │ ├── cf-tasks.adoc │ ├── configuration.adoc │ ├── docinfo.html │ ├── getting-started.adoc │ ├── images │ │ ├── PLACE_IMAGES_HERE │ │ └── cf-getting-started-security-no-roles.png │ ├── index-docinfo.xml │ ├── index.adoc │ └── overview.adoc │ ├── docbook │ ├── css │ │ ├── highlight.css │ │ ├── manual-multipage.css │ │ ├── manual-singlepage.css │ │ └── manual.css │ ├── images │ │ ├── background.png │ │ ├── caution.png │ │ ├── cover.png │ │ ├── important.png │ │ ├── logo.png │ │ ├── logo.svg │ │ ├── note.png │ │ ├── tip.png │ │ └── warning.png │ └── xsl │ │ ├── common.xsl │ │ ├── epub.xsl │ │ ├── html-multipage.xsl │ │ ├── html-singlepage.xsl │ │ ├── html.xsl │ │ ├── pdf.xsl │ │ ├── xslthl-config.xml │ │ └── xslthl │ │ ├── asciidoc-hl.xml │ │ ├── bourne-hl.xml │ │ ├── c-hl.xml │ │ ├── cpp-hl.xml │ │ ├── csharp-hl.xml │ │ ├── css-hl.xml │ │ ├── html-hl.xml │ │ ├── ini-hl.xml │ │ ├── java-hl.xml │ │ ├── javascript-hl.xml │ │ ├── json-hl.xml │ │ ├── perl-hl.xml │ │ ├── php-hl.xml │ │ ├── properties-hl.xml │ │ ├── python-hl.xml │ │ ├── ruby-hl.xml │ │ ├── sql2003-hl.xml │ │ └── yaml-hl.xml │ └── javadoc │ └── spring-javadoc.css ├── spring-cloud-dataflow-server-cloudfoundry ├── .jdk8 ├── pom.xml └── src │ ├── main │ ├── java │ │ └── org │ │ │ └── springframework │ │ │ └── cloud │ │ │ └── dataflow │ │ │ └── server │ │ │ └── cloudfoundry │ │ │ └── CloudFoundryDataFlowServer.java │ └── resources │ │ └── dataflow-server.yml │ └── test │ └── java │ └── org │ └── springframework │ └── cloud │ └── dataflow │ └── server │ └── cloudfoundry │ └── CloudFoundryDataFlowServerApplicationTests.java └── src ├── checkstyle ├── checkstyle-header.txt └── checkstyle.xml └── eclipse ├── eclipse-code-formatter.xml └── eclipse.importorder /.gitignore: -------------------------------------------------------------------------------- 1 | *~ 2 | .#* 3 | *# 4 | *.sw* 5 | _site/ 6 | .factorypath 7 | .gradletasknamecache 8 | .DS_Store 9 | /application.yml 10 | /application.properties 11 | asciidoctor.css 12 | atlassian-ide-plugin.xml 13 | bin/ 14 | build/ 15 | dump.rdb 16 | out 17 | spring-shell.log 18 | target/ 19 | test-output 20 | 21 | # Eclipse artifacts, including WTP generated manifests 22 | .classpath 23 | .project 24 | .settings/ 25 | .springBeans 26 | spring-*/src/main/java/META-INF/MANIFEST.MF 27 | 28 | # IDEA artifacts and output dirs 29 | *.iml 30 | *.ipr 31 | *.iws 32 | .idea/* 33 | manifest.yml 34 | -------------------------------------------------------------------------------- /.jdk8: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-attic/spring-cloud-dataflow-server-cloudfoundry/ee6a79bbadf696e5a98ce6c2b3c8f85914e27df4/.jdk8 -------------------------------------------------------------------------------- /.mvn/jvm.config: -------------------------------------------------------------------------------- 1 | -Xmx1024m -XX:CICompilerCount=1 -XX:TieredStopAtLevel=1 -Djava.security.egd=file:/dev/./urandom -------------------------------------------------------------------------------- /.mvn/maven.config: -------------------------------------------------------------------------------- 1 | -DaltSnapshotDeploymentRepository=repo.spring.io::default::https://repo.spring.io/libs-snapshot-local -P spring 2 | -------------------------------------------------------------------------------- /.mvn/wrapper/maven-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-attic/spring-cloud-dataflow-server-cloudfoundry/ee6a79bbadf696e5a98ce6c2b3c8f85914e27df4/.mvn/wrapper/maven-wrapper.jar -------------------------------------------------------------------------------- /.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.0/apache-maven-3.5.0-bin.zip 2 | -------------------------------------------------------------------------------- /.settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | repo.spring.io 6 | ${env.CI_DEPLOY_USERNAME} 7 | ${env.CI_DEPLOY_PASSWORD} 8 | 9 | 10 | 11 | 12 | 18 | spring 19 | true 20 | 21 | 22 | spring-snapshots 23 | Spring Snapshots 24 | http://repo.spring.io/libs-snapshot-local 25 | 26 | true 27 | 28 | 29 | 30 | spring-milestones 31 | Spring Milestones 32 | http://repo.spring.io/libs-milestone-local 33 | 34 | false 35 | 36 | 37 | 38 | spring-releases 39 | Spring Releases 40 | http://repo.spring.io/release 41 | 42 | false 43 | 44 | 45 | 46 | 47 | 48 | spring-snapshots 49 | Spring Snapshots 50 | http://repo.spring.io/libs-snapshot-local 51 | 52 | true 53 | 54 | 55 | 56 | spring-milestones 57 | Spring Milestones 58 | http://repo.spring.io/libs-milestone-local 59 | 60 | false 61 | 62 | 63 | 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: false 2 | cache: 3 | directories: 4 | - $HOME/.m2 5 | language: java 6 | jdk: 7 | - oraclejdk8 8 | services: 9 | - redis-server 10 | install: true 11 | script: 12 | - '[ "${TRAVIS_PULL_REQUEST}" != "false" ] || ./mvnw package -Pfull -U -Dmaven.test.redirectTestOutputToFile=false' 13 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.adoc: -------------------------------------------------------------------------------- 1 | = Contributor Code of Conduct 2 | 3 | As contributors and maintainers of this project, and in the interest of fostering an open 4 | and welcoming community, we pledge to respect all people who contribute through reporting 5 | issues, posting feature requests, updating documentation, submitting pull requests or 6 | patches, and other activities. 7 | 8 | We are committed to making participation in this project a harassment-free experience for 9 | everyone, regardless of level of experience, gender, gender identity and expression, 10 | sexual orientation, disability, personal appearance, body size, race, ethnicity, age, 11 | religion, or nationality. 12 | 13 | Examples of unacceptable behavior by participants include: 14 | 15 | * The use of sexualized language or imagery 16 | * Personal attacks 17 | * Trolling or insulting/derogatory comments 18 | * Public or private harassment 19 | * Publishing other's private information, such as physical or electronic addresses, 20 | without explicit permission 21 | * Other unethical or unprofessional conduct 22 | 23 | Project maintainers have the right and responsibility to remove, edit, or reject comments, 24 | commits, code, wiki edits, issues, and other contributions that are not aligned to this 25 | Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors 26 | that they deem inappropriate, threatening, offensive, or harmful. 27 | 28 | By adopting this Code of Conduct, project maintainers commit themselves to fairly and 29 | consistently applying these principles to every aspect of managing this project. Project 30 | maintainers who do not follow or enforce the Code of Conduct may be permanently removed 31 | from the project team. 32 | 33 | This Code of Conduct applies both within project spaces and in public spaces when an 34 | individual is representing the project or its community. 35 | 36 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by 37 | contacting a project maintainer at spring-code-of-conduct@pivotal.io . All complaints will 38 | be reviewed and investigated and will result in a response that is deemed necessary and 39 | appropriate to the circumstances. Maintainers are obligated to maintain confidentiality 40 | with regard to the reporter of an incident. 41 | 42 | This Code of Conduct is adapted from the 43 | http://contributor-covenant.org[Contributor Covenant], version 1.3.0, available at 44 | http://contributor-covenant.org/version/1/3/0/[contributor-covenant.org/version/1/3/0/] 45 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | 203 | -------------------------------------------------------------------------------- /NOTICE: -------------------------------------------------------------------------------- 1 | spring-cloud-dataflow-server-cloudfoundry 2 | 3 | Copyright (c) 2016-Present Pivotal Software, Inc. All Rights Reserved. 4 | 5 | Licensed under the Apache License, Version 2.0 (the "License"); 6 | you may not use this file except in compliance with the License. 7 | You may obtain a copy of the License at 8 | 9 | http://www.apache.org/licenses/LICENSE-2.0 10 | 11 | Unless required by applicable law or agreed to in writing, software 12 | distributed under the License is distributed on an "AS IS" BASIS, 13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | See the License for the specific language governing permissions and 15 | limitations under the License. -------------------------------------------------------------------------------- /README.adoc: -------------------------------------------------------------------------------- 1 | # spring-cloud-dataflow-server-cloudfoundry is no longer actively maintained by VMware, Inc. 2 | 3 | = Spring Cloud Data Flow Server for Cloud Foundry image:https://build.spring.io/plugins/servlet/wittified/build-status/SCD-CFBMASTER[Build Status, link=https://build.spring.io/browse/SCD-CFBMASTER] image:https://badge.waffle.io/spring-cloud/spring-cloud-dataflow-server-cloudfoundry.svg?label=ready&title=Ready[Stories in Ready, link=http://waffle.io/spring-cloud/spring-cloud-dataflow-server-cloudfoundry] image:https://badge.waffle.io/spring-cloud/spring-cloud-dataflow-server-cloudfoundry.svg?label=In%20Progress&title=In%20Progress[Stories in Progress, link=http://waffle.io/spring-cloud/spring-cloud-dataflow-server-cloudfoundry] 4 | 5 | This project provides support for deploying https://github.com/spring-cloud/spring-cloud-dataflow[Spring Cloud Data Flow]'s streaming and batch data pipelines to Cloud Foundry. It includes an implementation of Spring Cloud Data Flow's https://github.com/spring-cloud/spring-cloud-deployer[Deployer SPI] for Cloud Foundry. 6 | 7 | Please refer to the http://docs.spring.io/spring-cloud-dataflow-server-cloudfoundry/docs/current-SNAPSHOT/reference/htmlsingle/#index[reference documentation] on how to get started. 8 | 9 | === NOTE: Spring Cloud Data Flow v2.0 10 | 11 | Beginning with Spring Cloud Data Flow v2.0.0, we have consolidated the Local, Cloud Foundry, and Kubernetes servers into a single server. Instead of building, maintaining, and shipping individual server-implementations, we have consolidated them into a single server, and all the supported https://github.com/spring-cloud/spring-cloud-dataflow#components[platform-specific deployer implementation] libraries are bundled in it. 12 | 13 | That would mean, as a user, you don't need to pick different JARs or Docker-images depending on what platform you want to run. 14 | 15 | The other notable benefit to this approach is the ability to configure the single-server with multiple platform backends. The same server can be configured against Local, "n" number of Cloud Foundry `org/space` combinations, and as well against "n" number of Kubernetes clusters and the associated `namespace`. At the time of stream-deployment or task-launches, you would be able to pick-and-choose the platform where you want to orchestrate the deployment. It would further simplify and promote CI/CD practices for data pipelines. 16 | 17 | The http://docs.spring.io/spring-cloud-dataflow/docs/2.0.0.BUILD-SNAPSHOT/reference/htmlsingle/#getting-started[getting-started] steps for each platform remains mostly the same. One significant change is how Tasks are configured, as we are opening up the capability for Tasks to be launched across different platforms as well. 18 | 19 | In summary, please DO NOT use the `master` branch of this repository; switch over to https://github.com/spring-cloud/spring-cloud-dataflow[Spring Cloud Data Flow] v2.0 instead. We intend to continue to support the Spring Cloud Data Flow's v1.x branch of CloudFoundry-server for a period of at least a year from the general availability of v2.0 GA release. 20 | 21 | === Contributing 22 | 23 | We love contributions. Follow this https://github.com/spring-cloud/spring-cloud-dataflow/blob/master/spring-cloud-dataflow-docs/src/main/asciidoc/appendix-contributing.adoc[link] for more information on how to contribute. 24 | 25 | === Building 26 | 27 | Clone the repo and type 28 | 29 | ---- 30 | $ ./mvnw clean install 31 | ---- 32 | 33 | For more information on building, see this https://github.com/spring-cloud/spring-cloud-dataflow/blob/master/spring-cloud-dataflow-docs/src/main/asciidoc/appendix-building.adoc[link]. 34 | 35 | 36 | -------------------------------------------------------------------------------- /mvnw: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # ---------------------------------------------------------------------------- 3 | # Licensed to the Apache Software Foundation (ASF) under one 4 | # or more contributor license agreements. See the NOTICE file 5 | # distributed with this work for additional information 6 | # regarding copyright ownership. The ASF licenses this file 7 | # to you under the Apache License, Version 2.0 (the 8 | # "License"); you may not use this file except in compliance 9 | # with the License. You may obtain a copy of the License at 10 | # 11 | # http://www.apache.org/licenses/LICENSE-2.0 12 | # 13 | # Unless required by applicable law or agreed to in writing, 14 | # software distributed under the License is distributed on an 15 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 | # KIND, either express or implied. See the License for the 17 | # specific language governing permissions and limitations 18 | # under the License. 19 | # ---------------------------------------------------------------------------- 20 | 21 | # ---------------------------------------------------------------------------- 22 | # Maven2 Start Up Batch script 23 | # 24 | # Required ENV vars: 25 | # ------------------ 26 | # JAVA_HOME - location of a JDK home dir 27 | # 28 | # Optional ENV vars 29 | # ----------------- 30 | # M2_HOME - location of maven2's installed home dir 31 | # MAVEN_OPTS - parameters passed to the Java VM when running Maven 32 | # e.g. to debug Maven itself, use 33 | # set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 34 | # MAVEN_SKIP_RC - flag to disable loading of mavenrc files 35 | # ---------------------------------------------------------------------------- 36 | 37 | if [ -z "$MAVEN_SKIP_RC" ] ; then 38 | 39 | if [ -f /etc/mavenrc ] ; then 40 | . /etc/mavenrc 41 | fi 42 | 43 | if [ -f "$HOME/.mavenrc" ] ; then 44 | . "$HOME/.mavenrc" 45 | fi 46 | 47 | fi 48 | 49 | # OS specific support. $var _must_ be set to either true or false. 50 | cygwin=false; 51 | darwin=false; 52 | mingw=false 53 | case "`uname`" in 54 | CYGWIN*) cygwin=true ;; 55 | MINGW*) mingw=true;; 56 | Darwin*) darwin=true 57 | # 58 | # Look for the Apple JDKs first to preserve the existing behaviour, and then look 59 | # for the new JDKs provided by Oracle. 60 | # 61 | if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then 62 | # 63 | # Apple JDKs 64 | # 65 | export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home 66 | fi 67 | 68 | if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then 69 | # 70 | # Apple JDKs 71 | # 72 | export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home 73 | fi 74 | 75 | if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then 76 | # 77 | # Oracle JDKs 78 | # 79 | export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home 80 | fi 81 | 82 | if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then 83 | # 84 | # Apple JDKs 85 | # 86 | export JAVA_HOME=`/usr/libexec/java_home` 87 | fi 88 | ;; 89 | esac 90 | 91 | if [ -z "$JAVA_HOME" ] ; then 92 | if [ -r /etc/gentoo-release ] ; then 93 | JAVA_HOME=`java-config --jre-home` 94 | fi 95 | fi 96 | 97 | if [ -z "$M2_HOME" ] ; then 98 | ## resolve links - $0 may be a link to maven's home 99 | PRG="$0" 100 | 101 | # need this for relative symlinks 102 | while [ -h "$PRG" ] ; do 103 | ls=`ls -ld "$PRG"` 104 | link=`expr "$ls" : '.*-> \(.*\)$'` 105 | if expr "$link" : '/.*' > /dev/null; then 106 | PRG="$link" 107 | else 108 | PRG="`dirname "$PRG"`/$link" 109 | fi 110 | done 111 | 112 | saveddir=`pwd` 113 | 114 | M2_HOME=`dirname "$PRG"`/.. 115 | 116 | # make it fully qualified 117 | M2_HOME=`cd "$M2_HOME" && pwd` 118 | 119 | cd "$saveddir" 120 | # echo Using m2 at $M2_HOME 121 | fi 122 | 123 | # For Cygwin, ensure paths are in UNIX format before anything is touched 124 | if $cygwin ; then 125 | [ -n "$M2_HOME" ] && 126 | M2_HOME=`cygpath --unix "$M2_HOME"` 127 | [ -n "$JAVA_HOME" ] && 128 | JAVA_HOME=`cygpath --unix "$JAVA_HOME"` 129 | [ -n "$CLASSPATH" ] && 130 | CLASSPATH=`cygpath --path --unix "$CLASSPATH"` 131 | fi 132 | 133 | # For Migwn, ensure paths are in UNIX format before anything is touched 134 | if $mingw ; then 135 | [ -n "$M2_HOME" ] && 136 | M2_HOME="`(cd "$M2_HOME"; pwd)`" 137 | [ -n "$JAVA_HOME" ] && 138 | JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" 139 | # TODO classpath? 140 | fi 141 | 142 | if [ -z "$JAVA_HOME" ]; then 143 | javaExecutable="`which javac`" 144 | if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then 145 | # readlink(1) is not available as standard on Solaris 10. 146 | readLink=`which readlink` 147 | if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then 148 | if $darwin ; then 149 | javaHome="`dirname \"$javaExecutable\"`" 150 | javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" 151 | else 152 | javaExecutable="`readlink -f \"$javaExecutable\"`" 153 | fi 154 | javaHome="`dirname \"$javaExecutable\"`" 155 | javaHome=`expr "$javaHome" : '\(.*\)/bin'` 156 | JAVA_HOME="$javaHome" 157 | export JAVA_HOME 158 | fi 159 | fi 160 | fi 161 | 162 | if [ -z "$JAVACMD" ] ; then 163 | if [ -n "$JAVA_HOME" ] ; then 164 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 165 | # IBM's JDK on AIX uses strange locations for the executables 166 | JAVACMD="$JAVA_HOME/jre/sh/java" 167 | else 168 | JAVACMD="$JAVA_HOME/bin/java" 169 | fi 170 | else 171 | JAVACMD="`which java`" 172 | fi 173 | fi 174 | 175 | if [ ! -x "$JAVACMD" ] ; then 176 | echo "Error: JAVA_HOME is not defined correctly." >&2 177 | echo " We cannot execute $JAVACMD" >&2 178 | exit 1 179 | fi 180 | 181 | if [ -z "$JAVA_HOME" ] ; then 182 | echo "Warning: JAVA_HOME environment variable is not set." 183 | fi 184 | 185 | CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher 186 | 187 | # For Cygwin, switch paths to Windows format before running java 188 | if $cygwin; then 189 | [ -n "$M2_HOME" ] && 190 | M2_HOME=`cygpath --path --windows "$M2_HOME"` 191 | [ -n "$JAVA_HOME" ] && 192 | JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` 193 | [ -n "$CLASSPATH" ] && 194 | CLASSPATH=`cygpath --path --windows "$CLASSPATH"` 195 | fi 196 | 197 | # traverses directory structure from process work directory to filesystem root 198 | # first directory with .mvn subdirectory is considered project base directory 199 | find_maven_basedir() { 200 | local basedir=$(pwd) 201 | local wdir=$(pwd) 202 | while [ "$wdir" != '/' ] ; do 203 | if [ -d "$wdir"/.mvn ] ; then 204 | basedir=$wdir 205 | break 206 | fi 207 | wdir=$(cd "$wdir/.."; pwd) 208 | done 209 | echo "${basedir}" 210 | } 211 | 212 | # concatenates all lines of a file 213 | concat_lines() { 214 | if [ -f "$1" ]; then 215 | echo "$(tr -s '\n' ' ' < "$1")" 216 | fi 217 | } 218 | 219 | export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)} 220 | MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" 221 | 222 | # Provide a "standardized" way to retrieve the CLI args that will 223 | # work with both Windows and non-Windows executions. 224 | MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" 225 | export MAVEN_CMD_LINE_ARGS 226 | 227 | WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain 228 | 229 | exec "$JAVACMD" \ 230 | $MAVEN_OPTS \ 231 | -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ 232 | "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ 233 | ${WRAPPER_LAUNCHER} "$@" 234 | 235 | -------------------------------------------------------------------------------- /mvnw.cmd: -------------------------------------------------------------------------------- 1 | @REM ---------------------------------------------------------------------------- 2 | @REM Licensed to the Apache Software Foundation (ASF) under one 3 | @REM or more contributor license agreements. See the NOTICE file 4 | @REM distributed with this work for additional information 5 | @REM regarding copyright ownership. The ASF licenses this file 6 | @REM to you under the Apache License, Version 2.0 (the 7 | @REM "License"); you may not use this file except in compliance 8 | @REM with the License. You may obtain a copy of the License at 9 | @REM 10 | @REM http://www.apache.org/licenses/LICENSE-2.0 11 | @REM 12 | @REM Unless required by applicable law or agreed to in writing, 13 | @REM software distributed under the License is distributed on an 14 | @REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 | @REM KIND, either express or implied. See the License for the 16 | @REM specific language governing permissions and limitations 17 | @REM under the License. 18 | @REM ---------------------------------------------------------------------------- 19 | 20 | @REM ---------------------------------------------------------------------------- 21 | @REM Maven2 Start Up Batch script 22 | @REM 23 | @REM Required ENV vars: 24 | @REM JAVA_HOME - location of a JDK home dir 25 | @REM 26 | @REM Optional ENV vars 27 | @REM M2_HOME - location of maven2's installed home dir 28 | @REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands 29 | @REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending 30 | @REM MAVEN_OPTS - parameters passed to the Java VM when running Maven 31 | @REM e.g. to debug Maven itself, use 32 | @REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 33 | @REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files 34 | @REM ---------------------------------------------------------------------------- 35 | 36 | @REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' 37 | @echo off 38 | @REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' 39 | @if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% 40 | 41 | @REM set %HOME% to equivalent of $HOME 42 | if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") 43 | 44 | @REM Execute a user defined script before this one 45 | if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre 46 | @REM check for pre script, once with legacy .bat ending and once with .cmd ending 47 | if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" 48 | if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" 49 | :skipRcPre 50 | 51 | @setlocal 52 | 53 | set ERROR_CODE=0 54 | 55 | @REM To isolate internal variables from possible post scripts, we use another setlocal 56 | @setlocal 57 | 58 | @REM ==== START VALIDATION ==== 59 | if not "%JAVA_HOME%" == "" goto OkJHome 60 | 61 | echo. 62 | echo Error: JAVA_HOME not found in your environment. >&2 63 | echo Please set the JAVA_HOME variable in your environment to match the >&2 64 | echo location of your Java installation. >&2 65 | echo. 66 | goto error 67 | 68 | :OkJHome 69 | if exist "%JAVA_HOME%\bin\java.exe" goto init 70 | 71 | echo. 72 | echo Error: JAVA_HOME is set to an invalid directory. >&2 73 | echo JAVA_HOME = "%JAVA_HOME%" >&2 74 | echo Please set the JAVA_HOME variable in your environment to match the >&2 75 | echo location of your Java installation. >&2 76 | echo. 77 | goto error 78 | 79 | @REM ==== END VALIDATION ==== 80 | 81 | :init 82 | 83 | set MAVEN_CMD_LINE_ARGS=%* 84 | 85 | @REM Find the project base dir, i.e. the directory that contains the folder ".mvn". 86 | @REM Fallback to current working directory if not found. 87 | 88 | set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% 89 | IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir 90 | 91 | set EXEC_DIR=%CD% 92 | set WDIR=%EXEC_DIR% 93 | :findBaseDir 94 | IF EXIST "%WDIR%"\.mvn goto baseDirFound 95 | cd .. 96 | IF "%WDIR%"=="%CD%" goto baseDirNotFound 97 | set WDIR=%CD% 98 | goto findBaseDir 99 | 100 | :baseDirFound 101 | set MAVEN_PROJECTBASEDIR=%WDIR% 102 | cd "%EXEC_DIR%" 103 | goto endDetectBaseDir 104 | 105 | :baseDirNotFound 106 | set MAVEN_PROJECTBASEDIR=%EXEC_DIR% 107 | cd "%EXEC_DIR%" 108 | 109 | :endDetectBaseDir 110 | 111 | IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig 112 | 113 | @setlocal EnableExtensions EnableDelayedExpansion 114 | for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a 115 | @endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% 116 | 117 | :endReadAdditionalConfig 118 | 119 | SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" 120 | 121 | set WRAPPER_JAR="".\.mvn\wrapper\maven-wrapper.jar"" 122 | set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain 123 | 124 | %MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS% 125 | if ERRORLEVEL 1 goto error 126 | goto end 127 | 128 | :error 129 | set ERROR_CODE=1 130 | 131 | :end 132 | @endlocal & set ERROR_CODE=%ERROR_CODE% 133 | 134 | if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost 135 | @REM check for post script, once with legacy .bat ending and once with .cmd ending 136 | if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" 137 | if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" 138 | :skipRcPost 139 | 140 | @REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' 141 | if "%MAVEN_BATCH_PAUSE%" == "on" pause 142 | 143 | if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% 144 | 145 | exit /B %ERROR_CODE% 146 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4.0.0 4 | spring-cloud-dataflow-server-cloudfoundry-parent 5 | 2.0.0.BUILD-SNAPSHOT 6 | pom 7 | 8 | 9 | org.springframework.cloud 10 | spring-cloud-dataflow-parent 11 | 2.0.0.BUILD-SNAPSHOT 12 | 13 | 14 | 15 | 16 | 2.0.0.BUILD-SNAPSHOT 17 | 2.0.0.BUILD-SNAPSHOT 18 | 2.0.0.BUILD-SNAPSHOT 19 | 1.1.0.BUILD-SNAPSHOT 20 | 2.0.3.RELEASE 21 | 2.0.3.RELEASE 22 | 2.1.3.RELEASE 23 | 24 | 2.0.0.BUILD-SNAPSHOT 25 | 1.0.1.RELEASE 26 | 1.1.0.RELEASE 27 | 3.1.8.RELEASE 28 | 29 | 30 | 31 | spring-cloud-dataflow-server-cloudfoundry-docs 32 | spring-cloud-dataflow-server-cloudfoundry 33 | spring-cloud-dataflow-server-cloudfoundry-autoconfig 34 | 35 | 36 | 37 | spring 38 | 39 | 40 | spring-snapshots 41 | Spring Snapshots 42 | http://repo.spring.io/libs-snapshot-local 43 | 44 | true 45 | 46 | 47 | 48 | spring-milestones 49 | Spring Milestones 50 | http://repo.spring.io/libs-milestone-local 51 | 52 | false 53 | 54 | 55 | 56 | spring-releases 57 | Spring Releases 58 | http://repo.spring.io/release 59 | 60 | false 61 | 62 | 63 | 64 | 65 | 66 | spring-snapshots 67 | Spring Snapshots 68 | http://repo.spring.io/libs-snapshot-local 69 | 70 | true 71 | 72 | 73 | 74 | spring-milestones 75 | Spring Milestones 76 | http://repo.spring.io/libs-milestone-local 77 | 78 | false 79 | 80 | 81 | 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-autoconfig/.jdk8: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-attic/spring-cloud-dataflow-server-cloudfoundry/ee6a79bbadf696e5a98ce6c2b3c8f85914e27df4/spring-cloud-dataflow-server-cloudfoundry-autoconfig/.jdk8 -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-autoconfig/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4.0.0 4 | spring-cloud-dataflow-server-cloudfoundry-autoconfig 5 | http://projects.spring.io/spring-cloud/ 6 | 7 | Pivotal Software, Inc. 8 | http://www.spring.io 9 | 10 | 11 | org.springframework.cloud 12 | spring-cloud-dataflow-server-cloudfoundry-parent 13 | 2.0.0.BUILD-SNAPSHOT 14 | 15 | 16 | 17 | org.springframework.cloud 18 | spring-cloud-dataflow-server-core 19 | ${spring-cloud-dataflow.version} 20 | 21 | 22 | org.springframework.cloud 23 | spring-cloud-starter-common-security-config-web 24 | ${spring-cloud-common-security-config.version} 25 | 26 | 27 | org.springframework.cloud 28 | spring-cloud-deployer-cloudfoundry 29 | ${spring-cloud-deployer-cloudfoundry.version} 30 | 31 | 32 | org.springframework.cloud 33 | spring-cloud-deployer-resource-docker 34 | ${spring-cloud-deployer-spi.version} 35 | 36 | 37 | io.projectreactor 38 | reactor-core 39 | ${reactor.version} 40 | 41 | 42 | io.pivotal.spring.cloud 43 | spring-cloud-services-starter-config-client 44 | ${spring-cloud-services-starters.version} 45 | runtime 46 | 47 | 48 | org.springframework.cloud 49 | spring-cloud-cloudfoundry-connector 50 | 51 | 52 | org.springframework.cloud 53 | spring-cloud-spring-service-connector 54 | 55 | 56 | 57 | 58 | io.pivotal.spring.cloud 59 | spring-cloud-sso-connector 60 | 1.1.0.RELEASE 61 | 62 | 63 | io.pivotal 64 | pivotal-cloudfoundry-client-reactor 65 | ${pivotal-cf-client-reactor.version} 66 | 67 | 68 | org.springframework.cloud 69 | spring-cloud-scheduler-spi 70 | ${spring-cloud-scheduler-spi.version} 71 | 72 | 73 | org.springframework.cloud 74 | spring-cloud-scheduler-cloudfoundry 75 | ${spring-cloud-scheduler-cloudfoundry} 76 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-autoconfig/src/main/java/org/springframework/cloud/dataflow/server/cloudfoundry/config/CloudFoundryDataFlowServerConfiguration.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2016-2018 the original author or authors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.springframework.cloud.dataflow.server.cloudfoundry.config; 18 | 19 | import javax.annotation.PostConstruct; 20 | 21 | import reactor.core.publisher.Hooks; 22 | 23 | import org.springframework.boot.autoconfigure.AutoConfigureBefore; 24 | import org.springframework.boot.context.properties.ConfigurationProperties; 25 | import org.springframework.cloud.dataflow.server.cloudfoundry.config.security.CloudFoundryOAuthSecurityConfiguration; 26 | import org.springframework.cloud.deployer.autoconfigure.DelegatingResourceLoaderBuilderCustomizer; 27 | import org.springframework.cloud.deployer.resource.docker.DockerResource; 28 | import org.springframework.cloud.deployer.resource.docker.DockerResourceLoader; 29 | import org.springframework.cloud.deployer.spi.cloudfoundry.CloudFoundryConnectionProperties; 30 | import org.springframework.cloud.deployer.spi.cloudfoundry.CloudFoundryDeployerAutoConfiguration; 31 | import org.springframework.cloud.deployer.spi.cloudfoundry.CloudFoundryDeploymentProperties; 32 | import org.springframework.context.annotation.Bean; 33 | import org.springframework.context.annotation.Configuration; 34 | import org.springframework.context.annotation.Import; 35 | 36 | /** 37 | * Configuration class for customizing Cloud Foundry deployer. 38 | * 39 | * @author Eric Bottard 40 | */ 41 | @Configuration 42 | @Import(CloudFoundryOAuthSecurityConfiguration.class) 43 | @AutoConfigureBefore(CloudFoundryDeployerAutoConfiguration.class) 44 | public class CloudFoundryDataFlowServerConfiguration { 45 | 46 | @Bean 47 | @ConfigurationProperties(prefix = CloudFoundryConnectionProperties.CLOUDFOUNDRY_PROPERTIES + ".stream") 48 | public CloudFoundryDeploymentProperties appDeploymentProperties() { 49 | return new CloudFoundryDeploymentProperties(); 50 | } 51 | 52 | @Bean 53 | @ConfigurationProperties(prefix = CloudFoundryConnectionProperties.CLOUDFOUNDRY_PROPERTIES + ".task") 54 | public CloudFoundryDeploymentProperties taskDeploymentProperties() { 55 | return new CloudFoundryDeploymentProperties(); 56 | } 57 | 58 | @Bean 59 | @ConfigurationProperties(prefix = CloudFoundryServerConfigurationProperties.PREFIX) 60 | public CloudFoundryServerConfigurationProperties cloudFoundryServerConfigurationProperties() { 61 | return new CloudFoundryServerConfigurationProperties(); 62 | } 63 | 64 | @Bean 65 | public DelegatingResourceLoaderBuilderCustomizer dockerDelegatingResourceLoaderBuilderCustomizer() { 66 | return customizer -> customizer.loader(DockerResource.URI_SCHEME, new DockerResourceLoader()); 67 | } 68 | 69 | @PostConstruct 70 | public void afterPropertiesSet() { 71 | if (cloudFoundryServerConfigurationProperties().isDebugReactor()) { 72 | Hooks.onOperatorDebug(); 73 | } 74 | } 75 | 76 | } 77 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-autoconfig/src/main/java/org/springframework/cloud/dataflow/server/cloudfoundry/config/CloudFoundrySchedulerConfiguration.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2018 the original author or authors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package org.springframework.cloud.dataflow.server.cloudfoundry.config; 17 | 18 | import io.pivotal.reactor.scheduler.ReactorSchedulerClient; 19 | import org.cloudfoundry.operations.CloudFoundryOperations; 20 | import org.cloudfoundry.reactor.ConnectionContext; 21 | import org.cloudfoundry.reactor.TokenProvider; 22 | import reactor.core.publisher.Mono; 23 | 24 | import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; 25 | import org.springframework.cloud.dataflow.server.config.features.SchedulerConfiguration; 26 | import org.springframework.cloud.deployer.spi.cloudfoundry.CloudFoundry2630AndLaterTaskLauncher; 27 | import org.springframework.cloud.deployer.spi.cloudfoundry.CloudFoundryConnectionProperties; 28 | import org.springframework.cloud.deployer.spi.task.TaskLauncher; 29 | import org.springframework.cloud.scheduler.spi.cloudfoundry.CloudFoundryAppScheduler; 30 | import org.springframework.cloud.scheduler.spi.cloudfoundry.CloudFoundrySchedulerProperties; 31 | import org.springframework.cloud.scheduler.spi.core.Scheduler; 32 | import org.springframework.context.annotation.Bean; 33 | import org.springframework.context.annotation.Conditional; 34 | import org.springframework.context.annotation.Configuration; 35 | 36 | /** 37 | * @author Mark Pollack 38 | */ 39 | @Configuration 40 | @Conditional({ SchedulerConfiguration.SchedulerConfigurationPropertyChecker.class }) 41 | public class CloudFoundrySchedulerConfiguration { 42 | 43 | @Bean 44 | @ConditionalOnMissingBean 45 | public ReactorSchedulerClient reactorSchedulerClient(ConnectionContext context, 46 | TokenProvider passwordGrantTokenProvider, 47 | CloudFoundrySchedulerProperties properties) { 48 | return ReactorSchedulerClient.builder() 49 | .connectionContext(context) 50 | .tokenProvider(passwordGrantTokenProvider) 51 | .root(Mono.just(properties.getSchedulerUrl())) 52 | .build(); 53 | } 54 | 55 | @Bean 56 | @ConditionalOnMissingBean 57 | public Scheduler scheduler(ReactorSchedulerClient client, 58 | CloudFoundryOperations operations, 59 | CloudFoundryConnectionProperties properties, 60 | TaskLauncher taskLauncher, 61 | CloudFoundrySchedulerProperties schedulerProperties) { 62 | return new CloudFoundryAppScheduler(client, operations, properties, 63 | (CloudFoundry2630AndLaterTaskLauncher) taskLauncher, 64 | schedulerProperties); 65 | } 66 | 67 | @Bean 68 | @ConditionalOnMissingBean 69 | public CloudFoundrySchedulerProperties cloudFoundrySchedulerProperties() { 70 | return new CloudFoundrySchedulerProperties(); 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-autoconfig/src/main/java/org/springframework/cloud/dataflow/server/cloudfoundry/config/CloudFoundryServerConfigurationProperties.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2017 the original author or authors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.springframework.cloud.dataflow.server.cloudfoundry.config; 18 | 19 | import org.springframework.boot.context.properties.ConfigurationProperties; 20 | import org.springframework.validation.annotation.Validated; 21 | 22 | /** 23 | * {@link ConfigurationProperties} class to configure various settings of Data Flow 24 | * running on Cloud Foundry. 25 | * 26 | * @author Eric Bottard 27 | */ 28 | @Validated 29 | @ConfigurationProperties(CloudFoundryServerConfigurationProperties.PREFIX) 30 | public class CloudFoundryServerConfigurationProperties { 31 | 32 | public static final String PREFIX = "spring.cloud.dataflow.server.cloudfoundry"; 33 | /** 34 | * Whether to turn on reactor style stacktraces. 35 | */ 36 | public boolean debugReactor = false; 37 | 38 | private int maxPoolSize = 10; 39 | 40 | int maxWaitTime = 30000; 41 | 42 | public boolean isDebugReactor() { 43 | return debugReactor; 44 | } 45 | 46 | public void setDebugReactor(boolean debugReactor) { 47 | this.debugReactor = debugReactor; 48 | } 49 | 50 | public int getMaxPoolSize() { 51 | return maxPoolSize; 52 | } 53 | 54 | public void setMaxPoolSize(int maxPoolSize) { 55 | this.maxPoolSize = maxPoolSize; 56 | } 57 | 58 | public int getMaxWaitTime() { 59 | return maxWaitTime; 60 | } 61 | 62 | public void setMaxWaitTime(int maxWaitTime) { 63 | this.maxWaitTime = maxWaitTime; 64 | } 65 | 66 | } 67 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-autoconfig/src/main/java/org/springframework/cloud/dataflow/server/cloudfoundry/config/DataSourceCloudConfig.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2018 the original author or authors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package org.springframework.cloud.dataflow.server.cloudfoundry.config; 17 | 18 | import javax.sql.DataSource; 19 | 20 | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 21 | import org.springframework.cloud.config.java.AbstractCloudConfig; 22 | import org.springframework.cloud.dataflow.server.config.features.FeaturesProperties; 23 | import org.springframework.cloud.service.PooledServiceConnectorConfig; 24 | import org.springframework.cloud.service.relational.DataSourceConfig; 25 | import org.springframework.context.annotation.Bean; 26 | import org.springframework.context.annotation.Configuration; 27 | import org.springframework.context.annotation.Profile; 28 | import org.springframework.data.redis.connection.RedisConnectionFactory; 29 | 30 | /** 31 | * Add declarative configuration of the max pool side and max wait time when using the 32 | * connector library. 33 | * 34 | * @author Mark Pollack 35 | */ 36 | @Profile("cloud") 37 | @Configuration 38 | public class DataSourceCloudConfig extends AbstractCloudConfig { 39 | 40 | @Bean 41 | public DataSource scdfCloudDataSource( 42 | CloudFoundryServerConfigurationProperties cloudFoundryServerConfigurationProperties) { 43 | PooledServiceConnectorConfig.PoolConfig poolConfig = new PooledServiceConnectorConfig.PoolConfig( 44 | cloudFoundryServerConfigurationProperties.getMaxPoolSize(), 45 | cloudFoundryServerConfigurationProperties.getMaxWaitTime()); 46 | DataSourceConfig dbConfig = new DataSourceConfig(poolConfig, null); 47 | return connectionFactory().dataSource(dbConfig); 48 | } 49 | 50 | @Bean 51 | @ConditionalOnProperty(prefix = FeaturesProperties.FEATURES_PREFIX, name = FeaturesProperties.ANALYTICS_ENABLED, matchIfMissing = true) 52 | public RedisConnectionFactory redisFactory() { 53 | return connectionFactory().redisConnectionFactory(); 54 | } 55 | 56 | } 57 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-autoconfig/src/main/java/org/springframework/cloud/dataflow/server/cloudfoundry/config/TaskFeatureAutoToggleEnvironmentPostProcessor.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2017 the original author or authors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.springframework.cloud.dataflow.server.cloudfoundry.config; 18 | 19 | import java.util.Collections; 20 | 21 | import com.github.zafarkhaja.semver.Version; 22 | import org.slf4j.Logger; 23 | import org.slf4j.LoggerFactory; 24 | 25 | import org.springframework.boot.SpringApplication; 26 | import org.springframework.boot.env.EnvironmentPostProcessor; 27 | import org.springframework.cloud.dataflow.server.config.features.FeaturesProperties; 28 | import org.springframework.cloud.deployer.spi.cloudfoundry.CloudFoundryDeployerAutoConfiguration; 29 | import org.springframework.cloud.deployer.spi.cloudfoundry.UnsupportedVersionTaskLauncher; 30 | import org.springframework.context.annotation.AnnotationConfigApplicationContext; 31 | import org.springframework.core.env.ConfigurableEnvironment; 32 | import org.springframework.core.env.MapPropertySource; 33 | 34 | /** 35 | * An {@link org.springframework.boot.env.EnvironmentPostProcessor} that turns off task support for Cloud Controller API 36 | * versions that are not supported. 37 | * 38 | * @author Eric Bottard 39 | * @author Ilayaperumal Gopinathan 40 | */ 41 | public class TaskFeatureAutoToggleEnvironmentPostProcessor implements EnvironmentPostProcessor { 42 | 43 | private static final Logger logger = LoggerFactory.getLogger(TaskFeatureAutoToggleEnvironmentPostProcessor.class); 44 | 45 | private static final String TASKS_KEY = FeaturesProperties.FEATURES_PREFIX + "." + FeaturesProperties.TASKS_ENABLED; 46 | 47 | private static final String TASK_FEATURE_DEACTIVE_PROPERTIES = "Task Features De-activation"; 48 | 49 | @Override 50 | public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { 51 | AnnotationConfigApplicationContext applicationContext = null; 52 | // Create a throwaway AppContext to connect to CC API and assess its version. 53 | try { 54 | applicationContext = new AnnotationConfigApplicationContext(); 55 | applicationContext.register(CloudFoundryDeployerAutoConfiguration.EarlyConnectionConfiguration.class); 56 | applicationContext.setEnvironment(environment); // Inherit current environment 57 | applicationContext.refresh(); 58 | 59 | Version version = applicationContext.getBean(Version.class); 60 | if (version.lessThan(UnsupportedVersionTaskLauncher.MINIMUM_SUPPORTED_VERSION)) { 61 | logger.warn("Targeting Cloud Foundry API {}, which is incompatible with TaskLauncher support. Forcing {} to false", 62 | version, TASKS_KEY); 63 | environment.getPropertySources().addFirst(new MapPropertySource(TASK_FEATURE_DEACTIVE_PROPERTIES, 64 | Collections.singletonMap(TASKS_KEY, "false"))); 65 | } 66 | } 67 | catch (Exception ignored) { // Might happen in particular in Integration Tests not targeting an actual CF runtime 68 | logger.warn("Could not connect to Cloud Foundry to probe API version", ignored); 69 | } 70 | finally { 71 | if (applicationContext != null) { 72 | applicationContext.close(); 73 | } 74 | } 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-autoconfig/src/main/java/org/springframework/cloud/dataflow/server/cloudfoundry/config/security/CloudFoundryOAuthSecurityConfiguration.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2017 the original author or authors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package org.springframework.cloud.dataflow.server.cloudfoundry.config.security; 17 | 18 | import javax.annotation.PostConstruct; 19 | 20 | import org.slf4j.Logger; 21 | import org.slf4j.LoggerFactory; 22 | 23 | import org.springframework.beans.factory.annotation.Autowired; 24 | import org.springframework.beans.factory.annotation.Value; 25 | import org.springframework.boot.autoconfigure.condition.ConditionalOnCloudPlatform; 26 | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; 27 | import org.springframework.boot.autoconfigure.security.oauth2.resource.PrincipalExtractor; 28 | import org.springframework.boot.autoconfigure.security.oauth2.resource.UserInfoTokenServices; 29 | import org.springframework.boot.cloud.CloudPlatform; 30 | import org.springframework.cloud.common.security.OAuthSecurityConfiguration; 31 | import org.springframework.cloud.common.security.support.DefaultAuthoritiesExtractor; 32 | import org.springframework.cloud.common.security.support.OnOAuth2SecurityEnabled; 33 | import org.springframework.cloud.dataflow.server.cloudfoundry.config.security.support.CloudFoundryDataflowAuthoritiesExtractor; 34 | import org.springframework.cloud.dataflow.server.cloudfoundry.config.security.support.CloudFoundryPrincipalExtractor; 35 | import org.springframework.cloud.dataflow.server.cloudfoundry.config.security.support.CloudFoundrySecurityService; 36 | import org.springframework.context.annotation.Bean; 37 | import org.springframework.context.annotation.Conditional; 38 | import org.springframework.context.annotation.Configuration; 39 | import org.springframework.context.annotation.Import; 40 | import org.springframework.security.oauth2.client.OAuth2RestTemplate; 41 | 42 | /** 43 | * When running inside Cloud Foundry, this {@link Configuration} class will reconfigure 44 | * Spring Cloud Data Flow's security setup in {@link OAuthSecurityConfiguration}, so that 45 | * only users with the CF_SPACE_DEVELOPER_ROLE} can access the REST APIs. 46 | *

47 | * Therefore, this configuration will ensure that only Cloud Foundry 48 | * {@code Space Developers} have access to the underlying REST API's. 49 | *

50 | * For this to happen, a REST call will be made to the Cloud Foundry Permissions API via 51 | * CloudFoundrySecurityService inside the {@link DefaultAuthoritiesExtractor}. 52 | *

53 | * If the user has the respective permissions, the CF_SPACE_DEVELOPER_ROLE will be 54 | * assigned to the user. 55 | *

56 | * See also: 57 | * https://apidocs.cloudfoundry.org/258/apps/retrieving_permissions_on_a_app.html 58 | * 59 | * @author Gunnar Hillert 60 | * @author Ilayaperumal Gopinathan 61 | */ 62 | @Configuration 63 | @ConditionalOnCloudPlatform(CloudPlatform.CLOUD_FOUNDRY) 64 | @Conditional(OnOAuth2SecurityEnabled.class) 65 | @Import(CloudFoundryOAuthSecurityConfiguration.CloudFoundryUAAConfiguration.class) 66 | public class CloudFoundryOAuthSecurityConfiguration { 67 | 68 | private static final Logger logger = LoggerFactory.getLogger(CloudFoundryOAuthSecurityConfiguration.class); 69 | 70 | @Autowired 71 | private UserInfoTokenServices userInfoTokenServices; 72 | 73 | @Autowired(required = false) 74 | private CloudFoundryDataflowAuthoritiesExtractor cloudFoundryDataflowAuthoritiesExtractor; 75 | 76 | @Autowired(required = false) 77 | private PrincipalExtractor principalExtractor; 78 | 79 | @PostConstruct 80 | public void init() { 81 | if (this.cloudFoundryDataflowAuthoritiesExtractor != null) { 82 | logger.info("Setting up Cloud Foundry AuthoritiesExtractor for UAA."); 83 | this.userInfoTokenServices.setAuthoritiesExtractor(this.cloudFoundryDataflowAuthoritiesExtractor); 84 | } 85 | if (this.principalExtractor != null) { 86 | logger.info("Setting up Cloud Foundry PrincipalExtractor."); 87 | this.userInfoTokenServices.setPrincipalExtractor(this.principalExtractor); 88 | } 89 | else { 90 | this.userInfoTokenServices.setPrincipalExtractor(new CloudFoundryPrincipalExtractor()); 91 | } 92 | } 93 | 94 | @Configuration 95 | @ConditionalOnProperty(name = "spring.cloud.dataflow.security.cf-use-uaa", havingValue = "true") 96 | public class CloudFoundryUAAConfiguration { 97 | 98 | @Value("${vcap.application.cf_api}") 99 | private String cloudControllerUrl; 100 | 101 | @Value("${vcap.application.application_id}") 102 | private String applicationId; 103 | 104 | @Autowired 105 | private OAuth2RestTemplate oAuth2RestTemplate; 106 | 107 | @Bean 108 | public CloudFoundryDataflowAuthoritiesExtractor authoritiesExtractor() { 109 | return new CloudFoundryDataflowAuthoritiesExtractor(cloudFoundrySecurityService()); 110 | } 111 | 112 | @Bean 113 | public CloudFoundrySecurityService cloudFoundrySecurityService() { 114 | return new CloudFoundrySecurityService(this.oAuth2RestTemplate, this.cloudControllerUrl, 115 | this.applicationId); 116 | } 117 | 118 | } 119 | 120 | } 121 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-autoconfig/src/main/java/org/springframework/cloud/dataflow/server/cloudfoundry/config/security/support/AccessLevel.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2017 the original author or authors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package org.springframework.cloud.dataflow.server.cloudfoundry.config.security.support; 17 | 18 | import java.util.Arrays; 19 | import java.util.List; 20 | 21 | import javax.servlet.http.HttpServletRequest; 22 | 23 | /** 24 | * The specific access level granted to the Cloud Foundry user that's calling the 25 | * endpoints. 26 | * 27 | * @author Madhura Bhave 28 | * @author Gunnar Hillert 29 | */ 30 | public enum AccessLevel { 31 | 32 | /** 33 | * Restricted access to a limited set of endpoints. 34 | */ 35 | RESTRICTED("", "/health", "/info"), 36 | 37 | /** 38 | * No access. 39 | */ 40 | NONE, 41 | 42 | /** 43 | * Full access to all endpoints. 44 | */ 45 | FULL; 46 | 47 | private static final String REQUEST_ATTRIBUTE = "cloudFoundryAccessLevel"; 48 | 49 | private final List endpointPaths; 50 | 51 | AccessLevel(String... endpointPaths) { 52 | this.endpointPaths = Arrays.asList(endpointPaths); 53 | } 54 | 55 | /** 56 | * Returns if the access level should allow access to the specified endpoint path. 57 | * @param endpointPath the endpoint path 58 | * @return {@code true} if access is allowed 59 | */ 60 | public boolean isAccessAllowed(String endpointPath) { 61 | return this.endpointPaths.isEmpty() || this.endpointPaths.contains(endpointPath); 62 | } 63 | 64 | public void put(HttpServletRequest request) { 65 | request.setAttribute(REQUEST_ATTRIBUTE, this); 66 | } 67 | 68 | public static AccessLevel get(HttpServletRequest request) { 69 | return (AccessLevel) request.getAttribute(REQUEST_ATTRIBUTE); 70 | } 71 | 72 | } 73 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-autoconfig/src/main/java/org/springframework/cloud/dataflow/server/cloudfoundry/config/security/support/CloudFoundryAuthorizationException.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2017 the original author or authors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package org.springframework.cloud.dataflow.server.cloudfoundry.config.security.support; 17 | 18 | import org.springframework.http.HttpStatus; 19 | 20 | /** 21 | * Authorization exceptions thrown to limit access to the endpoints. 22 | * 23 | * @author Madhura Bhave 24 | */ 25 | public class CloudFoundryAuthorizationException extends RuntimeException { 26 | 27 | private static final long serialVersionUID = 1L; 28 | 29 | private final Reason reason; 30 | 31 | CloudFoundryAuthorizationException(Reason reason, String message) { 32 | this(reason, message, null); 33 | } 34 | 35 | CloudFoundryAuthorizationException(Reason reason, String message, Throwable cause) { 36 | super(message); 37 | this.reason = reason; 38 | } 39 | 40 | /** 41 | * Return the status code that should be returned to the client. 42 | * @return the HTTP status code 43 | */ 44 | public HttpStatus getStatusCode() { 45 | return getReason().getStatus(); 46 | } 47 | 48 | /** 49 | * Return the reason why the authorization exception was thrown. 50 | * @return the reason 51 | */ 52 | public Reason getReason() { 53 | return this.reason; 54 | } 55 | 56 | /** 57 | * Reasons why the exception can be thrown. 58 | */ 59 | enum Reason { 60 | 61 | ACCESS_DENIED(HttpStatus.FORBIDDEN), 62 | 63 | INVALID_AUDIENCE(HttpStatus.UNAUTHORIZED), 64 | 65 | INVALID_ISSUER(HttpStatus.UNAUTHORIZED), 66 | 67 | INVALID_KEY_ID(HttpStatus.UNAUTHORIZED), 68 | 69 | INVALID_SIGNATURE(HttpStatus.UNAUTHORIZED), 70 | 71 | INVALID_TOKEN(HttpStatus.UNAUTHORIZED), 72 | 73 | MISSING_AUTHORIZATION(HttpStatus.UNAUTHORIZED), 74 | 75 | TOKEN_EXPIRED(HttpStatus.UNAUTHORIZED), 76 | 77 | UNSUPPORTED_TOKEN_SIGNING_ALGORITHM(HttpStatus.UNAUTHORIZED), 78 | 79 | SERVICE_UNAVAILABLE(HttpStatus.SERVICE_UNAVAILABLE); 80 | 81 | private final HttpStatus status; 82 | 83 | Reason(HttpStatus status) { 84 | this.status = status; 85 | } 86 | 87 | public HttpStatus getStatus() { 88 | return this.status; 89 | } 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-autoconfig/src/main/java/org/springframework/cloud/dataflow/server/cloudfoundry/config/security/support/CloudFoundryDataflowAuthoritiesExtractor.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2017 the original author or authors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package org.springframework.cloud.dataflow.server.cloudfoundry.config.security.support; 17 | 18 | 19 | import java.util.ArrayList; 20 | import java.util.List; 21 | import java.util.Map; 22 | import java.util.stream.Collectors; 23 | import java.util.stream.Stream; 24 | 25 | import org.slf4j.LoggerFactory; 26 | 27 | import org.springframework.boot.autoconfigure.security.oauth2.resource.AuthoritiesExtractor; 28 | import org.springframework.cloud.common.security.support.CoreSecurityRoles; 29 | import org.springframework.cloud.common.security.support.SecurityConfigUtils; 30 | import org.springframework.security.config.core.GrantedAuthorityDefaults; 31 | import org.springframework.security.core.GrantedAuthority; 32 | import org.springframework.security.core.authority.SimpleGrantedAuthority; 33 | import org.springframework.util.Assert; 34 | import org.springframework.util.StringUtils; 35 | 36 | /** 37 | * This Spring Cloud Data Flow {@link AuthoritiesExtractor} will assign all 38 | * {@link CoreSecurityRoles} to the authenticated OAuth2 user IF the user is a "Space 39 | * Developer" in Cloud Foundry. 40 | * 41 | * @author Gunnar Hillert 42 | * 43 | */ 44 | public class CloudFoundryDataflowAuthoritiesExtractor implements AuthoritiesExtractor { 45 | 46 | private static final org.slf4j.Logger logger = LoggerFactory 47 | .getLogger(CloudFoundryDataflowAuthoritiesExtractor.class); 48 | 49 | private final CloudFoundrySecurityService cloudFoundrySecurityService; 50 | 51 | public CloudFoundryDataflowAuthoritiesExtractor(CloudFoundrySecurityService cloudFoundrySecurityService) { 52 | this.cloudFoundrySecurityService = cloudFoundrySecurityService; 53 | } 54 | 55 | /** 56 | * The returned {@link List} of {@link GrantedAuthority}s contains all roles from 57 | * {@link CoreSecurityRoles}. The roles are prefixed with the value specified in 58 | * {@link GrantedAuthorityDefaults}. 59 | * 60 | * @param map Must not be null. Is only used for logging 61 | */ 62 | @Override 63 | public List extractAuthorities(Map map) { 64 | Assert.notNull(map, "The map argument must not be null."); 65 | 66 | if (cloudFoundrySecurityService.isSpaceDeveloper()) { 67 | final List rolesAsStrings = new ArrayList<>(); 68 | final List grantedAuthorities = Stream.of(CoreSecurityRoles.values()) 69 | .map(roleEnum -> { 70 | final String roleName = SecurityConfigUtils.ROLE_PREFIX + roleEnum.getKey(); 71 | rolesAsStrings.add(roleName); 72 | return new SimpleGrantedAuthority(roleName); 73 | }) 74 | .collect(Collectors.toList()); 75 | logger.info("Adding ALL roles {} to Cloud Foundry Space Developer user {}", 76 | StringUtils.collectionToCommaDelimitedString(rolesAsStrings), map); 77 | return grantedAuthorities; 78 | } 79 | else { 80 | return new ArrayList<>(0); 81 | } 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-autoconfig/src/main/java/org/springframework/cloud/dataflow/server/cloudfoundry/config/security/support/CloudFoundryPrincipalExtractor.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2017 the original author or authors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package org.springframework.cloud.dataflow.server.cloudfoundry.config.security.support; 17 | 18 | import java.util.Map; 19 | 20 | import org.springframework.boot.autoconfigure.security.oauth2.resource.PrincipalExtractor; 21 | 22 | /** 23 | * A Cloud Foundry specific {@link PrincipalExtractor} that extracts the username. 24 | * 25 | * @author Gunnar Hillert 26 | * 27 | */ 28 | public class CloudFoundryPrincipalExtractor implements PrincipalExtractor { 29 | 30 | private static final String[] PRINCIPAL_KEYS = new String[] { "user_name", "user", "username", 31 | "userid", "user_id", "login", "id", "name" }; 32 | 33 | @Override 34 | public Object extractPrincipal(Map map) { 35 | for (String key : PRINCIPAL_KEYS) { 36 | if (map.containsKey(key)) { 37 | return map.get(key); 38 | } 39 | } 40 | return null; 41 | } 42 | 43 | } 44 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-autoconfig/src/main/java/org/springframework/cloud/dataflow/server/cloudfoundry/config/security/support/CloudFoundrySecurityService.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2017 the original author or authors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package org.springframework.cloud.dataflow.server.cloudfoundry.config.security.support; 17 | 18 | import java.net.URI; 19 | import java.net.URISyntaxException; 20 | import java.util.Map; 21 | 22 | import org.slf4j.Logger; 23 | import org.slf4j.LoggerFactory; 24 | 25 | import org.springframework.cloud.dataflow.server.cloudfoundry.config.security.support.CloudFoundryAuthorizationException.Reason; 26 | import org.springframework.http.HttpStatus; 27 | import org.springframework.http.RequestEntity; 28 | import org.springframework.security.oauth2.client.OAuth2RestTemplate; 29 | import org.springframework.security.oauth2.common.OAuth2AccessToken; 30 | import org.springframework.util.Assert; 31 | import org.springframework.web.client.HttpClientErrorException; 32 | import org.springframework.web.client.HttpServerErrorException; 33 | 34 | /** 35 | * Cloud Foundry security service to handle REST calls to the cloud controller and UAA. 36 | * 37 | * @author Madhura Bhave 38 | * @author Gunnar Hillert 39 | * @author Ilayaperumal Gopinathan 40 | * 41 | */ 42 | public class CloudFoundrySecurityService { 43 | 44 | private static final Logger logger = LoggerFactory.getLogger(CloudFoundrySecurityService.class); 45 | 46 | private final OAuth2RestTemplate oAuth2RestTemplate; 47 | 48 | private final String cloudControllerUrl; 49 | 50 | private final String applicationId; 51 | 52 | public CloudFoundrySecurityService(OAuth2RestTemplate oAuth2RestTemplate, String cloudControllerUrl, 53 | String applicationId) { 54 | Assert.notNull(oAuth2RestTemplate, "OAuth2RestTemplate must not be null."); 55 | Assert.notNull(cloudControllerUrl, "CloudControllerUrl must not be null."); 56 | Assert.notNull(applicationId, "ApplicationId must not be null."); 57 | this.oAuth2RestTemplate = oAuth2RestTemplate; 58 | this.cloudControllerUrl = cloudControllerUrl; 59 | this.applicationId = applicationId; 60 | } 61 | 62 | /** 63 | * Returns {@code true} if the user (using the access-token from 64 | * {@link OAuth2RestTemplate}) has full {@link AccessLevel#FULL} for the provided 65 | * {@code applicationId} 66 | * 67 | * @return true of the user is a space developer in Cloud Foundry 68 | */ 69 | public boolean isSpaceDeveloper() { 70 | final OAuth2AccessToken accessToken = this.oAuth2RestTemplate.getAccessToken(); 71 | logger.info("The accessToken is: " + accessToken.getValue()); 72 | final AccessLevel accessLevel = getAccessLevel( 73 | accessToken.getValue(), applicationId); 74 | 75 | if (AccessLevel.FULL.equals(accessLevel)) { 76 | return true; 77 | } 78 | else { 79 | return false; 80 | } 81 | } 82 | 83 | /** 84 | * Return the access level that should be granted to the given token. 85 | * @param token the token 86 | * @param applicationId the cloud foundry application ID 87 | * @return the access level that should be granted 88 | * @throws CloudFoundryAuthorizationException if the token is not authorized 89 | */ 90 | public AccessLevel getAccessLevel(String token, String applicationId) 91 | throws CloudFoundryAuthorizationException { 92 | try { 93 | final URI permissionsUri = getPermissionsUri(applicationId); 94 | logger.info("Using PermissionsUri: " + permissionsUri); 95 | RequestEntity request = RequestEntity.get(permissionsUri) 96 | .header("Authorization", "bearer " + token).build(); 97 | Map body = this.oAuth2RestTemplate.exchange(request, Map.class).getBody(); 98 | if (Boolean.TRUE.equals(body.get("read_sensitive_data"))) { 99 | return AccessLevel.FULL; 100 | } 101 | else { 102 | return AccessLevel.RESTRICTED; 103 | } 104 | } 105 | catch (HttpClientErrorException ex) { 106 | if (ex.getStatusCode().equals(HttpStatus.FORBIDDEN)) { 107 | return AccessLevel.NONE; 108 | } 109 | throw new CloudFoundryAuthorizationException(Reason.INVALID_TOKEN, 110 | "Invalid token", ex); 111 | } 112 | catch (HttpServerErrorException ex) { 113 | throw new CloudFoundryAuthorizationException(Reason.SERVICE_UNAVAILABLE, 114 | "Cloud controller not reachable"); 115 | } 116 | } 117 | 118 | private URI getPermissionsUri(String applicationId) { 119 | try { 120 | return new URI(this.cloudControllerUrl + "/v2/apps/" + applicationId 121 | + "/permissions"); 122 | } 123 | catch (URISyntaxException ex) { 124 | throw new IllegalStateException(ex); 125 | } 126 | } 127 | } 128 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-autoconfig/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 | org.springframework.cloud.dataflow.server.cloudfoundry.config.CloudFoundryDataFlowServerConfiguration,\ 3 | org.springframework.cloud.dataflow.server.cloudfoundry.config.CloudFoundrySchedulerConfiguration 4 | org.springframework.boot.env.EnvironmentPostProcessor=\ 5 | org.springframework.cloud.dataflow.server.cloudfoundry.config.TaskFeatureAutoToggleEnvironmentPostProcessor 6 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/.jdk8: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-attic/spring-cloud-dataflow-server-cloudfoundry/ee6a79bbadf696e5a98ce6c2b3c8f85914e27df4/spring-cloud-dataflow-server-cloudfoundry-docs/.jdk8 -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/asciidoc/Guardfile: -------------------------------------------------------------------------------- 1 | require 'asciidoctor' 2 | require 'erb' 3 | 4 | guard 'shell' do 5 | watch(/.*\.adoc$/) {|m| 6 | Asciidoctor.render_file('index.adoc', \ 7 | :in_place => true, \ 8 | :safe => Asciidoctor::SafeMode::UNSAFE, \ 9 | :attributes=> { \ 10 | 'source-highlighter' => 'prettify', \ 11 | 'icons' => 'font', \ 12 | 'linkcss'=> 'true', \ 13 | 'copycss' => 'true', \ 14 | 'doctype' => 'book'}) 15 | } 16 | end 17 | 18 | guard 'livereload' do 19 | watch(%r{^.+\.(css|js|html)$}) 20 | end 21 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/asciidoc/api-guide-link.adoc: -------------------------------------------------------------------------------- 1 | // The API Guide asciidoc source file residing in SCDF core cannot be included here, because it depends on generated 2 | // REST Docs snippets that are not versioned (and are heavyweight to regenerate for each flavor). Hence, we do a 3 | // simple link to the correct SCDF core version: 4 | :spring-cloud-dataflow-docs-rest: http://docs.spring.io/spring-cloud-dataflow/docs/{scdf-core-version}/reference/htmlsingle/index.html#api-guide 5 | 6 | [[api-guide]] 7 | = REST API Guide 8 | 9 | You can find the documentation about the Data Flow REST API in the {spring-cloud-dataflow-docs-rest}[core documentation]. 10 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/asciidoc/appendix.adoc: -------------------------------------------------------------------------------- 1 | [[appendix]] 2 | = Appendices 3 | 4 | Having trouble with Spring Cloud Data Flow? We'd like to help! 5 | 6 | * Ask a question. We monitor http://stackoverflow.com[stackoverflow.com] for questions tagged with http://stackoverflow.com/tags/spring-cloud-dataflow[`spring-cloud-dataflow`]. 7 | * Report bugs with Spring Cloud Data Flow at https://github.com/spring-cloud/spring-cloud-dataflow/issues. 8 | * Report bugs with Spring Cloud Data Flow for Cloud Foundry at https://github.com/spring-cloud/spring-cloud-dataflow-server-cloudfoundry/issues. 9 | 10 | include::{dataflow-asciidoc}/appendix-dataflow-template.adoc[] 11 | include::{dataflow-asciidoc}/appendix-migration-guide.adoc[] 12 | include::{dataflow-asciidoc}/appendix-building.adoc[] 13 | include::{dataflow-asciidoc}/appendix-contributing.adoc[] 14 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/asciidoc/building.adoc: -------------------------------------------------------------------------------- 1 | [appendix] 2 | [[building]] 3 | == Building 4 | 5 | :jdkversion: 1.8 6 | 7 | === Basic Compile and Test 8 | 9 | To build the source you will need to install JDK {jdkversion}. 10 | 11 | The build uses the Maven wrapper so you don't have to install a specific 12 | version of Maven. To enable the tests for Redis you should run the server 13 | before bulding. See below for more information on how run Redis. 14 | 15 | The main build command is 16 | 17 | ---- 18 | $ ./mvnw clean install 19 | ---- 20 | 21 | You can also add '-DskipTests' if you like, to avoid running the tests. 22 | 23 | NOTE: You can also install Maven (>=3.3.3) yourself and run the `mvn` command 24 | in place of `./mvnw` in the examples below. If you do that you also 25 | might need to add `-P spring` if your local Maven settings do not 26 | contain repository declarations for spring pre-release artifacts. 27 | 28 | NOTE: Be aware that you might need to increase the amount of memory 29 | available to Maven by setting a `MAVEN_OPTS` environment variable with 30 | a value like `-Xmx512m -XX:MaxPermSize=128m`. We try to cover this in 31 | the `.mvn` configuration, so if you find you have to do it to make a 32 | build succeed, please raise a ticket to get the settings added to 33 | source control. 34 | 35 | 36 | The projects that require middleware generally include a 37 | `docker-compose.yml`, so consider using 38 | https://www.docker.com/products/docker-compose[Docker Compose] to run the middeware servers 39 | in Docker containers. See the README in the 40 | https://github.com/spring-cloud-samples/scripts[scripts demo 41 | repository] for specific instructions about the common cases of mongo, 42 | rabbit and redis. 43 | 44 | === Documentation 45 | 46 | There is a "full" profile that will generate documentation. You can build just the documentation by executing 47 | 48 | [listing, subs=attributes] 49 | ---- 50 | $ ./mvnw package -DskipTests=true -P full -pl {project-artifactId} -am 51 | ---- 52 | 53 | === Working with the code 54 | If you don't have an IDE preference we would recommend that you use 55 | http://www.springsource.com/developer/sts[Spring Tools Suite] or 56 | http://eclipse.org[Eclipse] when working with the code. We use the 57 | http://eclipse.org/m2e/[m2eclipe] eclipse plugin for maven support. Other IDEs and tools 58 | should also work without issue. 59 | 60 | ==== Importing into eclipse with m2eclipse 61 | We recommend the http://eclipse.org/m2e/[m2eclipe] eclipse plugin when working with 62 | eclipse. If you don't already have m2eclipse installed it is available from the "eclipse 63 | marketplace". 64 | 65 | Unfortunately m2e does not yet support Maven 3.3, so once the projects 66 | are imported into Eclipse you will also need to tell m2eclipse to use 67 | the `.settings.xml` file for the projects. If you do not do this you 68 | may see many different errors related to the POMs in the 69 | projects. Open your Eclipse preferences, expand the Maven 70 | preferences, and select User Settings. In the User Settings field 71 | click Browse and navigate to the Spring Cloud project you imported 72 | selecting the `.settings.xml` file in that project. Click Apply and 73 | then OK to save the preference changes. 74 | 75 | NOTE: Alternatively you can copy the repository settings from https://github.com/spring-cloud/spring-cloud-build/blob/master/.settings.xml[`.settings.xml`] into your own `~/.m2/settings.xml`. 76 | 77 | ==== Importing into eclipse without m2eclipse 78 | If you prefer not to use m2eclipse you can generate eclipse project metadata using the 79 | following command: 80 | 81 | ---- 82 | $ ./mvnw eclipse:eclipse 83 | ---- 84 | 85 | The generated eclipse projects can be imported by selecting `import existing projects` 86 | from the `file` menu. 87 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/asciidoc/cf-tasks.adoc: -------------------------------------------------------------------------------- 1 | [[tasks-on-cloudfoundry]] 2 | = Tasks on Cloud Foundry 3 | 4 | Spring Cloud Data Flow's task functionality exposes new task capabilities within 5 | the Pivotal Cloud Foundry runtime. 6 | 7 | == Version Compatibility 8 | 9 | The task functionality depends on the latest versions of PCF for runtime support. This 10 | release requires PCF version 1.7.12 or higher to run tasks. Tasks are an experimental 11 | feature in PCF 1.7 and 1.8 and a GA feature in PCF 1.9. 12 | 13 | == Running Task Applications 14 | 15 | Running a task application within Spring Cloud Data Flow goes through a slightly different 16 | lifecycle than running a stream application. Both types of applications need to be registered 17 | with the appropriate artifact coordinates. Both need a definition created with the SCDF DSL. 18 | However, the similarities end there. 19 | 20 | With stream-based applications, you "`deploy`" them with the intent that they run until they 21 | are undeployed. A stream definition is only deployed once (it can be scaled, but only 22 | deployed as one instance of the stream as a whole). However, tasks are "`launched`". A single 23 | task definition can be launched many times. With each launch, the task starts, runs, 24 | and shuts down, with PCF cleaning up the resources once the shutdown has occurred. The 25 | following sections outline the process of creating, launching, destroying, and viewing tasks. 26 | 27 | === Creating a Task 28 | 29 | Similar to streams, creating a task application is done by using the SCDF DSL or through the 30 | dashboard. To create a task definition in SCDF, you must either develop a task 31 | application or use one of the out-of-the-box link:http://docs.spring.io/spring-cloud-task-app-starters/docs/{sct-starters-core-version}/reference/htmlsingle[task app-starters]. 32 | The maven coordinates of the task application should be registered in SCDF. For more 33 | details on how to register task applications, see link:https://docs.spring.io/spring-cloud-dataflow/docs/{scdf-core-version}/reference/htmlsingle/#spring-cloud-dataflow-register-task-apps[Registering a Task Application] 34 | in the core docs. 35 | 36 | The following example uses the out-of-the-box `timestamp` task application: 37 | 38 | ==== 39 | [source] 40 | ---- 41 | dataflow:>task create --name foo --definition "timestamp" 42 | Created new task 'foo' 43 | ---- 44 | ==== 45 | 46 | NOTE: Tasks in SCDF do not require explicit deployment. They are required to be launched, 47 | and there are different ways to launch them - see https://docs.spring.io/spring-cloud-task/docs/current/reference/htmlsingle/#stream-integration-launching-sink[Launching Tasks from a Spring Cloud Stream] for more details. 48 | 49 | === Launching a Task 50 | 51 | Unlike streams, tasks in SCDF require an explicit launch trigger or can be manually kicked-off. The following example shows how to launch a task called `mytask` 52 | 53 | ==== 54 | [source] 55 | ---- 56 | dataflow:>task launch mytask 57 | Launched task 'mytask' 58 | ---- 59 | ==== 60 | 61 | === Launching a Task with Arguments and Properties 62 | 63 | When you launch a task, you can set any properties that need to be passed as command line arguments to the task application when launching the task as follows: 64 | 65 | ==== 66 | [source,bash] 67 | ---- 68 | dataflow:>task launch mytask --arguments "--key1=value1,--key2=value2" 69 | ---- 70 | ==== 71 | 72 | You can pass in additional properties meant for a `TaskLauncher` itself by using a `--properties` option. 73 | The format of this option is a comma-separated string of properties prefixed with `app..`. 74 | Properties are passed to `TaskLauncher` as application properties. 75 | It is up to an implementation to choose how those are passed into an actual task application. 76 | If the property is prefixed with `deployer` instead of `app`, it is passed to `TaskLauncher` as a deployment property and its meaning may be specific to the `TaskLauncher` implementation. The following example shows how to pass in application properties: 77 | 78 | ==== 79 | [source,bash] 80 | ---- 81 | dataflow:>task launch mytask --properties "deployer.timestamp.custom1=value1,app.timestamp.custom2=value2" 82 | ---- 83 | ==== 84 | 85 | You can also pass JAVA_OPTS values as the CF deployer property when the task is launched, as the following example shows 86 | 87 | ==== 88 | [source,bash] 89 | ---- 90 | task launch --name mytask --properties "deployer.mytask.cloudfoundry.javaOpts=-Duser.timezone=America/New_York" 91 | ---- 92 | ==== 93 | 94 | You can also set the JAVA_OPTS values as the global property for all the tasks by using 95 | `SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_TASK_JAVA_OPTS` 96 | 97 | === Viewing Task Logs 98 | 99 | The CF CLI is the way to interact with tasks on PCF, 100 | including viewing the logs. In order to view the logs as a task is executing, you can use the 101 | following command, where `mytask` is the name of the task you are executing: 102 | 103 | ==== 104 | [source,bash] 105 | ---- 106 | cf v3-logs mytask 107 | Tailing logs for app mytask... 108 | 109 | .... 110 | .... 111 | .... 112 | .... 113 | 114 | 2016-08-19T09:44:49.11-0700 [APP/TASK/bar1/0]OUT 2016-08-19 16:44:49.111 INFO 7 --- [ main] o.s.c.t.a.t.TimestampTaskApplication : Started TimestampTaskApplication in 2.734 seconds (JVM running for 3.288) 115 | 2016-08-19T09:44:49.13-0700 [APP/TASK/bar1/0]OUT Exit status 0 116 | 2016-08-19T09:44:49.19-0700 [APP/TASK/bar1/0]OUT Destroying container 117 | 2016-08-19T09:44:50.41-0700 [APP/TASK/bar1/0]OUT Successfully destroyed container 118 | ---- 119 | ==== 120 | 121 | NOTE: Logs are viewable only through the CF CLI as the app is running. Historic 122 | logs are not available. 123 | 124 | === Listing Tasks 125 | 126 | Listing tasks is as simple as the following example (which includes output): 127 | 128 | ==== 129 | [source] 130 | ---- 131 | dataflow:>task list 132 | ╔══════════════════════╤═════════════════════════╤═══════════╗ 133 | ║ Task Name │ Task Definition │Task Status║ 134 | ╠══════════════════════╪═════════════════════════╪═══════════╣ 135 | ║foo │timestamp │complete ║ 136 | ╚══════════════════════╧═════════════════════════╧═══════════╝ 137 | ---- 138 | ==== 139 | 140 | === Listing Task Executions 141 | 142 | If you want to view the execution details of the launched task, you could run the following: 143 | 144 | ==== 145 | [source] 146 | ---- 147 | dataflow:>task execution list 148 | ╔════════════════════════╤══╤═════════════════════════╤═════════════════════════╤════════╗ 149 | ║ Task Name │ID│ Start Time │ End Time │ Exit ║ 150 | ║ │ │ │ │ Code ║ 151 | ╠════════════════════════╪══╪═════════════════════════╪═════════════════════════╪════════╣ 152 | ║foo:cloud: │1 │ Fri Aug 19 09:44:49 PDT │Fri Aug 19 09:44:49 PDT │0 ║ 153 | ╚════════════════════════╧══╧═════════════════════════╧═════════════════════════╧════════╝ 154 | ---- 155 | ==== 156 | 157 | === Destroying a Task 158 | 159 | Destroying the task application from SCDF removes the task definition from the task repository. The following listing (which includes output) shows how to destroy a task named `mytask` and verify that it has been removed from the task list: 160 | 161 | [source] 162 | ---- 163 | dataflow:>task destroy mytask 164 | Destroyed task 'mytask' 165 | dataflow:>task list 166 | ╔═════════╤═══════════════╤═══════════╗ 167 | ║Task Name│Task Definition│Task Status║ 168 | ╚═════════╧═══════════════╧═══════════╝ 169 | ---- 170 | 171 | === Deleting a Task From Cloud Foundry 172 | 173 | Currently, Spring Cloud Data Flow does not delete tasks deployed on a Cloud 174 | Foundry instance once they have been pushed. The only way to do this now is through the 175 | CLI on a Cloud Foundry instance, version 1.9 or above. 176 | This is done in two steps: 177 | 178 | . Obtain a list of the apps by using the `cf apps` command. 179 | . Identify the task application to be deleted and run the `cf delete ` 180 | command. 181 | 182 | NOTE: The `task destroy ` deletes only the definition and not the task 183 | deployed on Cloud Foundry. 184 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/asciidoc/docinfo.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 25 | 26 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/asciidoc/images/PLACE_IMAGES_HERE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-attic/spring-cloud-dataflow-server-cloudfoundry/ee6a79bbadf696e5a98ce6c2b3c8f85914e27df4/spring-cloud-dataflow-server-cloudfoundry-docs/src/main/asciidoc/images/PLACE_IMAGES_HERE -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/asciidoc/images/cf-getting-started-security-no-roles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-attic/spring-cloud-dataflow-server-cloudfoundry/ee6a79bbadf696e5a98ce6c2b3c8f85914e27df4/spring-cloud-dataflow-server-cloudfoundry-docs/src/main/asciidoc/images/cf-getting-started-security-no-roles.png -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/asciidoc/index-docinfo.xml: -------------------------------------------------------------------------------- 1 | Spring Cloud Data Flow Server for Cloud Foundry 2 | {project-version} 3 | 4 | 2013-2017 5 | Pivotal Software, Inc. 6 | 7 | 8 | 9 | Copies of this document may be made for your own use and for distribution to 10 | others, provided that you do not charge any fee for such copies and further 11 | provided that each copy contains this Copyright Notice, whether distributed in 12 | print or electronically. 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | Pivotal Software, Inc. 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/asciidoc/index.adoc: -------------------------------------------------------------------------------- 1 | = Spring Cloud Data Flow Server for Cloud Foundry 2 | Sabby Anandan; Eric Bottard; Mark Fisher; Ilayaperumal Gopinathan; Gunnar Hillert; Mark Pollack; Thomas Risberg; Marius Bogoevici; Josh Long; Michael Minella; David Turanski; Vinicius Carvalho; Jay Bryant; Glenn Renfro; Christian Tzolov 3 | :doctype: book 4 | :toc: left 5 | :toclevels: 4 6 | :source-highlighter: prettify 7 | :numbered: 8 | :icons: font 9 | :hide-uri-scheme: 10 | :docinfo: shared 11 | :sectanchors: 12 | 13 | 14 | :spring-cloud-stream-docs: http://docs.spring.io/spring-cloud-stream/docs/{scst-core-version}/reference/htmlsingle/index.html 15 | :github-code: https://github.com/spring-cloud/spring-cloud-dataflow-server-cloudfoundry 16 | 17 | ifdef::backend-html5[] 18 | 19 | Version: {project-version} 20 | 21 | (C) 2012-2018 Pivotal Software, Inc. 22 | 23 | Copies of this document may be made for your own use and for distribution to 24 | others, provided that you do not charge any fee for such copies and further 25 | provided that each copy contains this Copyright Notice, whether distributed in 26 | print or electronically. 27 | 28 | endif::backend-html5[] 29 | 30 | // ====================================================================================== 31 | 32 | include::getting-started.adoc[] 33 | 34 | include::{dataflow-asciidoc}/applications.adoc[] 35 | 36 | include::{dataflow-asciidoc}/architecture.adoc[] 37 | 38 | include::configuration.adoc[] 39 | 40 | include::{dataflow-asciidoc}/shell.adoc[] 41 | 42 | include::{dataflow-asciidoc}/streams.adoc[] 43 | 44 | include::{dataflow-asciidoc}/tasks.adoc[] 45 | 46 | include::cf-tasks.adoc[] 47 | 48 | include::{dataflow-asciidoc}/dashboard.adoc[] 49 | 50 | include::api-guide-link.adoc[] 51 | 52 | include::appendix.adoc[] 53 | 54 | 55 | // ====================================================================================== 56 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/asciidoc/overview.adoc: -------------------------------------------------------------------------------- 1 | streams[[spring-cloud-data-flow-overview]] 2 | == Spring Cloud Data Flow 3 | Spring Cloud Data Flow is a cloud-native orchestration service for composable microservice applications on modern runtimes. 4 | With Spring Cloud Data Flow, developers can create and orchestrate data pipelines for common use cases such as data ingest, 5 | real-time analytics, and data import/export. 6 | 7 | The Spring Cloud Data Flow architecture consists of a server that deploys http://docs.spring.io/spring-cloud-dataflow/docs/{scdf-core-version}/reference/htmlsingle/#streams[Streams] 8 | and http://docs.spring.io/spring-cloud-dataflow/docs/{scdf-core-version}/reference/htmlsingle/#spring-cloud-task-overview[Tasks]. 9 | Streams and Tasks are defined using a http://docs.spring.io/spring-cloud-dataflow/docs/{scdf-core-version}/reference/html/_dsl_syntax.html[DSL] 10 | or visually through the browser based designer UI. Streams and Tasks are based on http://cloud.spring.io/spring-cloud-stream/[Spring Cloud Stream] 11 | and http://cloud.spring.io/spring-cloud-task/[Spring Cloud Task] programming models respectively. 12 | 13 | For more details about the core architecture components and the supported features, please review Spring Cloud Data Flow's 14 | http://docs.spring.io/spring-cloud-dataflow/docs/{scdf-core-version}/reference/htmlsingle/[core reference guide]. 15 | There're several https://github.com/spring-cloud/spring-cloud-dataflow-samples[samples] available for reference. 16 | 17 | [[spring-cloud-stream-overview]] 18 | == Spring Cloud Stream 19 | Spring Cloud Stream is a framework for building message-driven microservice applications. Spring Cloud Stream builds upon 20 | Spring Boot to create standalone, production-grade Spring applications, and uses Spring Integration to provide connectivity 21 | to message brokers. It provides opinionated configuration of middleware from several vendors, introducing the concepts of 22 | persistent publish-subscribe semantics, consumer groups, and partitions. 23 | 24 | For more details about the core framework components and the supported features, please review Spring Cloud Stream's 25 | http://docs.spring.io/spring-cloud-stream/docs/{scst-core-version}/reference/htmlsingle/[reference guide]. 26 | 27 | There's a rich ecosystem of Spring Cloud Stream http://docs.spring.io/spring-cloud-stream-app-starters/docs/{scst-starters-core-version}/reference/htmlsingle[Application-Starters] 28 | that can be used either as standalone microservice applications or in Spring Cloud Data Flow. For convenience, we have 29 | generated RabbitMQ and Apache Kafka variants of these application-starters that are available for use from http://repo.spring.io/libs-snapshot/org/springframework/cloud/stream/app/[Maven Repo] 30 | and https://hub.docker.com/r/springcloudstream/[Docker Hub] as maven artifacts and docker images, respectively. 31 | 32 | Do you have a requirement to develop custom applications? No problem. Refer to this guide to create 33 | http://docs.spring.io/spring-cloud-stream-app-starters/docs/{scst-starters-core-version}/reference/htmlsingle/#_creating_custom_artifacts[custom stream applications]. 34 | There're several https://github.com/spring-cloud/spring-cloud-stream-samples[samples] available for reference. 35 | 36 | [[spring-cloud-task-overview]] 37 | == Spring Cloud Task 38 | 39 | Spring Cloud Task makes it easy to create short-lived microservices. We provide capabilities that allow short-lived JVM 40 | processes to be executed on demand in a production environment. 41 | 42 | For more details about the core framework components and the supported features, please review Spring Cloud Task's 43 | http://docs.spring.io/spring-cloud-task/docs/{sct-core-version}/reference/htmlsingle/[reference guide]. 44 | 45 | There's a rich ecosystem of Spring Cloud Task http://docs.spring.io/spring-cloud-task-app-starters/docs/{sct-starters-core-version}/reference/htmlsingle[Application-Starters] 46 | that can be used either as standalone microservice applications or in Spring Cloud Data Flow. For convenience, the generated 47 | application-starters are available for use from http://repo.spring.io/libs-snapshot/org/springframework/cloud/task/app/[Maven Repo]. 48 | There are several https://github.com/spring-cloud/spring-cloud-task/tree/master/spring-cloud-task-samples[samples] available for reference. 49 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/css/highlight.css: -------------------------------------------------------------------------------- 1 | /* 2 | code highlight CSS resemblign the Eclipse IDE default color schema 3 | @author Costin Leau 4 | */ 5 | 6 | .hl-keyword { 7 | color: #7F0055; 8 | font-weight: bold; 9 | } 10 | 11 | .hl-comment { 12 | color: #3F5F5F; 13 | font-style: italic; 14 | } 15 | 16 | .hl-multiline-comment { 17 | color: #3F5FBF; 18 | font-style: italic; 19 | } 20 | 21 | .hl-tag { 22 | color: #3F7F7F; 23 | } 24 | 25 | .hl-attribute { 26 | color: #7F007F; 27 | } 28 | 29 | .hl-value { 30 | color: #2A00FF; 31 | } 32 | 33 | .hl-string { 34 | color: #2A00FF; 35 | } -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/css/manual-multipage.css: -------------------------------------------------------------------------------- 1 | @IMPORT url("manual.css"); 2 | 3 | body.firstpage { 4 | background: url("../images/background.png") no-repeat center top; 5 | } 6 | 7 | div.part h1 { 8 | border-top: none; 9 | } 10 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/css/manual-singlepage.css: -------------------------------------------------------------------------------- 1 | @IMPORT url("manual.css"); 2 | 3 | body { 4 | background: url("../images/background.png") no-repeat center top; 5 | } 6 | 7 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/css/manual.css: -------------------------------------------------------------------------------- 1 | @IMPORT url("highlight.css"); 2 | 3 | html { 4 | padding: 0pt; 5 | margin: 0pt; 6 | } 7 | 8 | body { 9 | color: #333333; 10 | margin: 15px 30px; 11 | font-family: Helvetica, Arial, Freesans, Clean, Sans-serif; 12 | line-height: 1.6; 13 | -webkit-font-smoothing: antialiased; 14 | } 15 | 16 | code { 17 | font-size: 16px; 18 | font-family: Consolas, "Liberation Mono", Courier, monospace; 19 | } 20 | 21 | :not(a)>code { 22 | color: #6D180B; 23 | } 24 | 25 | :not(pre)>code { 26 | background-color: #F2F2F2; 27 | border: 1px solid #CCCCCC; 28 | border-radius: 4px; 29 | padding: 1px 3px 0; 30 | text-shadow: none; 31 | white-space: nowrap; 32 | } 33 | 34 | body>*:first-child { 35 | margin-top: 0 !important; 36 | } 37 | 38 | div { 39 | margin: 0pt; 40 | } 41 | 42 | hr { 43 | border: 1px solid #CCCCCC; 44 | background: #CCCCCC; 45 | } 46 | 47 | h1,h2,h3,h4,h5,h6 { 48 | color: #000000; 49 | cursor: text; 50 | font-weight: bold; 51 | margin: 30px 0 10px; 52 | padding: 0; 53 | } 54 | 55 | h1,h2,h3 { 56 | margin: 40px 0 10px; 57 | } 58 | 59 | h1 { 60 | margin: 70px 0 30px; 61 | padding-top: 20px; 62 | } 63 | 64 | div.part h1 { 65 | border-top: 1px dotted #CCCCCC; 66 | } 67 | 68 | h1,h1 code { 69 | font-size: 32px; 70 | } 71 | 72 | h2,h2 code { 73 | font-size: 24px; 74 | } 75 | 76 | h3,h3 code { 77 | font-size: 20px; 78 | } 79 | 80 | h4,h1 code,h5,h5 code,h6,h6 code { 81 | font-size: 18px; 82 | } 83 | 84 | div.book,div.chapter,div.appendix,div.part,div.preface { 85 | min-width: 300px; 86 | max-width: 1200px; 87 | margin: 0 auto; 88 | } 89 | 90 | p.releaseinfo { 91 | font-weight: bold; 92 | margin-bottom: 40px; 93 | margin-top: 40px; 94 | } 95 | 96 | div.authorgroup { 97 | line-height: 1; 98 | } 99 | 100 | p.copyright { 101 | line-height: 1; 102 | margin-bottom: -5px; 103 | } 104 | 105 | .legalnotice p { 106 | font-style: italic; 107 | font-size: 14px; 108 | line-height: 1; 109 | } 110 | 111 | div.titlepage+p,div.titlepage+p { 112 | margin-top: 0; 113 | } 114 | 115 | pre { 116 | line-height: 1.0; 117 | color: black; 118 | } 119 | 120 | a { 121 | color: #4183C4; 122 | text-decoration: none; 123 | } 124 | 125 | p { 126 | margin: 15px 0; 127 | text-align: left; 128 | } 129 | 130 | ul,ol { 131 | padding-left: 30px; 132 | } 133 | 134 | li p { 135 | margin: 0; 136 | } 137 | 138 | div.table { 139 | margin: 1em; 140 | padding: 0.5em; 141 | text-align: center; 142 | } 143 | 144 | div.table table,div.informaltable table { 145 | display: table; 146 | width: 100%; 147 | } 148 | 149 | div.table td { 150 | padding-left: 7px; 151 | padding-right: 7px; 152 | } 153 | 154 | .sidebar { 155 | line-height: 1.4; 156 | padding: 0 20px; 157 | background-color: #F8F8F8; 158 | border: 1px solid #CCCCCC; 159 | border-radius: 3px 3px 3px 3px; 160 | } 161 | 162 | .sidebar p.title { 163 | color: #6D180B; 164 | } 165 | 166 | pre.programlisting,pre.screen { 167 | font-size: 15px; 168 | padding: 6px 10px; 169 | background-color: #F8F8F8; 170 | border: 1px solid #CCCCCC; 171 | border-radius: 3px 3px 3px 3px; 172 | clear: both; 173 | overflow: auto; 174 | line-height: 1.4; 175 | font-family: Consolas, "Liberation Mono", Courier, monospace; 176 | } 177 | 178 | table { 179 | border-collapse: collapse; 180 | border-spacing: 0; 181 | border: 1px solid #DDDDDD !important; 182 | border-radius: 4px !important; 183 | border-collapse: separate !important; 184 | line-height: 1.6; 185 | } 186 | 187 | table thead { 188 | background: #F5F5F5; 189 | } 190 | 191 | table tr { 192 | border: none; 193 | border-bottom: none; 194 | } 195 | 196 | table th { 197 | font-weight: bold; 198 | } 199 | 200 | table th,table td { 201 | border: none !important; 202 | padding: 6px 13px; 203 | } 204 | 205 | table tr:nth-child(2n) { 206 | background-color: #F8F8F8; 207 | } 208 | 209 | td p { 210 | margin: 0 0 15px 0; 211 | } 212 | 213 | div.table-contents td p { 214 | margin: 0; 215 | } 216 | 217 | div.important *,div.note *,div.tip *,div.warning *,div.navheader *,div.navfooter *,div.calloutlist * 218 | { 219 | border: none !important; 220 | background: none !important; 221 | margin: 0; 222 | } 223 | 224 | div.important p,div.note p,div.tip p,div.warning p { 225 | color: #6F6F6F; 226 | line-height: 1.6; 227 | } 228 | 229 | div.important code,div.note code,div.tip code,div.warning code { 230 | background-color: #F2F2F2 !important; 231 | border: 1px solid #CCCCCC !important; 232 | border-radius: 4px !important; 233 | padding: 1px 3px 0 !important; 234 | text-shadow: none !important; 235 | white-space: nowrap !important; 236 | } 237 | 238 | .note th,.tip th,.warning th { 239 | display: none; 240 | } 241 | 242 | .note tr:first-child td,.tip tr:first-child td,.warning tr:first-child td 243 | { 244 | border-right: 1px solid #CCCCCC !important; 245 | padding-top: 10px; 246 | } 247 | 248 | div.calloutlist p,div.calloutlist td { 249 | padding: 0; 250 | margin: 0; 251 | } 252 | 253 | div.calloutlist>table>tbody>tr>td:first-child { 254 | padding-left: 10px; 255 | width: 30px !important; 256 | } 257 | 258 | div.important,div.note,div.tip,div.warning { 259 | margin-left: 0px !important; 260 | margin-right: 20px !important; 261 | margin-top: 20px; 262 | margin-bottom: 20px; 263 | padding-top: 10px; 264 | padding-bottom: 10px; 265 | } 266 | 267 | div.toc { 268 | line-height: 1.2; 269 | } 270 | 271 | dl,dt { 272 | margin-top: 1px; 273 | margin-bottom: 0; 274 | } 275 | 276 | div.toc>dl>dt { 277 | font-size: 32px; 278 | font-weight: bold; 279 | margin: 30px 0 10px 0; 280 | display: block; 281 | } 282 | 283 | div.toc>dl>dd>dl>dt { 284 | font-size: 24px; 285 | font-weight: bold; 286 | margin: 20px 0 10px 0; 287 | display: block; 288 | } 289 | 290 | div.toc>dl>dd>dl>dd>dl>dt { 291 | font-weight: bold; 292 | font-size: 20px; 293 | margin: 10px 0 0 0; 294 | } 295 | 296 | tbody.footnotes * { 297 | border: none !important; 298 | } 299 | 300 | div.footnote p { 301 | margin: 0; 302 | line-height: 1; 303 | } 304 | 305 | div.footnote p sup { 306 | margin-right: 6px; 307 | vertical-align: middle; 308 | } 309 | 310 | div.navheader { 311 | border-bottom: 1px solid #CCCCCC; 312 | } 313 | 314 | div.navfooter { 315 | border-top: 1px solid #CCCCCC; 316 | } 317 | 318 | .title { 319 | margin-left: -1em; 320 | padding-left: 1em; 321 | } 322 | 323 | .title>a { 324 | position: absolute; 325 | visibility: hidden; 326 | display: block; 327 | font-size: 0.85em; 328 | margin-top: 0.05em; 329 | margin-left: -1em; 330 | vertical-align: text-top; 331 | color: black; 332 | } 333 | 334 | .title>a:before { 335 | content: "\00A7"; 336 | } 337 | 338 | .title:hover>a,.title>a:hover,.title:hover>a:hover { 339 | visibility: visible; 340 | } 341 | 342 | .title:focus>a,.title>a:focus,.title:focus>a:focus { 343 | outline: 0; 344 | } 345 | 346 | .mediaobject img { 347 | max-width: 100%; 348 | } 349 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/images/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-attic/spring-cloud-dataflow-server-cloudfoundry/ee6a79bbadf696e5a98ce6c2b3c8f85914e27df4/spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/images/background.png -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/images/caution.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-attic/spring-cloud-dataflow-server-cloudfoundry/ee6a79bbadf696e5a98ce6c2b3c8f85914e27df4/spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/images/caution.png -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/images/cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-attic/spring-cloud-dataflow-server-cloudfoundry/ee6a79bbadf696e5a98ce6c2b3c8f85914e27df4/spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/images/cover.png -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/images/important.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-attic/spring-cloud-dataflow-server-cloudfoundry/ee6a79bbadf696e5a98ce6c2b3c8f85914e27df4/spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/images/important.png -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-attic/spring-cloud-dataflow-server-cloudfoundry/ee6a79bbadf696e5a98ce6c2b3c8f85914e27df4/spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/images/logo.png -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/images/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/images/note.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-attic/spring-cloud-dataflow-server-cloudfoundry/ee6a79bbadf696e5a98ce6c2b3c8f85914e27df4/spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/images/note.png -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/images/tip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-attic/spring-cloud-dataflow-server-cloudfoundry/ee6a79bbadf696e5a98ce6c2b3c8f85914e27df4/spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/images/tip.png -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/images/warning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-attic/spring-cloud-dataflow-server-cloudfoundry/ee6a79bbadf696e5a98ce6c2b3c8f85914e27df4/spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/images/warning.png -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/xsl/common.xsl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 21 | 22 | 27 | 28 | 29 | 1 30 | 0 31 | 1 32 | 33 | 34 | 35 | images/ 36 | .png 37 | 38 | 39 | book toc,title 40 | 3 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/xsl/epub.xsl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 21 | 22 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/xsl/html-multipage.xsl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 21 | 22 | 24 | 25 | 26 | 27 | 28 | css/manual-multipage.css 29 | 30 | '5' 31 | '1' 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | firstpage 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/xsl/html-singlepage.xsl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 21 | 22 | 24 | 25 | 26 | 27 | 28 | css/manual-singlepage.css 29 | 30 | 31 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/xsl/html.xsl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 21 | 22 | 27 | 28 | 29 | 30 | 31 | 32 | 1 33 | 34 | 35 | 1 36 | 37 | 38 | 39 | 120 40 | images/callouts/ 41 | .png 42 | 43 | 44 | text/css 45 | 46 | text-align: left 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | , 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 |

114 |

Authors

115 | 116 |
117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | # 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/xsl/xslthl-config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/xsl/xslthl/asciidoc-hl.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | //// 10 | //// 11 | 12 | 13 | // 14 | 15 | 16 | 17 | ^(={1,6} .+)$ 18 | 19 | MULTILINE 20 | 21 | 22 | ^(\.[^\.\s].+)$ 23 | 24 | MULTILINE 25 | 26 | 27 | ^(:!?\w.*?:) 28 | 29 | MULTILINE 30 | 31 | 32 | ^(-|\*{1,5}|\d*\.{1,5})(?= .+$) 33 | 34 | MULTILINE 35 | 36 | 37 | ^(\[.+\])$ 38 | 39 | MULTILINE 40 | 41 | 42 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/xsl/xslthl/bourne-hl.xml: -------------------------------------------------------------------------------- 1 | 2 | 27 | 28 | # 29 | 30 | << 31 | ' 32 | " 33 | - 34 | 35 | 36 | 37 | 38 | " 39 | \ 40 | 41 | 42 | ' 43 | \ 44 | 45 | 46 | 47 | 0x 48 | 49 | 50 | 51 | . 52 | 53 | 54 | 55 | 56 | 57 | if 58 | then 59 | else 60 | elif 61 | fi 62 | case 63 | esac 64 | for 65 | while 66 | until 67 | do 68 | done 69 | 70 | exec 71 | shift 72 | exit 73 | times 74 | break 75 | export 76 | trap 77 | continue 78 | readonly 79 | wait 80 | eval 81 | return 82 | 83 | cd 84 | echo 85 | hash 86 | pwd 87 | read 88 | set 89 | test 90 | type 91 | ulimit 92 | umask 93 | unset 94 | 95 | 96 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/xsl/xslthl/c-hl.xml: -------------------------------------------------------------------------------- 1 | 2 | 29 | 30 | 31 | /** 32 | */ 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | /* 41 | */ 42 | 43 | // 44 | 45 | 46 | # 47 | \ 48 | 49 | 50 | 51 | 52 | " 53 | \ 54 | 55 | 56 | ' 57 | \ 58 | 59 | 60 | 0x 61 | ul 62 | lu 63 | u 64 | l 65 | 66 | 67 | 68 | . 69 | 70 | e 71 | ul 72 | lu 73 | u 74 | f 75 | l 76 | 77 | 78 | 79 | auto 80 | _Bool 81 | break 82 | case 83 | char 84 | _Complex 85 | const 86 | continue 87 | default 88 | do 89 | double 90 | else 91 | enum 92 | extern 93 | float 94 | for 95 | goto 96 | if 97 | _Imaginary 98 | inline 99 | int 100 | long 101 | register 102 | restrict 103 | return 104 | short 105 | signed 106 | sizeof 107 | static 108 | struct 109 | switch 110 | typedef 111 | union 112 | unsigned 113 | void 114 | volatile 115 | while 116 | 117 | 118 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/xsl/xslthl/cpp-hl.xml: -------------------------------------------------------------------------------- 1 | 2 | 31 | 32 | 33 | /** 34 | */ 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | /* 43 | */ 44 | 45 | // 46 | 47 | 48 | # 49 | \ 50 | 51 | 52 | 53 | 54 | " 55 | \ 56 | 57 | 58 | ' 59 | \ 60 | 61 | 62 | 0x 63 | ul 64 | lu 65 | u 66 | l 67 | 68 | 69 | 70 | . 71 | 72 | e 73 | ul 74 | lu 75 | u 76 | f 77 | l 78 | 79 | 80 | 81 | 82 | auto 83 | _Bool 84 | break 85 | case 86 | char 87 | _Complex 88 | const 89 | continue 90 | default 91 | do 92 | double 93 | else 94 | enum 95 | extern 96 | float 97 | for 98 | goto 99 | if 100 | _Imaginary 101 | inline 102 | int 103 | long 104 | register 105 | restrict 106 | return 107 | short 108 | signed 109 | sizeof 110 | static 111 | struct 112 | switch 113 | typedef 114 | union 115 | unsigned 116 | void 117 | volatile 118 | while 119 | 120 | asm 121 | dynamic_cast 122 | namespace 123 | reinterpret_cast 124 | try 125 | bool 126 | explicit 127 | new 128 | static_cast 129 | typeid 130 | catch 131 | false 132 | operator 133 | template 134 | typename 135 | class 136 | friend 137 | private 138 | this 139 | using 140 | const_cast 141 | inline 142 | public 143 | throw 144 | virtual 145 | delete 146 | mutable 147 | protected 148 | true 149 | wchar_t 150 | 151 | 152 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/xsl/xslthl/csharp-hl.xml: -------------------------------------------------------------------------------- 1 | 2 | 31 | 32 | 33 | /** 34 | */ 35 | 36 | 37 | 38 | /// 39 | 40 | 41 | 42 | /* 43 | */ 44 | 45 | // 46 | 47 | 48 | [ 49 | ] 50 | ( 51 | ) 52 | 53 | 54 | 55 | # 56 | \ 57 | 58 | 59 | 60 | 61 | 62 | @" 63 | " 64 | \ 65 | 66 | 67 | 68 | " 69 | \ 70 | 71 | 72 | ' 73 | \ 74 | 75 | 76 | 0x 77 | ul 78 | lu 79 | u 80 | l 81 | 82 | 83 | 84 | . 85 | 86 | e 87 | ul 88 | lu 89 | u 90 | f 91 | d 92 | m 93 | l 94 | 95 | 96 | 97 | abstract 98 | as 99 | base 100 | bool 101 | break 102 | byte 103 | case 104 | catch 105 | char 106 | checked 107 | class 108 | const 109 | continue 110 | decimal 111 | default 112 | delegate 113 | do 114 | double 115 | else 116 | enum 117 | event 118 | explicit 119 | extern 120 | false 121 | finally 122 | fixed 123 | float 124 | for 125 | foreach 126 | goto 127 | if 128 | implicit 129 | in 130 | int 131 | interface 132 | internal 133 | is 134 | lock 135 | long 136 | namespace 137 | new 138 | null 139 | object 140 | operator 141 | out 142 | override 143 | params 144 | private 145 | protected 146 | public 147 | readonly 148 | ref 149 | return 150 | sbyte 151 | sealed 152 | short 153 | sizeof 154 | stackalloc 155 | static 156 | string 157 | struct 158 | switch 159 | this 160 | throw 161 | true 162 | try 163 | typeof 164 | uint 165 | ulong 166 | unchecked 167 | unsafe 168 | ushort 169 | using 170 | virtual 171 | void 172 | volatile 173 | while 174 | 175 | 176 | 177 | add 178 | alias 179 | from 180 | get 181 | global 182 | group 183 | into 184 | join 185 | orderby 186 | partial 187 | remove 188 | select 189 | set 190 | value 191 | where 192 | yield 193 | 194 | 195 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/xsl/xslthl/css-hl.xml: -------------------------------------------------------------------------------- 1 | 2 | 32 | 33 | 34 | /* 35 | */ 36 | 37 | 38 | " 39 | \ 40 | 41 | 42 | 43 | ' 44 | \ 45 | 46 | 47 | 48 | . 49 | 50 | 51 | 52 | @charset 53 | @import 54 | @media 55 | @page 56 | 57 | 58 | 59 | - 60 | azimuth 61 | background-attachment 62 | background-color 63 | background-image 64 | background-position 65 | background-repeat 66 | background 67 | border-collapse 68 | border-color 69 | border-spacing 70 | border-style 71 | border-top 72 | border-right 73 | border-bottom 74 | border-left 75 | border-top-color 76 | border-right-color 77 | border-bottom-color 78 | border-left-color 79 | border-top-style 80 | border-right-style 81 | border-bottom-style 82 | border-left-style 83 | border-top-width 84 | border-right-width 85 | border-bottom-width 86 | border-left-width 87 | border-width 88 | border 89 | bottom 90 | caption-side 91 | clear 92 | clip 93 | color 94 | content 95 | counter-increment 96 | counter-reset 97 | cue-after 98 | cue-before 99 | cue 100 | cursor 101 | direction 102 | display 103 | elevation 104 | empty-cells 105 | float 106 | font-family 107 | font-size 108 | font-style 109 | font-variant 110 | font-weight 111 | font 112 | height 113 | left 114 | letter-spacing 115 | line-height 116 | list-style-image 117 | list-style-position 118 | list-style-type 119 | list-style 120 | margin-right 121 | margin-left 122 | margin-top 123 | margin-bottom 124 | margin 125 | max-height 126 | max-width 127 | min-height 128 | min-width 129 | orphans 130 | outline-color 131 | outline-style 132 | outline-width 133 | outline 134 | overflow 135 | padding-top 136 | padding-right 137 | padding-bottom 138 | padding-left 139 | padding 140 | page-break-after 141 | page-break-before 142 | page-break-inside 143 | pause-after 144 | pause-before 145 | pause 146 | pitch-range 147 | pitch 148 | play-during 149 | position 150 | quotes 151 | richness 152 | right 153 | speak-header 154 | speak-numeral 155 | speak-punctuation 156 | speak 157 | speech-rate 158 | stress 159 | table-layout 160 | text-align 161 | text-decoration 162 | text-indent 163 | text-transform 164 | top 165 | unicode-bidi 166 | vertical-align 167 | visibility 168 | voice-family 169 | volume 170 | white-space 171 | widows 172 | width 173 | word-spacing 174 | z-index 175 | 176 | 177 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/xsl/xslthl/html-hl.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 14 | 15 | 16 | a 17 | abbr 18 | address 19 | area 20 | article 21 | aside 22 | audio 23 | b 24 | base 25 | bdi 26 | blockquote 27 | body 28 | br 29 | button 30 | caption 31 | canvas 32 | cite 33 | code 34 | command 35 | col 36 | colgroup 37 | dd 38 | del 39 | dialog 40 | div 41 | dl 42 | dt 43 | em 44 | embed 45 | fieldset 46 | figcaption 47 | figure 48 | font 49 | form 50 | footer 51 | h1 52 | h2 53 | h3 54 | h4 55 | h5 56 | h6 57 | head 58 | header 59 | hr 60 | html 61 | i 62 | iframe 63 | img 64 | input 65 | ins 66 | kbd 67 | label 68 | legend 69 | li 70 | link 71 | map 72 | mark 73 | menu 74 | menu 75 | meta 76 | nav 77 | noscript 78 | object 79 | ol 80 | optgroup 81 | option 82 | p 83 | param 84 | pre 85 | q 86 | samp 87 | script 88 | section 89 | select 90 | small 91 | source 92 | span 93 | strong 94 | style 95 | sub 96 | summary 97 | sup 98 | table 99 | tbody 100 | td 101 | textarea 102 | tfoot 103 | th 104 | thead 105 | time 106 | title 107 | tr 108 | track 109 | u 110 | ul 111 | var 112 | video 113 | wbr 114 | xmp 115 | 116 | 117 | 118 | 119 | xsl: 120 | 121 | 122 | 123 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/xsl/xslthl/ini-hl.xml: -------------------------------------------------------------------------------- 1 | 2 | 31 | 32 | ; 33 | 34 | 35 | ^(\[.+\]\s*)$ 36 | 37 | MULTILINE 38 | 39 | 40 | 41 | ^(.+)(?==) 42 | 43 | MULTILINE 44 | 45 | 46 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/xsl/xslthl/java-hl.xml: -------------------------------------------------------------------------------- 1 | 2 | 31 | 32 | 33 | /** 34 | */ 35 | 36 | 37 | 38 | /* 39 | */ 40 | 41 | // 42 | 43 | " 44 | \ 45 | 46 | 47 | ' 48 | \ 49 | 50 | 51 | @ 52 | ( 53 | ) 54 | 55 | 56 | 0x 57 | 58 | 59 | 60 | . 61 | e 62 | f 63 | d 64 | l 65 | 66 | 67 | 68 | abstract 69 | boolean 70 | break 71 | byte 72 | case 73 | catch 74 | char 75 | class 76 | const 77 | continue 78 | default 79 | do 80 | double 81 | else 82 | extends 83 | final 84 | finally 85 | float 86 | for 87 | goto 88 | if 89 | implements 90 | import 91 | instanceof 92 | int 93 | interface 94 | long 95 | native 96 | new 97 | package 98 | private 99 | protected 100 | public 101 | return 102 | short 103 | static 104 | strictfp 105 | super 106 | switch 107 | synchronized 108 | this 109 | throw 110 | throws 111 | transient 112 | try 113 | void 114 | volatile 115 | while 116 | 117 | 118 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/xsl/xslthl/javascript-hl.xml: -------------------------------------------------------------------------------- 1 | 2 | 31 | 32 | 33 | /* 34 | */ 35 | 36 | // 37 | 38 | " 39 | \ 40 | 41 | 42 | ' 43 | \ 44 | 45 | 46 | 0x 47 | 48 | 49 | 50 | . 51 | e 52 | 53 | 54 | 55 | break 56 | case 57 | catch 58 | continue 59 | default 60 | delete 61 | do 62 | else 63 | finally 64 | for 65 | function 66 | if 67 | in 68 | instanceof 69 | new 70 | return 71 | switch 72 | this 73 | throw 74 | try 75 | typeof 76 | var 77 | void 78 | while 79 | with 80 | 81 | abstract 82 | boolean 83 | byte 84 | char 85 | class 86 | const 87 | debugger 88 | double 89 | enum 90 | export 91 | extends 92 | final 93 | float 94 | goto 95 | implements 96 | import 97 | int 98 | interface 99 | long 100 | native 101 | package 102 | private 103 | protected 104 | public 105 | short 106 | static 107 | super 108 | synchronized 109 | throws 110 | transient 111 | volatile 112 | 113 | 114 | prototype 115 | 116 | Array 117 | Boolean 118 | Date 119 | Error 120 | EvalError 121 | Function 122 | Math 123 | Number 124 | Object 125 | RangeError 126 | ReferenceError 127 | RegExp 128 | String 129 | SyntaxError 130 | TypeError 131 | URIError 132 | 133 | decodeURI 134 | decodeURIComponent 135 | encodeURI 136 | encodeURIComponent 137 | eval 138 | isFinite 139 | isNaN 140 | parseFloat 141 | parseInt 142 | 143 | Infinity 144 | NaN 145 | undefined 146 | 147 | 148 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/xsl/xslthl/json-hl.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | # 4 | 5 | " 6 | \ 7 | 8 | 9 | ' 10 | \ 11 | 12 | 13 | @ 14 | ( 15 | ) 16 | 17 | 18 | . 19 | e 20 | f 21 | d 22 | l 23 | 24 | 25 | 26 | true 27 | false 28 | 29 | 30 | { 31 | } 32 | , 33 | [ 34 | ] 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/xsl/xslthl/perl-hl.xml: -------------------------------------------------------------------------------- 1 | 2 | 31 | 32 | # 33 | 34 | << 35 | ' 36 | " 37 | 38 | 39 | 40 | " 41 | \ 42 | 43 | 44 | ' 45 | \ 46 | 47 | 48 | 49 | 0x 50 | 51 | 52 | 53 | . 54 | 55 | 56 | 57 | 58 | if 59 | unless 60 | while 61 | until 62 | foreach 63 | else 64 | elsif 65 | for 66 | when 67 | default 68 | given 69 | 70 | caller 71 | continue 72 | die 73 | do 74 | dump 75 | eval 76 | exit 77 | goto 78 | last 79 | next 80 | redo 81 | return 82 | sub 83 | wantarray 84 | 85 | caller 86 | import 87 | local 88 | my 89 | package 90 | use 91 | 92 | do 93 | import 94 | no 95 | package 96 | require 97 | use 98 | 99 | bless 100 | dbmclose 101 | dbmopen 102 | package 103 | ref 104 | tie 105 | tied 106 | untie 107 | use 108 | 109 | and 110 | or 111 | not 112 | eq 113 | ne 114 | lt 115 | gt 116 | le 117 | ge 118 | cmp 119 | 120 | 121 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/xsl/xslthl/php-hl.xml: -------------------------------------------------------------------------------- 1 | 2 | 31 | 32 | 33 | /** 34 | */ 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | /* 43 | */ 44 | 45 | // 46 | # 47 | 48 | " 49 | \ 50 | 51 | 52 | 53 | ' 54 | \ 55 | 56 | 57 | 58 | <<< 59 | 60 | 61 | 0x 62 | 63 | 64 | 65 | . 66 | e 67 | 68 | 69 | 70 | and 71 | or 72 | xor 73 | __FILE__ 74 | exception 75 | __LINE__ 76 | array 77 | as 78 | break 79 | case 80 | class 81 | const 82 | continue 83 | declare 84 | default 85 | die 86 | do 87 | echo 88 | else 89 | elseif 90 | empty 91 | enddeclare 92 | endfor 93 | endforeach 94 | endif 95 | endswitch 96 | endwhile 97 | eval 98 | exit 99 | extends 100 | for 101 | foreach 102 | function 103 | global 104 | if 105 | include 106 | include_once 107 | isset 108 | list 109 | new 110 | print 111 | require 112 | require_once 113 | return 114 | static 115 | switch 116 | unset 117 | use 118 | var 119 | while 120 | __FUNCTION__ 121 | __CLASS__ 122 | __METHOD__ 123 | final 124 | php_user_filter 125 | interface 126 | implements 127 | extends 128 | public 129 | private 130 | protected 131 | abstract 132 | clone 133 | try 134 | catch 135 | throw 136 | cfunction 137 | old_function 138 | true 139 | false 140 | 141 | namespace 142 | __NAMESPACE__ 143 | goto 144 | __DIR__ 145 | 146 | 147 | 148 | 149 | ?> 150 | <?php 151 | <?= 152 | 153 | 154 | 155 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/xsl/xslthl/properties-hl.xml: -------------------------------------------------------------------------------- 1 | 2 | 31 | 32 | # 33 | 34 | ^(.+?)(?==|:) 35 | 36 | MULTILINE 37 | 38 | 39 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/xsl/xslthl/python-hl.xml: -------------------------------------------------------------------------------- 1 | 2 | 31 | 32 | 33 | 34 | @ 35 | ( 36 | ) 37 | 38 | # 39 | 40 | """ 41 | 42 | 43 | 44 | ''' 45 | 46 | 47 | 48 | " 49 | \ 50 | 51 | 52 | ' 53 | \ 54 | 55 | 56 | 0x 57 | l 58 | 59 | 60 | 61 | . 62 | 63 | e 64 | l 65 | 66 | 67 | 68 | and 69 | del 70 | from 71 | not 72 | while 73 | as 74 | elif 75 | global 76 | or 77 | with 78 | assert 79 | else 80 | if 81 | pass 82 | yield 83 | break 84 | except 85 | import 86 | print 87 | class 88 | exec 89 | in 90 | raise 91 | continue 92 | finally 93 | is 94 | return 95 | def 96 | for 97 | lambda 98 | try 99 | 100 | 101 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/xsl/xslthl/ruby-hl.xml: -------------------------------------------------------------------------------- 1 | 2 | 31 | 32 | # 33 | 34 | << 35 | 36 | 37 | 38 | " 39 | \ 40 | 41 | 42 | %Q{ 43 | } 44 | \ 45 | 46 | 47 | %/ 48 | / 49 | \ 50 | 51 | 52 | ' 53 | \ 54 | 55 | 56 | %q{ 57 | } 58 | \ 59 | 60 | 61 | 0x 62 | 63 | 64 | 65 | . 66 | e 67 | 68 | 69 | 70 | alias 71 | and 72 | BEGIN 73 | begin 74 | break 75 | case 76 | class 77 | def 78 | defined 79 | do 80 | else 81 | elsif 82 | END 83 | end 84 | ensure 85 | false 86 | for 87 | if 88 | in 89 | module 90 | next 91 | nil 92 | not 93 | or 94 | redo 95 | rescue 96 | retry 97 | return 98 | self 99 | super 100 | then 101 | true 102 | undef 103 | unless 104 | until 105 | when 106 | while 107 | yield 108 | 109 | 110 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry-docs/src/main/docbook/xsl/xslthl/yaml-hl.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | # 4 | 5 | " 6 | \ 7 | 8 | 9 | ' 10 | \ 11 | 12 | 13 | @ 14 | ( 15 | ) 16 | 17 | 18 | . 19 | e 20 | f 21 | d 22 | l 23 | 24 | 25 | 26 | true 27 | false 28 | 29 | 30 | { 31 | } 32 | , 33 | [ 34 | ] 35 | 36 | 37 | 38 | ^(---)$ 39 | 40 | MULTILINE 41 | 42 | 43 | ^(.+?)(?==|:) 44 | 45 | MULTILINE 46 | 47 | 48 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry/.jdk8: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-attic/spring-cloud-dataflow-server-cloudfoundry/ee6a79bbadf696e5a98ce6c2b3c8f85914e27df4/spring-cloud-dataflow-server-cloudfoundry/.jdk8 -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4.0.0 4 | spring-cloud-dataflow-server-cloudfoundry 5 | Cloud Foundry Data Flow Server 6 | jar 7 | Cloud Foundry Data Flow Server 8 | 9 | org.springframework.cloud 10 | spring-cloud-dataflow-server-cloudfoundry-parent 11 | 2.0.0.BUILD-SNAPSHOT 12 | 13 | 14 | org.springframework.cloud.dataflow.server.cloudfoundry.CloudFoundryDataFlowServer 15 | 16 | 17 | 18 | org.springframework.cloud 19 | spring-cloud-dataflow-server-cloudfoundry-autoconfig 20 | 2.0.0.BUILD-SNAPSHOT 21 | 22 | 23 | io.projectreactor 24 | reactor-core 25 | ${reactor.version} 26 | 27 | 28 | org.springframework.cloud 29 | spring-cloud-cloudfoundry-connector 30 | ${spring-cloud-cloudfoundry-connector.version} 31 | 32 | 33 | org.springframework.cloud 34 | spring-cloud-spring-service-connector 35 | ${spring-cloud-cloudfoundry-connector.version} 36 | 37 | 38 | org.springframework.boot 39 | spring-boot-starter-test 40 | test 41 | 42 | 43 | 44 | 45 | 46 | src/main/resources 47 | true 48 | 49 | dataflow-server.yml 50 | 51 | 52 | 53 | 54 | 55 | org.springframework.boot 56 | spring-boot-maven-plugin 57 | 58 | 59 | pl.project13.maven 60 | git-commit-id-plugin 61 | 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry/src/main/java/org/springframework/cloud/dataflow/server/cloudfoundry/CloudFoundryDataFlowServer.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2016 the original author or authors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.springframework.cloud.dataflow.server.cloudfoundry; 18 | 19 | import org.springframework.boot.SpringApplication; 20 | import org.springframework.boot.autoconfigure.SpringBootApplication; 21 | import org.springframework.boot.autoconfigure.session.SessionAutoConfiguration; 22 | import org.springframework.cloud.dataflow.server.EnableDataFlowServer; 23 | 24 | /** 25 | * Bootstrap class for the Cloud Foundry Spring Cloud Data Flow Server. 26 | * 27 | * @author Eric Bottard 28 | */ 29 | @SpringBootApplication(exclude = {SessionAutoConfiguration.class}) 30 | @EnableDataFlowServer 31 | public class CloudFoundryDataFlowServer { 32 | 33 | public static void main(String[] args) { 34 | SpringApplication.run(CloudFoundryDataFlowServer.class, args); 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry/src/main/resources/dataflow-server.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 9393 3 | management: 4 | contextPath: /management 5 | security: 6 | enabled: false 7 | info: 8 | app: 9 | name: "@project.artifactId@" 10 | description: "@project.name@" 11 | version: "@project.version@" 12 | spring: 13 | application: 14 | name: dataflow 15 | cloud: 16 | config: 17 | uri: http://localhost:8888 18 | deployer: 19 | cloudfoundry: 20 | task: 21 | apiTimeout: 360 22 | stream: 23 | apiTimeout: 360 24 | dataflow: 25 | security: 26 | cf-use-uaa: true 27 | 28 | # 29 | # If you prefer to use Eureka to locate the Config Server, you can do that by setting 30 | # spring.cloud.config.discovery.enabled=true (default "false"). The net result of that is 31 | # that client apps all need a bootstrap.yml (or an environment variable) with the Eureka 32 | # server address, e.g. in eureka.client.serviceUrl.defaultZone 33 | # 34 | # cloud: 35 | # config: 36 | # discovery: 37 | # enabled: true 38 | #eureka: 39 | # client: 40 | # serviceUrl: 41 | # defaultZone: http://localhost:8761/eureka/ 42 | -------------------------------------------------------------------------------- /spring-cloud-dataflow-server-cloudfoundry/src/test/java/org/springframework/cloud/dataflow/server/cloudfoundry/CloudFoundryDataFlowServerApplicationTests.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015 the original author or authors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package org.springframework.cloud.dataflow.server.cloudfoundry; 17 | 18 | import org.junit.Test; 19 | import org.junit.runner.RunWith; 20 | import org.mockito.Mockito; 21 | 22 | import org.springframework.boot.test.context.SpringBootTest; 23 | import org.springframework.cloud.deployer.spi.task.TaskLauncher; 24 | import org.springframework.context.annotation.Bean; 25 | import org.springframework.context.annotation.Configuration; 26 | import org.springframework.context.annotation.Primary; 27 | import org.springframework.test.context.junit4.SpringRunner; 28 | 29 | @RunWith(SpringRunner.class) 30 | @SpringBootTest(properties = { 31 | "spring.cloud.deployer.cloudfoundry.org=myorg," + "spring.cloud.deployer.cloudfoundry.username=myusername", 32 | "spring.cloud.deployer.cloudfoundry.password=mypassword", "spring.cloud.deployer.cloudfoundry.space=myspace", 33 | "spring.cloud.deployer.cloudfoundry.url=https://localhost", 34 | "spring.cloud.deployer.cloudfoundry.stream.api.timeout=1" }) 35 | public class CloudFoundryDataFlowServerApplicationTests { 36 | 37 | @Test 38 | public void contextLoads() { 39 | } 40 | 41 | @Configuration 42 | static public class TaskLauncherConfiguration { 43 | 44 | @Bean 45 | @Primary 46 | public TaskLauncher taskLauncher() { 47 | return Mockito.mock(TaskLauncher.class); 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/checkstyle/checkstyle-header.txt: -------------------------------------------------------------------------------- 1 | ^\Q/*\E$ 2 | ^\Q * Copyright \E(20\d\d\-)?20\d\d\Q the original author or authors.\E$ 3 | ^\Q *\E$ 4 | ^\Q * Licensed under the Apache License, Version 2.0 (the "License");\E$ 5 | ^\Q * you may not use this file except in compliance with the License.\E$ 6 | ^\Q * You may obtain a copy of the License at\E$ 7 | ^\Q *\E$ 8 | ^\Q * http://www.apache.org/licenses/LICENSE-2.0\E$ 9 | ^\Q *\E$ 10 | ^\Q * Unless required by applicable law or agreed to in writing, software\E$ 11 | ^\Q * distributed under the License is distributed on an "AS IS" BASIS,\E$ 12 | ^\Q * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\E$ 13 | ^\Q * See the License for the specific language governing permissions and\E$ 14 | ^\Q * limitations under the License.\E$ 15 | ^\Q */\E$ 16 | -------------------------------------------------------------------------------- /src/checkstyle/checkstyle.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 59 | 60 | 61 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 152 | 153 | 154 | 166 | 167 | 168 | -------------------------------------------------------------------------------- /src/eclipse/eclipse.importorder: -------------------------------------------------------------------------------- 1 | #Organize Import Order 2 | #Wed Apr 26 12:53:22 EDT 2017 3 | 4=\# 4 | 3=org.springframework 5 | 2= 6 | 1=javax 7 | 0=java 8 | --------------------------------------------------------------------------------