Getting Started with
7 |
├── .gitignore ├── CODEOWNERS ├── Gemfile ├── LICENSE ├── NOTICE ├── README.md ├── config.yml ├── config └── template_variables.yml ├── docker ├── Dockerfile ├── README.md ├── docker-compose.yml └── files │ └── Gemfile ├── manifest.yml ├── master_middleman └── source │ ├── 404.html.erb │ ├── contribute.html.md.erb │ ├── googlefb873635f2f14682.html │ ├── images │ ├── Pipe_NavBar.png │ ├── Pipe_gBar.png │ ├── bg-crowd.png │ ├── bg-plain-x.jpg │ ├── bg_social_footer.png │ ├── cf-icons.png │ ├── facebook_large.png │ ├── favicon.ico │ ├── gplus_large.png │ ├── hr-horizontal-dark.png │ ├── hr-vertical.png │ ├── ico-cancel-x.png │ ├── ico-search.png │ ├── logo-footer-pivotal.png │ ├── logo-pws.png │ ├── logo_org.png │ ├── new_logo_org.png │ ├── pws-logo-dark-bg.png │ ├── pws-logo-light-bg.png │ ├── ribbon_forkme.png │ ├── searchsprite.png │ ├── twitter_large.png │ └── youtube_large.png │ ├── index.html.md.erb │ ├── javascripts │ ├── book.js │ ├── page_initializers │ │ └── documentation.js.erb │ ├── vendor │ │ └── mermaid.js │ └── waypoints │ │ ├── context.js │ │ ├── group.js │ │ ├── noframeworkAdapter.js │ │ ├── sticky.js │ │ └── waypoint.js │ ├── layouts │ ├── _additional-scripts.erb │ ├── _book-footer.erb │ ├── _pre-content.erb │ └── layout.erb │ ├── owners.json.erb │ ├── search.html.erb │ ├── stylesheets │ ├── book-styles.scss │ ├── partials │ │ ├── _book-base-values.scss │ │ └── _book-vars.scss │ └── vendor │ │ └── mermaid.scss │ └── subnavs │ └── _cf-subnav.erb ├── redirects.rb └── run.sh /.gitignore: -------------------------------------------------------------------------------- 1 | output 2 | final_app 3 | .bundle 4 | Gemfile.lock 5 | final_app/* 6 | cached_shas.yml 7 | **/.sass-cache/* 8 | bin 9 | vendor 10 | [#]*[#] 11 | .DS_Store 12 | .ruby-version 13 | .vscode/ -------------------------------------------------------------------------------- /CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @cloudfoundry/wg-app-runtime-platform-docs-approvers 2 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'http://rubygems.org' 2 | gem 'therubyracer' 3 | gem 'bookbindery', "9.12.1" 4 | gem 'rake' 5 | gem 'jasmine' 6 | gem 'font-awesome-sass', '4.7.0' 7 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /NOTICE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2015-Present CloudFoundry.org Foundation, Inc. All Rights Reserved. 2 | 3 | Copyright (c) 2012-2105 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. 16 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Cloud Foundry Documentation 2 | 3 | This project publishes the Cloud Foundry documentation as a web application. 4 | 5 | This repository uses the [Bookbindery gem](http://github.com/pivotal-cf/docs-bookbinder) to generate the documentation as a web application. The Bookbinder gem has been tested with the following Ruby versions: 6 | 7 | * 2.5.3 8 | * 2.5.5 9 | * 2.6.3 10 | * 2.6.6 11 | * 2.6.8 12 | 13 | The config.yml file contains the list of topic repositories. 14 | 15 | The master_middleman folder contains the layouts, styles, and subnav used to create the web pages. 16 | 17 | This repository does not contain the documentation content. Documentation content is contained in the topic repositories listed in the config.yml. 18 | 19 | ## Topic Repositories 20 | 21 | The following list describes the topic repositories that make up the Cloud Foundry documentation set 22 | 23 | * [Cloud Foundry Concepts](http://github.com/cloudfoundry/docs-cloudfoundry-concepts): Underlying concepts and architecture 24 | * [Cloud Foundry Command-Line Interface (cf CLI)](https://github.com/cloudfoundry/docs-cf-cli): A guide to the cf CLI for Cloud Foundry developers and users 25 | * [Developer Guide](http://github.com/cloudfoundry/docs-dev-guide): Step-by-step instructions and reference material for developers pushing applications to Cloud Foundry 26 | * [Deploying Cloud Foundry](http://github.com/cloudfoundry/docs-deploying-cf): Instructions for operators using BOSH to deploying Cloud Foundry on AWS, vSphere, vCloud, OpenStack, etc. 27 | * [Running Cloud Foundry](http://github.com/cloudfoundry/docs-running-cf): Information for operators running Cloud Foundry 28 | * [Administrator Tools](https://github.com/cloudfoundry/docs-cf-admin): Documentation about operating Cloud Foundry deployments using BOSH and the cf command line tool 29 | * [Services](http://github.com/cloudfoundry/docs-services): Information about extending Cloud Foundry with custom services, and the service broker API 30 | * [Buildpacks](http://github.com/cloudfoundry/docs-buildpacks): Guides to developing your own buildpacks 31 | * [Loggregator](http://github.com/cloudfoundry/docs-loggregator): Information about the user application logging subsystem of Cloud Foundry 32 | * [User Account and Authentication](https://github.com/cloudfoundry/uaa): Information about the Cloud Foundry User Account and Authentication (UAA) Server 33 | 34 | ## Contributing Pull Requests 35 | 36 | To submit a pull request to the documentation, follow this process: 37 | 38 | 1. Make sure you have a signed CLA. Even if you aren't contributing running code, we still need a Contributor License Agreement. 39 | 40 | 1. Fork the content repository you want to make a contribution to. See the following examples: 41 | * For the Buildpacks Docs at http://docs.cloudfoundry.org/buildpacks/index.html, the content repository is: https://github.com/cloudfoundry/docs-buildpacks. 42 | * For the Developer Guide Docs at http://docs.cloudfoundry.org/devguide/services/, the content repository is: https://github.com/cloudfoundry/docs-dev-guide 43 | 44 | 1. Clone your fork of the content repository. Make sure to clone your fork of the topic repository to a directory that is a sibling to this book repository. So, for example, if you are contributing content to the Buildpack documentation, your folder structure would look like this: 45 | 46 |
47 | | 48 | +-- docs-book-cloudfoundry 49 | | 50 | +-- docs-buildpacks 51 | | 52 |53 | 54 | 1. Make your changes. 55 | 56 | 1. Run bookbinder on your local changes. 57 | 58 |
59 | $ cd docs-book-cloudfoundry 60 | $ bundle install 61 | $ bundle exec bookbinder watch 62 |63 | 64 | > **Tip:** If you run into issues with `libv8` on macOS, try following [these steps](https://gist.github.com/fernandoaleman/868b64cd60ab2d51ab24e7bf384da1ca#gistcomment-3081153) using a **non-system** version of Ruby ([`rbenv`](https://github.com/rbenv/rbenv) recommended). 65 | > **Tip:** If you run into issues with the installation of Ruby 2.6.8 on macOS Ventura, try following [steps](docker/README.md) and run it inside a container. 66 | 67 | Bookbinder attempts to assemble the doc set from your local copies. 68 | It skips any topic repositories that you do not have checked out. For more information about Bookbinder, see the Bookbinder README. 69 | 70 | 71 | 1. Point your browser at
localhost:4567
to preview your changes. On save, your browser will reload with any additional changes you make.
72 |
73 | 1. Commit your changes, rebase from upstream, and push to your fork.
74 |
75 | 1. Submit a pull request (PR) from your fork to the original repositories.
76 |
77 | The CF Docs team will review and merge the PR. They may contact you with questions or edit the PR for formatting and style.
78 | **Note**: After your pull request is merged, your changes appear on [docs.cloudfoundry.org](http://docs.cloudfoundry.org) the next time the cf-docs team pushes updates to the production docs. Updates go live at least once a week.
79 |
80 | ## Determine Content Repositories and Branches of a Book
81 |
82 | The `config.yml` defines the content repositories for each book.
83 | The `config.yml` file of each book contains the list of content repositories and branches that appear in the doc set.
84 | In the `config.yml` file, each content repository is specified in the `repository` subsection.
85 | This subsection includes an optional `ref` key-value pair which defines the branch of the content repository that the book uses.
86 |
87 | Make sure that you are adding your content to the correct branches of the content repositories.
88 |
89 | To determine which branch of a content repository that a book version uses:
90 |
91 | 1. Confirm that you are on the correct book branch. For example, the currently published doc might be on the `main` branch
92 | or on the branch corresponding to its version number.
93 |
94 | 2. Open the `config.yml` file.
95 |
96 | 3. Search for the name of the content repository, for example, `docs-cloudfoundry-concepts`.
97 |
98 | 4. Review the `repository` subsection for the content repository. If there is no `ref:` tag, then the repository uses the main branch. If there is a `ref` key-value pair, it specifies the branch name of the content repository. For example:
99 |
100 | ```
101 | - repository:
102 | name: cloudfoundry/docs-cloudfoundry-concepts
103 | ref: '225'
104 | ```
105 |
106 | `ref: '225'` refers to the 225 branch of the docs-cloudfoundry-concepts repository. Cloud Foundry `225` is associated with v255 of cf-release.
107 | `1.5`, `2.2` and `4.5` map to cf-deployment releases.
108 |
--------------------------------------------------------------------------------
/config.yml:
--------------------------------------------------------------------------------
1 | ---
2 | book_repo: cloudfoundry/docs-book-cloudfoundry
3 |
4 | broken_link_exclusions: iefix|arrowhead
5 | repo_link_enabled: true
6 |
7 | public_host: docs.cloudfoundry.org
8 |
9 | sections:
10 | - repository:
11 | name: cloudfoundry/docs-buildpacks
12 | ref: master
13 | directory: buildpacks
14 | subnav_template: cf-subnav.erb
15 | dependent_sections:
16 | - repository:
17 | name: cloudfoundry-samples/pong_matcher_grails
18 | no_docs: true
19 | - repository:
20 | name: cloudfoundry-samples/pong_matcher_groovy
21 | no_docs: true
22 | - repository:
23 | name: cloudfoundry-samples/pong_matcher_spring
24 | no_docs: true
25 | - repository:
26 | name: cloudfoundry-samples/pong_matcher_ruby
27 | no_docs: true
28 | - repository:
29 | name: cloudfoundry/docs-bbr
30 | ref: master
31 | directory: bbr
32 | subnav_template: cf-subnav.erb
33 | - repository:
34 | name: cloudfoundry/docs-cf-admin
35 | ref: master
36 | directory: adminguide
37 | subnav_template: cf-subnav.erb
38 | - repository:
39 | name: cloudfoundry/docs-cf-cli
40 | ref: master
41 | directory: cf-cli
42 | subnav_template: cf-subnav.erb
43 | - repository:
44 | name: cloudfoundry/docs-cloudfoundry-concepts
45 | ref: master
46 | directory: concepts
47 | subnav_template: cf-subnav.erb
48 | - repository:
49 | name: cloudfoundry/docs-credhub
50 | ref: master
51 | directory: credhub
52 | subnav_template: cf-subnav.erb
53 | - repository:
54 | name: cloudfoundry/docs-deploying-cf
55 | ref: master
56 | directory: deploying
57 | subnav_template: cf-subnav.erb
58 | dependent_sections:
59 | - repository:
60 | name: cloudfoundry/cf-release
61 | no_docs: true
62 | - repository:
63 | name: cloudfoundry/docs-dev-guide
64 | ref: master
65 | directory: devguide
66 | subnav_template: cf-subnav.erb
67 | dependent_sections:
68 | - repository:
69 | name: cloudfoundry-samples/pong_matcher_spring
70 | no_docs: true
71 | - repository:
72 | name: cloudfoundry/docs-loggregator
73 | ref: master
74 | directory: loggregator
75 | subnav_template: cf-subnav.erb
76 | - repository:
77 | name: cloudfoundry/docs-running-cf
78 | ref: master
79 | directory: running
80 | subnav_template: cf-subnav.erb
81 | - repository:
82 | name: cloudfoundry/docs-services
83 | ref: master
84 | directory: services
85 | subnav_template: cf-subnav.erb
86 | - repository:
87 | name: cloudfoundry/docs-uaa
88 | ref: master
89 | directory: uaa
90 | subnav_template: cf-subnav.erb
91 |
--------------------------------------------------------------------------------
/config/template_variables.yml:
--------------------------------------------------------------------------------
1 | ---
2 | template_variables:
3 | book_title: Cloud Foundry Documentation
4 | book_title_short: Cloud Foundry Docs
5 | title: Cloud Foundry Documentation
6 | title_image: ../images/logo_org.png
7 | hero_text: Documentation to help you deploy and manage Cloud Foundry
8 | url_path: https://docs.cloudfoundry.org
9 | product_link:
10 | product_url: https://github.com/cloudfoundry/cf-release
11 | support_link: Get Involved
12 | support_call_to_action: Get Involved
13 | support_url: https://www.cloudfoundry.org/community/
14 | gtm_account_id: GTM-MM86KCJ
15 |
16 | # Product variables
17 | platform_name: Cloud Foundry
18 | platform_old: Cloud Foundry
19 | platform_code: CF
20 | product_code: CF
21 | product_name_lc: cf
22 | app_runtime_first: Cloud Foundry
23 | app_runtime_full: Cloud Foundry
24 | app_runtime: Cloud Foundry
25 | app_runtime_abbr: Cloud Foundry
26 | app_runtime_abbr_lc: cf
27 | k8s_runtime_first: Cloud Foundry
28 | k8s_runtime_full: Cloud Foundry
29 | k8s_runtime: Cloud Foundry
30 | k8s_runtime_abbr: Cloud Foundry
31 | windows_runtime_first: Cloud Foundry
32 | windows_runtime_full: Cloud Foundry
33 | windows_runtime: Cloud Foundry
34 | windows_runtime_abbr: CF
35 | company_name: Cloud Foundry
36 |
37 | # Current version for partials
38 | current_major_version: "10-0"
39 |
40 | # Deprecated variables -- replace with current product variables when possible
41 | product_name: Cloud Foundry
42 | product_runtime: Cloud Foundry
43 | product_short: Cloud Foundry
44 |
45 | # Book content variables
46 | add_volumes_link: For more information, see [Adding Volume Services to your Deployment](../../running/deploy-vol-services.html).
47 | admin_read_only_role: "cloud_controller.admin_read_only
scope in UAA.cloud_controller.admin
scope in UAA.description
|This is an optional field that contains useful text for operators to manage security group rules. This field is available in Cloud Foundry v238 and later.
59 | app_sec_groups_default: Only allowing outbound connections to public addresses from app containers. This is the original default. Admins can change this behavior by configuring ASGs.
60 | app_sec_groups_link: For more information about ASGs, see [App Security Groups](../adminguide/app-sec-groups.html).
61 | app_sec_groups: App Security Groups
62 | asg_notifications_prereq:
63 | az: availability zones
64 | azs:
65 | azure_deploy: For more information, see [Preparing to Deploy on Azure](../../deploying/azure/index.html).
66 | bbr_ert:
67 | bbr_space:
68 | bbr_rn_intro:
69 | bbr_rn_compatibility:
70 | billing_manager_role_note: Note The Billing Manager role is only relevant for Cloud Foundry environments deployed with a billing engine.
71 | billing_manager_role: "Note By default, Cloud Foundry does not enable Cloud Controller request logging. To enable this feature, you must set the cc.security_event_logging.enabled
property in your Cloud Foundry manifest to true
and redeploy.
cf drain APP-NAME DRAIN-URL --type metrics --drain-name YOUR-SYSLOG-DRAINWhere:
APP-NAME
is your app name.YOUR-SYSLOG-DRAIN
is the name of your syslog drain.DRAIN-URL
is the URL of your syslog drain.disable_custom_buildpacks: true
in your Cloud Foundry manifest under `properties.cc`.
156 | disable_custom: Note This feature is only available in cf-deployment
v12.1.0 and later.
Note For this procedure to work, you must enable system log forwarding. For more information, see the Enabling System Log Forwarding section of the Configuring System Logging topic.
165 | encryption_key: encryption_key_2023_02_20 166 | example_domain_edu: www.example.edu 167 | example_domain_net: www.example.net 168 | example_domain_no_www: .example.com 169 | example_domain_org: www.example.org 170 | example_domain: www.example.com 171 | example_ip_1: 192.0.2.1 172 | example_ip_2: 198.51.100.1 173 | example_ip_3: 203.0.113.1 174 | external_ips: external IP addresses 175 | external_vol_smb_note: 176 | external_vol_win_note:Note NFS and SMB volume services are available for Linux cells only. These services are not available for Windows cells.
177 | ga_account_id: UA-22181585-2 178 | gen_GSG: 179 | global_auditor_role: "cloud_controller.global_auditor
scope in UAA.router.drain_wait
192 | lb_health_chk_unhealthy: router.load_balancer_healthy_threshold
193 | link_adminguide_buildpack: For more information, see [Managing Custom Buildpacks](../adminguide/buildpacks.html).
194 | link_adminguide_commands: Note An Org Manager needs explicit admin permissions to perform certain actions. To create a user with admin rights, see Creating and Managing Users with the UAA CLI (UAAC).
195 | link_adminguide_domains: For admin-specific commands, see [Managing Domains and Routes](../../adminguide/manage-domains-routes.html). 196 | link_configure_trusted_certificates: For information about providing trusted certificates to applications running on Cloud Foundry, see [Configuring Trusted System Certificates for Applications](../../running/trusted-system-certificates.html). 197 | log_management: 198 | logg_forwarding: the [Enabling System Log Forwarding](../running/managing-cf/logging-config.html#syslog-forward) section of the _Configuring System Logging_ topic. 199 | logg_scaling: Scaling Loggregator section of the Configuring System Logging topic. 200 | loggregator_arch_link: Loggregator Architecture 201 | loggregator_firehose_link: Loggregator Architecture 202 | loggregator_log_cache_link: 203 | loggregator_log_cache_link_syslog_scale: For guidance on scaling, see the [README](https://github.com/cloudfoundry/cf-syslog-drain-release/blob/master/README.md) for the CF Syslog Drain Release repository on GitHub. 204 | manage_iso_seg_link: For information about how to create and manage isolation segments in a Cloud Foundry deployment, see [Managing Isolation Segments](../adminguide/isolation-segments.html). 205 | manifest_vs_cli_asg: You may also define ASGs in your Cloud Foundry deployment manifest, but these definitions only create security groups during first-time installation. To avoid confusion, any such definitions in the manifest should be generic. The cf CLI commands `create-security-group` and `bind-security-group` overwrite ASG definitions from the manifest. Upgrading Cloud Foundry retains ASG definitions made from the CLI and ignores any ASG definitions in the newer manifest. 206 | max_app_size_table: Set in thecc.packages.max_package_size
in the manifest
207 | max_app_size: the maximum app file size set in the cc.packages.max_package_size
property in the manifest
208 | max_healthcheck_timeout: cc.maximum_health_check_timeout
defaults to the maximum of `180` seconds, but your Cloud Foundry operator can set it to a different value.
209 | max_in_flight_header: max_in_flight
valuesNote If you have mutual TLS app identity verification enabled, you must also enable support for TLS backends with TCP Router via the tcp_router.backend_tls.enabled
property, and on Route Emitter via the tcp.enable_tls
property..
properties:
router:
route\_services\_secret: YOUR-SECRET-PASSPHRASE
Note The route\_services\_secret
property should be a robust passphrase. For more information, see the Gorouter spec in the cf-release repository on GitHub.
x-cf-forwarded-url
, obeying the scheme. The scheme is https
by default. For environments that do not support TLS termination, this property can be set to false.properties:
router:
route\_services\_recommend\_https: true
The Gorouter only forwards requests to route services over SSL. By default, certificates provided by route services must be signed by a trusted CA. If they are not, the Gorouter rejects the request. In development environments, this concern may be unreasonable. To disable SSL certificate validation, modify the following property:properties:
router:
ssl\_skip\_validation: true
237 | route_services_enabling: |-
238 | The route_services_secret
property can
253 | be a robust passphrase.
For more information, see the 256 | Gorouter spec 257 | in the cf-release repository on GitHub. 258 |
259 | 260 | Route service instances can send requests to the value ofx-cf-forwarded-url
, obeying the scheme.
261 | The scheme is https
by default.
262 | For environments that do not support TLS termination, this property can be set to false.
263 |
264 | ```
265 | properties:
266 | router:
267 | route_services_recommend_https: true
268 | ```
269 |
270 | The Gorouter only forwards requests to route services over SSL.
271 | By default, certificates provided by route services must be signed by a trusted CA.
272 | If they are not, the Gorouter rejects the request.
273 | In development environments, this concern might be unreasonable.
274 | To deactivate SSL certificate validation, edit the following property:
275 |
276 | ```
277 | properties:
278 | router:
279 | ssl_skip_validation: true
280 | ```
281 | route_services_link: Manage App Requests with Route Services
282 | route_services_require_diego: Route services require Diego. Your deployment must use the Diego architecture or you must enable Diego for your app.
283 | route_services_securing_traffic: For more information about securing traffic into Cloud Foundry, see [Securing Traffic into Cloud Foundry](../adminguide/securing-traffic.html). 284 | route_services:Note Route services require Diego. Your deployment must use the Diego architecture or you must enable Diego for your app.
285 | saml_provider: Retrieve the name of your SAML provider by opening your Cloud Foundry manifest and recording the value of the `login.saml.providers.provider-name` property. 286 | scale_table: "oss_scale_table" 287 | scaling_ert_db: 288 | scaling_ert: 289 | self_signed: Before following the procedure below, the developer must obtain either the self-signed certificate or the intermediate and CA certificates used to sign the deployment's certificate. The developer can obtain these certificates from the Cloud Foundry operator or from the deployment manifest. For more information about how to retrieve certificates from the deployment manifest, see [Securing Traffic into Cloud Foundry](../adminguide/securing-traffic.html). 290 | services: services 291 | ssh_marketplace_output: mysql 100mb MySQL databases on demand 292 | ssh_marketplace_step: Run `cf marketplace` to list the marketplace services available. 293 | ssh_service_access_key:cf create-buildpack BUILDPACK PATH POSITION
Where flag:
BUILDPACK
specifies the buildpack name.PATH
specifies the location of the buildpack. PATH
can point to a ZIP file, the URL of a ZIP file, or a local directory.POSITION
specifies where to place the buildpack in the detection priority list.When Zipkin tracing is enabled in Cloud Foundry, the Gorouter examines the HTTP request headers and performs:
315 | w3c_enable_link:When W3C tracing is enabled in Cloud Foundry, the Gorouter examines the HTTP request headers and performs:
316 | ssl_gorouter_link: Terminating SSL/TLS at the Gorouter only 317 | ssl_lb_gorouter_link: Terminating SSL/TLS at the Load Balancer and the Gorouter 318 | ssl_lb_link: Terminating SSL/TLS at the Load Balancer Only 319 | ssl_haproxy: 320 | tasks_ai: 321 | cf_networking: For more information about how to enable and use container-to-container networking, see [Configuring Container-to-Container Networking](../devguide/deploy-apps/cf-networking.html).When the container-to-container networking feature is disabled, all app-to-app traffic must go through the Gorouter.
322 | isolation_segments_create: 323 | install_isolation_segments: For more information about creating isolation segments, see [Managing Isolation Segments](isolation-segments.html). 324 | isolation_segments_note:Note The isolation segment name used in the cf CLI command must match the value specified in the placement_tags
section of the Diego manifest file. If the names do not match, Cloud Foundry fails to place apps in the isolation segment when apps are started or restarted in the space assigned to the isolation segment.
Note Admins can create internal domains. For more information, see the Internal Domains section in the cf-networking-release
repository on GitHub.
R
system_blobstore_ccdroplet_max_staged_droplets_stored
property in the Cloud Foundry manifest.
352 | blobstore_link: Cloud Controller Blobstore Configuration
353 | capi_sidecar_req: Note This feature requires that your Cloud Foundry deployment uses capi-release 1.790 or later.
354 | enable_docker_link: To enable Docker support, see the [Enable Docker](../../adminguide/docker.html#enable) section of the _Using Docker in Cloud Foundry_ topic. 355 | nozzle_info_link: see [Scaling Nozzles](log-ops-guide.html#scaling-nozzles) in _Loggregator Guide for CF Operators_. 356 | slow_nozzle_alerts_link: For more information, see the [Slow Nozzle Alerts](../../loggregator/log-ops-guide.html#slow-noz) section of the _Loggregator Guide for Cloud Foundry Operators_ topic. 357 | scaling_nozzles_link: For more information, see the [Scaling Nozzles](../../loggregator/log-ops-guide.html#scaling-nozzles) section of the _Loggregator Guide for Cloud Foundry Operators_ topic. 358 | scaling_loggregator_link: For more information, see [Scaling Loggregator](../../loggregator/log-ops-guide.html#scaling) in _Loggregator Guide for Cloud Foundry Operators_. 359 | using_docker_link: For an explanation of how Docker works in Cloud Foundry, see [Using Docker in Cloud Foundry](../../adminguide/docker.html). 360 | cfdev_link: To deploy a local Cloud Foundry environment for experimentation or debugging purposes, you can use CF Dev. For more information, see CF Dev. 361 | zipkin_tracing_link: For more information about Zipkin tracing, see [Enabling Zipkin Tracing](../adminguide/zipkin_tracing.html). 362 | network_policy_quota: The maximum number of policies that a Space Developer can add in a space is set by the `max_policies_per_app_source` property in the `policy-server` job in the Cloud Foundry deployment manifest. By default, the maximum is 150. 363 | network_policy_quota_config: To change the network policy quota for Space Developers, the Cloud Foundry operator must configure the `max_policies_per_app_source` property, then re-deploy Cloud Foundry. 364 | human_readable_timestamp: 365 | find_metric_name_source_id: see [CF Component Metrics](../running/all_metrics.html) and [UAA Performance Metrics](../uaa/uaa-metrics.html) 366 | -------------------------------------------------------------------------------- /docker/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ruby:2.6.9-alpine3.15 2 | 3 | ARG DOCS_BOOK_CLOUDFOUNDRY_REPO=https://github.com/cloudfoundry/docs-book-cloudfoundry.git 4 | ARG DOCS_BOOK_CLOUDFOUNDRY_WORKDIR=/tmp/docs-book-cloudfoundry 5 | ARG NODEJS_VERSION=v16.9.1 6 | 7 | WORKDIR $DOCS_BOOK_CLOUDFOUNDRY_WORKDIR 8 | COPY files/Gemfile /tmp/Gemfile 9 | 10 | RUN cd /opt/ && wget https://nodejs.org/dist/$NODEJS_VERSION/node-$NODEJS_VERSION-linux-x64.tar.xz && \ 11 | tar -xf /opt/node-$NODEJS_VERSION-linux-x64.tar.xz && ln -s /opt/node-$NODEJS_VERSION-linux-x64/bin/* /usr/bin/ && \ 12 | apk add build-base git make g++ && cd /tmp && git clone $DOCS_BOOK_CLOUDFOUNDRY_REPO && \ 13 | cd $DOCS_BOOK_CLOUDFOUNDRY_WORKDIR && rm $DOCS_BOOK_CLOUDFOUNDRY_WORKDIR/Gemfile && \ 14 | mv /tmp/Gemfile $DOCS_BOOK_CLOUDFOUNDRY_WORKDIR/Gemfile && bundle install && \ 15 | rm -rf /opt/node-$NODEJS_VERSION-linux-x64.tar.xz 16 | 17 | EXPOSE 4567 18 | 19 | CMD ["bundle","exec","bookbinder","watch"] -------------------------------------------------------------------------------- /docker/README.md: -------------------------------------------------------------------------------- 1 | # Ruby 2.6.9 container that includes the functionality to run the Cloudfoundry documentation webserver 2 | 3 | ## Set up the Container and inject the corresponding documentation structure 4 | 5 | You can specify the injected documentation repository as mounted volume under the `/tmp` directory. The following example gives you an overview how you can specify it. 6 | ```yaml 7 | volumes: 8 | - /$ mkdir ~/workspace86 | 87 | 1. Clone the layout repo. This contains layouts, formatting, and styles used across all documentation sets. 88 |
git clone git@github.com:pivotal-cf/docs-layout-repo
89 |
90 | 1. Identify the content repo where your documentation lives. For example, `https://github.com/cloudfoundry/docs-cloudfoundry-concepts`.
91 |
92 | 1. Clone the content repo. For example:
93 | $ git clone git@github.com:cloudfoundry/docs-cloudfoundry-concepts.git
94 |
95 | 1. Return to your workspace directory and clone the Cloud Foundry book.
96 | $ git clone git@github.com:cloudfoundry/docs-book-cloudfoundry.git
97 |
98 | 1. Change directory into the Cloud Foundry book.
99 | cd docs-book-cloudfoundry 100 | 101 | 1. Run `bundle install` to install the necessary gems, including Bookbinder. 102 | 103 | 1. Use Bookbinder to create a live version of your docs: 104 |$ bundle exec bookbinder watch105 | 106 | 1. Navigate to `http://localhost:4567` in a browser and navigate to the route where your docs are published. For instance, `http://localhost:4567/cf-cli/install-go-cli.html`. 107 |
108 | Bookbinder will automatically update the live version of the docs whenever you make a change to the content repo. -------------------------------------------------------------------------------- /master_middleman/source/googlefb873635f2f14682.html: -------------------------------------------------------------------------------- 1 | google-site-verification: googlefb873635f2f14682.html -------------------------------------------------------------------------------- /master_middleman/source/images/Pipe_NavBar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudfoundry/docs-book-cloudfoundry/d8f194cd7efa75955bc8bfb7f72e12d0fcafba56/master_middleman/source/images/Pipe_NavBar.png -------------------------------------------------------------------------------- /master_middleman/source/images/Pipe_gBar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudfoundry/docs-book-cloudfoundry/d8f194cd7efa75955bc8bfb7f72e12d0fcafba56/master_middleman/source/images/Pipe_gBar.png -------------------------------------------------------------------------------- /master_middleman/source/images/bg-crowd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudfoundry/docs-book-cloudfoundry/d8f194cd7efa75955bc8bfb7f72e12d0fcafba56/master_middleman/source/images/bg-crowd.png -------------------------------------------------------------------------------- /master_middleman/source/images/bg-plain-x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudfoundry/docs-book-cloudfoundry/d8f194cd7efa75955bc8bfb7f72e12d0fcafba56/master_middleman/source/images/bg-plain-x.jpg -------------------------------------------------------------------------------- /master_middleman/source/images/bg_social_footer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudfoundry/docs-book-cloudfoundry/d8f194cd7efa75955bc8bfb7f72e12d0fcafba56/master_middleman/source/images/bg_social_footer.png -------------------------------------------------------------------------------- /master_middleman/source/images/cf-icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudfoundry/docs-book-cloudfoundry/d8f194cd7efa75955bc8bfb7f72e12d0fcafba56/master_middleman/source/images/cf-icons.png -------------------------------------------------------------------------------- /master_middleman/source/images/facebook_large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudfoundry/docs-book-cloudfoundry/d8f194cd7efa75955bc8bfb7f72e12d0fcafba56/master_middleman/source/images/facebook_large.png -------------------------------------------------------------------------------- /master_middleman/source/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudfoundry/docs-book-cloudfoundry/d8f194cd7efa75955bc8bfb7f72e12d0fcafba56/master_middleman/source/images/favicon.ico -------------------------------------------------------------------------------- /master_middleman/source/images/gplus_large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudfoundry/docs-book-cloudfoundry/d8f194cd7efa75955bc8bfb7f72e12d0fcafba56/master_middleman/source/images/gplus_large.png -------------------------------------------------------------------------------- /master_middleman/source/images/hr-horizontal-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudfoundry/docs-book-cloudfoundry/d8f194cd7efa75955bc8bfb7f72e12d0fcafba56/master_middleman/source/images/hr-horizontal-dark.png -------------------------------------------------------------------------------- /master_middleman/source/images/hr-vertical.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudfoundry/docs-book-cloudfoundry/d8f194cd7efa75955bc8bfb7f72e12d0fcafba56/master_middleman/source/images/hr-vertical.png -------------------------------------------------------------------------------- /master_middleman/source/images/ico-cancel-x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudfoundry/docs-book-cloudfoundry/d8f194cd7efa75955bc8bfb7f72e12d0fcafba56/master_middleman/source/images/ico-cancel-x.png -------------------------------------------------------------------------------- /master_middleman/source/images/ico-search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudfoundry/docs-book-cloudfoundry/d8f194cd7efa75955bc8bfb7f72e12d0fcafba56/master_middleman/source/images/ico-search.png -------------------------------------------------------------------------------- /master_middleman/source/images/logo-footer-pivotal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudfoundry/docs-book-cloudfoundry/d8f194cd7efa75955bc8bfb7f72e12d0fcafba56/master_middleman/source/images/logo-footer-pivotal.png -------------------------------------------------------------------------------- /master_middleman/source/images/logo-pws.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudfoundry/docs-book-cloudfoundry/d8f194cd7efa75955bc8bfb7f72e12d0fcafba56/master_middleman/source/images/logo-pws.png -------------------------------------------------------------------------------- /master_middleman/source/images/logo_org.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudfoundry/docs-book-cloudfoundry/d8f194cd7efa75955bc8bfb7f72e12d0fcafba56/master_middleman/source/images/logo_org.png -------------------------------------------------------------------------------- /master_middleman/source/images/new_logo_org.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudfoundry/docs-book-cloudfoundry/d8f194cd7efa75955bc8bfb7f72e12d0fcafba56/master_middleman/source/images/new_logo_org.png -------------------------------------------------------------------------------- /master_middleman/source/images/pws-logo-dark-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudfoundry/docs-book-cloudfoundry/d8f194cd7efa75955bc8bfb7f72e12d0fcafba56/master_middleman/source/images/pws-logo-dark-bg.png -------------------------------------------------------------------------------- /master_middleman/source/images/pws-logo-light-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudfoundry/docs-book-cloudfoundry/d8f194cd7efa75955bc8bfb7f72e12d0fcafba56/master_middleman/source/images/pws-logo-light-bg.png -------------------------------------------------------------------------------- /master_middleman/source/images/ribbon_forkme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudfoundry/docs-book-cloudfoundry/d8f194cd7efa75955bc8bfb7f72e12d0fcafba56/master_middleman/source/images/ribbon_forkme.png -------------------------------------------------------------------------------- /master_middleman/source/images/searchsprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudfoundry/docs-book-cloudfoundry/d8f194cd7efa75955bc8bfb7f72e12d0fcafba56/master_middleman/source/images/searchsprite.png -------------------------------------------------------------------------------- /master_middleman/source/images/twitter_large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudfoundry/docs-book-cloudfoundry/d8f194cd7efa75955bc8bfb7f72e12d0fcafba56/master_middleman/source/images/twitter_large.png -------------------------------------------------------------------------------- /master_middleman/source/images/youtube_large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudfoundry/docs-book-cloudfoundry/d8f194cd7efa75955bc8bfb7f72e12d0fcafba56/master_middleman/source/images/youtube_large.png -------------------------------------------------------------------------------- /master_middleman/source/index.html.md.erb: -------------------------------------------------------------------------------- 1 | --- 2 | breadcrumb: Cloud Foundry Documentation 3 | --- 4 |5 |15 | 16 |6 |14 |Getting Started with
7 |10 |
Cloud Foundry is an open-source platform as a service (PaaS) that provides you with a 11 | choice of clouds, developer frameworks, and application services. 12 |
13 |17 |668 | -------------------------------------------------------------------------------- /master_middleman/source/javascripts/book.js: -------------------------------------------------------------------------------- 1 | // Declare your book-specific javascript overrides in this file. 2 | //= require 'waypoints/waypoint' 3 | //= require 'waypoints/context' 4 | //= require 'waypoints/group' 5 | //= require 'waypoints/noframeworkAdapter' 6 | //= require 'waypoints/sticky' 7 | //= require 'vendor/mermaid' 8 | //= require 'page_initializers/documentation' 9 | 10 | window.onload = function() { 11 | Bookbinder.boot(); 12 | var sticky = new Waypoint.Sticky({ 13 | element: document.querySelector('#js-to-top'), 14 | wrapper: '', 15 | stuckClass: 'sticky', 16 | offset: 100 17 | }); 18 | } 19 | -------------------------------------------------------------------------------- /master_middleman/source/javascripts/page_initializers/documentation.js.erb: -------------------------------------------------------------------------------- 1 | mermaid.initialize({startOnLoad:true}); 2 | -------------------------------------------------------------------------------- /master_middleman/source/javascripts/waypoints/context.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 'use strict' 3 | 4 | function requestAnimationFrameShim(callback) { 5 | window.setTimeout(callback, 1000 / 60) 6 | } 7 | 8 | var keyCounter = 0 9 | var contexts = {} 10 | var Waypoint = window.Waypoint 11 | var oldWindowLoad = window.onload 12 | 13 | /* http://imakewebthings.com/waypoints/api/context */ 14 | function Context(element) { 15 | this.element = element 16 | this.Adapter = Waypoint.Adapter 17 | this.adapter = new this.Adapter(element) 18 | this.key = 'waypoint-context-' + keyCounter 19 | this.didScroll = false 20 | this.didResize = false 21 | this.oldScroll = { 22 | x: this.adapter.scrollLeft(), 23 | y: this.adapter.scrollTop() 24 | } 25 | this.waypoints = { 26 | vertical: {}, 27 | horizontal: {} 28 | } 29 | 30 | element.waypointContextKey = this.key 31 | contexts[element.waypointContextKey] = this 32 | keyCounter += 1 33 | 34 | this.createThrottledScrollHandler() 35 | this.createThrottledResizeHandler() 36 | } 37 | 38 | /* Private */ 39 | Context.prototype.add = function(waypoint) { 40 | var axis = waypoint.options.horizontal ? 'horizontal' : 'vertical' 41 | this.waypoints[axis][waypoint.key] = waypoint 42 | this.refresh() 43 | } 44 | 45 | /* Private */ 46 | Context.prototype.checkEmpty = function() { 47 | var horizontalEmpty = this.Adapter.isEmptyObject(this.waypoints.horizontal) 48 | var verticalEmpty = this.Adapter.isEmptyObject(this.waypoints.vertical) 49 | if (horizontalEmpty && verticalEmpty) { 50 | this.adapter.off('.waypoints') 51 | delete contexts[this.key] 52 | } 53 | } 54 | 55 | /* Private */ 56 | Context.prototype.createThrottledResizeHandler = function() { 57 | var self = this 58 | 59 | function resizeHandler() { 60 | self.handleResize() 61 | self.didResize = false 62 | } 63 | 64 | this.adapter.on('resize.waypoints', function() { 65 | if (!self.didResize) { 66 | self.didResize = true 67 | Waypoint.requestAnimationFrame(resizeHandler) 68 | } 69 | }) 70 | } 71 | 72 | /* Private */ 73 | Context.prototype.createThrottledScrollHandler = function() { 74 | var self = this 75 | function scrollHandler() { 76 | self.handleScroll() 77 | self.didScroll = false 78 | } 79 | 80 | this.adapter.on('scroll.waypoints', function() { 81 | if (!self.didScroll || Waypoint.isTouch) { 82 | self.didScroll = true 83 | Waypoint.requestAnimationFrame(scrollHandler) 84 | } 85 | }) 86 | } 87 | 88 | /* Private */ 89 | Context.prototype.handleResize = function() { 90 | Waypoint.Context.refreshAll() 91 | } 92 | 93 | /* Private */ 94 | Context.prototype.handleScroll = function() { 95 | var triggeredGroups = {} 96 | var axes = { 97 | horizontal: { 98 | newScroll: this.adapter.scrollLeft(), 99 | oldScroll: this.oldScroll.x, 100 | forward: 'right', 101 | backward: 'left' 102 | }, 103 | vertical: { 104 | newScroll: this.adapter.scrollTop(), 105 | oldScroll: this.oldScroll.y, 106 | forward: 'down', 107 | backward: 'up' 108 | } 109 | } 110 | 111 | for (var axisKey in axes) { 112 | var axis = axes[axisKey] 113 | var isForward = axis.newScroll > axis.oldScroll 114 | var direction = isForward ? axis.forward : axis.backward 115 | 116 | for (var waypointKey in this.waypoints[axisKey]) { 117 | var waypoint = this.waypoints[axisKey][waypointKey] 118 | var wasBeforeTriggerPoint = axis.oldScroll < waypoint.triggerPoint 119 | var nowAfterTriggerPoint = axis.newScroll >= waypoint.triggerPoint 120 | var crossedForward = wasBeforeTriggerPoint && nowAfterTriggerPoint 121 | var crossedBackward = !wasBeforeTriggerPoint && !nowAfterTriggerPoint 122 | if (crossedForward || crossedBackward) { 123 | waypoint.queueTrigger(direction) 124 | triggeredGroups[waypoint.group.id] = waypoint.group 125 | } 126 | } 127 | } 128 | 129 | for (var groupKey in triggeredGroups) { 130 | triggeredGroups[groupKey].flushTriggers() 131 | } 132 | 133 | this.oldScroll = { 134 | x: axes.horizontal.newScroll, 135 | y: axes.vertical.newScroll 136 | } 137 | } 138 | 139 | /* Private */ 140 | Context.prototype.innerHeight = function() { 141 | /*eslint-disable eqeqeq */ 142 | if (this.element == this.element.window) { 143 | return Waypoint.viewportHeight() 144 | } 145 | /*eslint-enable eqeqeq */ 146 | return this.adapter.innerHeight() 147 | } 148 | 149 | /* Private */ 150 | Context.prototype.remove = function(waypoint) { 151 | delete this.waypoints[waypoint.axis][waypoint.key] 152 | this.checkEmpty() 153 | } 154 | 155 | /* Private */ 156 | Context.prototype.innerWidth = function() { 157 | /*eslint-disable eqeqeq */ 158 | if (this.element == this.element.window) { 159 | return Waypoint.viewportWidth() 160 | } 161 | /*eslint-enable eqeqeq */ 162 | return this.adapter.innerWidth() 163 | } 164 | 165 | /* Public */ 166 | /* http://imakewebthings.com/waypoints/api/context-destroy */ 167 | Context.prototype.destroy = function() { 168 | var allWaypoints = [] 169 | for (var axis in this.waypoints) { 170 | for (var waypointKey in this.waypoints[axis]) { 171 | allWaypoints.push(this.waypoints[axis][waypointKey]) 172 | } 173 | } 174 | for (var i = 0, end = allWaypoints.length; i < end; i++) { 175 | allWaypoints[i].destroy() 176 | } 177 | } 178 | 179 | /* Public */ 180 | /* http://imakewebthings.com/waypoints/api/context-refresh */ 181 | Context.prototype.refresh = function() { 182 | /*eslint-disable eqeqeq */ 183 | var isWindow = this.element == this.element.window 184 | /*eslint-enable eqeqeq */ 185 | var contextOffset = isWindow ? undefined : this.adapter.offset() 186 | var triggeredGroups = {} 187 | var axes 188 | 189 | this.handleScroll() 190 | axes = { 191 | horizontal: { 192 | contextOffset: isWindow ? 0 : contextOffset.left, 193 | contextScroll: isWindow ? 0 : this.oldScroll.x, 194 | contextDimension: this.innerWidth(), 195 | oldScroll: this.oldScroll.x, 196 | forward: 'right', 197 | backward: 'left', 198 | offsetProp: 'left' 199 | }, 200 | vertical: { 201 | contextOffset: isWindow ? 0 : contextOffset.top, 202 | contextScroll: isWindow ? 0 : this.oldScroll.y, 203 | contextDimension: this.innerHeight(), 204 | oldScroll: this.oldScroll.y, 205 | forward: 'down', 206 | backward: 'up', 207 | offsetProp: 'top' 208 | } 209 | } 210 | 211 | for (var axisKey in axes) { 212 | var axis = axes[axisKey] 213 | for (var waypointKey in this.waypoints[axisKey]) { 214 | var waypoint = this.waypoints[axisKey][waypointKey] 215 | var adjustment = waypoint.options.offset 216 | var oldTriggerPoint = waypoint.triggerPoint 217 | var elementOffset = 0 218 | var freshWaypoint = oldTriggerPoint == null 219 | var contextModifier, wasBeforeScroll, nowAfterScroll 220 | var triggeredBackward, triggeredForward 221 | 222 | if (waypoint.element !== waypoint.element.window) { 223 | elementOffset = waypoint.adapter.offset()[axis.offsetProp] 224 | } 225 | 226 | if (typeof adjustment === 'function') { 227 | adjustment = adjustment.apply(waypoint) 228 | } 229 | else if (typeof adjustment === 'string') { 230 | adjustment = parseFloat(adjustment) 231 | if (waypoint.options.offset.indexOf('%') > - 1) { 232 | adjustment = Math.ceil(axis.contextDimension * adjustment / 100) 233 | } 234 | } 235 | 236 | contextModifier = axis.contextScroll - axis.contextOffset 237 | waypoint.triggerPoint = elementOffset + contextModifier - adjustment 238 | wasBeforeScroll = oldTriggerPoint < axis.oldScroll 239 | nowAfterScroll = waypoint.triggerPoint >= axis.oldScroll 240 | triggeredBackward = wasBeforeScroll && nowAfterScroll 241 | triggeredForward = !wasBeforeScroll && !nowAfterScroll 242 | 243 | if (!freshWaypoint && triggeredBackward) { 244 | waypoint.queueTrigger(axis.backward) 245 | triggeredGroups[waypoint.group.id] = waypoint.group 246 | } 247 | else if (!freshWaypoint && triggeredForward) { 248 | waypoint.queueTrigger(axis.forward) 249 | triggeredGroups[waypoint.group.id] = waypoint.group 250 | } 251 | else if (freshWaypoint && axis.oldScroll >= waypoint.triggerPoint) { 252 | waypoint.queueTrigger(axis.forward) 253 | triggeredGroups[waypoint.group.id] = waypoint.group 254 | } 255 | } 256 | } 257 | 258 | Waypoint.requestAnimationFrame(function() { 259 | for (var groupKey in triggeredGroups) { 260 | triggeredGroups[groupKey].flushTriggers() 261 | } 262 | }) 263 | 264 | return this 265 | } 266 | 267 | /* Private */ 268 | Context.findOrCreateByElement = function(element) { 269 | return Context.findByElement(element) || new Context(element) 270 | } 271 | 272 | /* Private */ 273 | Context.refreshAll = function() { 274 | for (var contextId in contexts) { 275 | contexts[contextId].refresh() 276 | } 277 | } 278 | 279 | /* Public */ 280 | /* http://imakewebthings.com/waypoints/api/context-find-by-element */ 281 | Context.findByElement = function(element) { 282 | return contexts[element.waypointContextKey] 283 | } 284 | 285 | window.onload = function() { 286 | if (oldWindowLoad) { 287 | oldWindowLoad() 288 | } 289 | Context.refreshAll() 290 | } 291 | 292 | Waypoint.requestAnimationFrame = function(callback) { 293 | var requestFn = window.requestAnimationFrame || 294 | window.mozRequestAnimationFrame || 295 | window.webkitRequestAnimationFrame || 296 | requestAnimationFrameShim 297 | requestFn.call(window, callback) 298 | } 299 | Waypoint.Context = Context 300 | }()) 301 | -------------------------------------------------------------------------------- /master_middleman/source/javascripts/waypoints/group.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 'use strict' 3 | 4 | function byTriggerPoint(a, b) { 5 | return a.triggerPoint - b.triggerPoint 6 | } 7 | 8 | function byReverseTriggerPoint(a, b) { 9 | return b.triggerPoint - a.triggerPoint 10 | } 11 | 12 | var groups = { 13 | vertical: {}, 14 | horizontal: {} 15 | } 16 | var Waypoint = window.Waypoint 17 | 18 | /* http://imakewebthings.com/waypoints/api/group */ 19 | function Group(options) { 20 | this.name = options.name 21 | this.axis = options.axis 22 | this.id = this.name + '-' + this.axis 23 | this.waypoints = [] 24 | this.clearTriggerQueues() 25 | groups[this.axis][this.name] = this 26 | } 27 | 28 | /* Private */ 29 | Group.prototype.add = function(waypoint) { 30 | this.waypoints.push(waypoint) 31 | } 32 | 33 | /* Private */ 34 | Group.prototype.clearTriggerQueues = function() { 35 | this.triggerQueues = { 36 | up: [], 37 | down: [], 38 | left: [], 39 | right: [] 40 | } 41 | } 42 | 43 | /* Private */ 44 | Group.prototype.flushTriggers = function() { 45 | for (var direction in this.triggerQueues) { 46 | var waypoints = this.triggerQueues[direction] 47 | var reverse = direction === 'up' || direction === 'left' 48 | waypoints.sort(reverse ? byReverseTriggerPoint : byTriggerPoint) 49 | for (var i = 0, end = waypoints.length; i < end; i += 1) { 50 | var waypoint = waypoints[i] 51 | if (waypoint.options.continuous || i === waypoints.length - 1) { 52 | waypoint.trigger([direction]) 53 | } 54 | } 55 | } 56 | this.clearTriggerQueues() 57 | } 58 | 59 | /* Private */ 60 | Group.prototype.next = function(waypoint) { 61 | this.waypoints.sort(byTriggerPoint) 62 | var index = Waypoint.Adapter.inArray(waypoint, this.waypoints) 63 | var isLast = index === this.waypoints.length - 1 64 | return isLast ? null : this.waypoints[index + 1] 65 | } 66 | 67 | /* Private */ 68 | Group.prototype.previous = function(waypoint) { 69 | this.waypoints.sort(byTriggerPoint) 70 | var index = Waypoint.Adapter.inArray(waypoint, this.waypoints) 71 | return index ? this.waypoints[index - 1] : null 72 | } 73 | 74 | /* Private */ 75 | Group.prototype.queueTrigger = function(waypoint, direction) { 76 | this.triggerQueues[direction].push(waypoint) 77 | } 78 | 79 | /* Private */ 80 | Group.prototype.remove = function(waypoint) { 81 | var index = Waypoint.Adapter.inArray(waypoint, this.waypoints) 82 | if (index > -1) { 83 | this.waypoints.splice(index, 1) 84 | } 85 | } 86 | 87 | /* Public */ 88 | /* http://imakewebthings.com/waypoints/api/first */ 89 | Group.prototype.first = function() { 90 | return this.waypoints[0] 91 | } 92 | 93 | /* Public */ 94 | /* http://imakewebthings.com/waypoints/api/last */ 95 | Group.prototype.last = function() { 96 | return this.waypoints[this.waypoints.length - 1] 97 | } 98 | 99 | /* Private */ 100 | Group.findOrCreate = function(options) { 101 | return groups[options.axis][options.name] || new Group(options) 102 | } 103 | 104 | Waypoint.Group = Group 105 | }()) 106 | -------------------------------------------------------------------------------- /master_middleman/source/javascripts/waypoints/noframeworkAdapter.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 'use strict' 3 | 4 | var Waypoint = window.Waypoint 5 | 6 | function isWindow(element) { 7 | return element === element.window 8 | } 9 | 10 | function getWindow(element) { 11 | if (isWindow(element)) { 12 | return element 13 | } 14 | return element.defaultView 15 | } 16 | 17 | function classNameRegExp(className) { 18 | return new RegExp("\\b" + className + "\\b"); 19 | } 20 | 21 | function NoFrameworkAdapter(element) { 22 | this.element = element 23 | this.handlers = {} 24 | } 25 | 26 | NoFrameworkAdapter.prototype.innerHeight = function() { 27 | var isWin = isWindow(this.element) 28 | return isWin ? this.element.innerHeight : this.element.clientHeight 29 | } 30 | 31 | NoFrameworkAdapter.prototype.innerWidth = function() { 32 | var isWin = isWindow(this.element) 33 | return isWin ? this.element.innerWidth : this.element.clientWidth 34 | } 35 | 36 | NoFrameworkAdapter.prototype.off = function(event, handler) { 37 | function removeListeners(element, listeners, handler) { 38 | for (var i = 0, end = listeners.length - 1; i < end; i++) { 39 | var listener = listeners[i] 40 | if (!handler || handler === listener) { 41 | element.removeEventListener(listener) 42 | } 43 | } 44 | } 45 | 46 | var eventParts = event.split('.') 47 | var eventType = eventParts[0] 48 | var namespace = eventParts[1] 49 | var element = this.element 50 | 51 | if (namespace && this.handlers[namespace] && eventType) { 52 | removeListeners(element, this.handlers[namespace][eventType], handler) 53 | this.handlers[namespace][eventType] = [] 54 | } 55 | else if (eventType) { 56 | for (var ns in this.handlers) { 57 | removeListeners(element, this.handlers[ns][eventType] || [], handler) 58 | this.handlers[ns][eventType] = [] 59 | } 60 | } 61 | else if (namespace && this.handlers[namespace]) { 62 | for (var type in this.handlers[namespace]) { 63 | removeListeners(element, this.handlers[namespace][type], handler) 64 | } 65 | this.handlers[namespace] = {} 66 | } 67 | } 68 | 69 | /* Adapted from jQuery 1.x offset() */ 70 | NoFrameworkAdapter.prototype.offset = function() { 71 | if (!this.element.ownerDocument) { 72 | return null 73 | } 74 | 75 | var documentElement = this.element.ownerDocument.documentElement 76 | var win = getWindow(this.element.ownerDocument) 77 | var rect = { 78 | top: 0, 79 | left: 0 80 | } 81 | 82 | if (this.element.getBoundingClientRect) { 83 | rect = this.element.getBoundingClientRect() 84 | } 85 | 86 | return { 87 | top: rect.top + win.pageYOffset - documentElement.clientTop, 88 | left: rect.left + win.pageXOffset - documentElement.clientLeft 89 | } 90 | } 91 | 92 | NoFrameworkAdapter.prototype.on = function(event, handler) { 93 | var eventParts = event.split('.') 94 | var eventType = eventParts[0] 95 | var namespace = eventParts[1] || '__default' 96 | var nsHandlers = this.handlers[namespace] = this.handlers[namespace] || {} 97 | var nsTypeList = nsHandlers[eventType] = nsHandlers[eventType] || [] 98 | 99 | nsTypeList.push(handler) 100 | this.element.addEventListener(eventType, handler) 101 | } 102 | 103 | NoFrameworkAdapter.prototype.outerHeight = function(includeMargin) { 104 | var height = this.innerHeight() 105 | var computedStyle 106 | 107 | if (includeMargin && !isWindow(this.element)) { 108 | computedStyle = window.getComputedStyle(this.element) 109 | height += parseInt(computedStyle.marginTop, 10) 110 | height += parseInt(computedStyle.marginBottom, 10) 111 | } 112 | 113 | return height 114 | } 115 | 116 | NoFrameworkAdapter.prototype.outerWidth = function(includeMargin) { 117 | var width = this.innerWidth() 118 | var computedStyle 119 | 120 | if (includeMargin && !isWindow(this.element)) { 121 | computedStyle = window.getComputedStyle(this.element) 122 | width += parseInt(computedStyle.marginLeft, 10) 123 | width += parseInt(computedStyle.marginRight, 10) 124 | } 125 | 126 | return width 127 | } 128 | 129 | NoFrameworkAdapter.prototype.scrollLeft = function() { 130 | var win = getWindow(this.element) 131 | return win ? win.pageXOffset : this.element.scrollLeft 132 | } 133 | 134 | NoFrameworkAdapter.prototype.scrollTop = function() { 135 | var win = getWindow(this.element) 136 | return win ? win.pageYOffset : this.element.scrollTop 137 | } 138 | 139 | NoFrameworkAdapter.prototype.height = function(newHeight) { 140 | this.element.style.height = newHeight; 141 | } 142 | 143 | NoFrameworkAdapter.prototype.removeClass = function(className) { 144 | this.element.className = this.element.className.replace(classNameRegExp(className), ''); 145 | } 146 | 147 | NoFrameworkAdapter.prototype.toggleClass = function(className, addClass) { 148 | var check = classNameRegExp(className); 149 | if (check.test(this.element.className)) { 150 | if (!addClass) { 151 | this.removeClass(className); 152 | } 153 | } else { 154 | this.element.className += ' ' + className; 155 | } 156 | } 157 | 158 | NoFrameworkAdapter.prototype.parent = function() { 159 | return new NoFrameworkAdapter(this.element.parentNode); 160 | } 161 | 162 | NoFrameworkAdapter.prototype.wrap = function(wrapper) { 163 | this.element.insertAdjacentHTML('beforebegin', wrapper) 164 | var wrapperNode = this.element.previousSibling 165 | this.element.parentNode.removeChild(this.element) 166 | wrapperNode.appendChild(this.element) 167 | } 168 | 169 | NoFrameworkAdapter.extend = function() { 170 | var args = Array.prototype.slice.call(arguments) 171 | 172 | function merge(target, obj) { 173 | if (typeof target === 'object' && typeof obj === 'object') { 174 | for (var key in obj) { 175 | if (obj.hasOwnProperty(key)) { 176 | target[key] = obj[key] 177 | } 178 | } 179 | } 180 | 181 | return target 182 | } 183 | 184 | for (var i = 1, end = args.length; i < end; i++) { 185 | merge(args[0], args[i]) 186 | } 187 | return args[0] 188 | } 189 | 190 | NoFrameworkAdapter.inArray = function(element, array, i) { 191 | return array == null ? -1 : array.indexOf(element, i) 192 | } 193 | 194 | NoFrameworkAdapter.isEmptyObject = function(obj) { 195 | /* eslint no-unused-vars: 0 */ 196 | for (var name in obj) { 197 | return false 198 | } 199 | return true 200 | } 201 | 202 | NoFrameworkAdapter.proxy = function(func, obj) { 203 | return function() { 204 | return func.apply(obj, arguments); 205 | } 206 | } 207 | 208 | Waypoint.adapters.push({ 209 | name: 'noframework', 210 | Adapter: NoFrameworkAdapter 211 | }) 212 | Waypoint.Adapter = NoFrameworkAdapter 213 | }()) 214 | -------------------------------------------------------------------------------- /master_middleman/source/javascripts/waypoints/sticky.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 'use strict' 3 | 4 | var Waypoint = window.Waypoint; 5 | var adapter = Waypoint.Adapter; 6 | 7 | /* http://imakewebthings.com/waypoints/shortcuts/sticky-elements */ 8 | function Sticky(options) { 9 | this.options = adapter.extend({}, Waypoint.defaults, Sticky.defaults, options) 10 | this.element = this.options.element 11 | this.$element = new adapter(this.element) 12 | this.createWrapper() 13 | this.createWaypoint() 14 | } 15 | 16 | /* Private */ 17 | Sticky.prototype.createWaypoint = function() { 18 | var originalHandler = this.options.handler 19 | 20 | this.waypoint = new Waypoint(adapter.extend({}, this.options, { 21 | element: this.wrapper, 22 | handler: adapter.proxy(function(direction) { 23 | var shouldBeStuck = this.options.direction.indexOf(direction) > -1 24 | var wrapperHeight = shouldBeStuck ? this.$element.outerHeight(true) : '' 25 | 26 | this.$wrapper.height(wrapperHeight) 27 | this.$element.toggleClass(this.options.stuckClass, shouldBeStuck) 28 | 29 | if (originalHandler) { 30 | originalHandler.call(this, direction) 31 | } 32 | }, this) 33 | })) 34 | } 35 | 36 | /* Private */ 37 | Sticky.prototype.createWrapper = function() { 38 | if (this.options.wrapper) { 39 | this.$element.wrap(this.options.wrapper) 40 | } 41 | this.$wrapper = this.$element.parent() 42 | this.wrapper = this.$wrapper.element 43 | } 44 | 45 | /* Public */ 46 | Sticky.prototype.destroy = function() { 47 | if (this.$element.parent().element === this.wrapper) { 48 | this.waypoint.destroy() 49 | this.$element.removeClass(this.options.stuckClass) 50 | if (this.options.wrapper) { 51 | this.$element.unwrap() 52 | } 53 | } 54 | } 55 | 56 | Sticky.defaults = { 57 | wrapper: '', 58 | stuckClass: 'stuck', 59 | direction: 'down right' 60 | } 61 | 62 | Waypoint.Sticky = Sticky 63 | }()) 64 | -------------------------------------------------------------------------------- /master_middleman/source/javascripts/waypoints/waypoint.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | 'use strict' 3 | 4 | var keyCounter = 0 5 | var allWaypoints = {} 6 | 7 | /* http://imakewebthings.com/waypoints/api/waypoint */ 8 | function Waypoint(options) { 9 | if (!options) { 10 | throw new Error('No options passed to Waypoint constructor') 11 | } 12 | if (!options.element) { 13 | throw new Error('No element option passed to Waypoint constructor') 14 | } 15 | if (!options.handler) { 16 | throw new Error('No handler option passed to Waypoint constructor') 17 | } 18 | 19 | this.key = 'waypoint-' + keyCounter 20 | this.options = Waypoint.Adapter.extend({}, Waypoint.defaults, options) 21 | this.element = this.options.element 22 | this.adapter = new Waypoint.Adapter(this.element) 23 | this.callback = options.handler 24 | this.axis = this.options.horizontal ? 'horizontal' : 'vertical' 25 | this.enabled = this.options.enabled 26 | this.triggerPoint = null 27 | this.group = Waypoint.Group.findOrCreate({ 28 | name: this.options.group, 29 | axis: this.axis 30 | }) 31 | this.context = Waypoint.Context.findOrCreateByElement(this.options.context) 32 | 33 | if (Waypoint.offsetAliases[this.options.offset]) { 34 | this.options.offset = Waypoint.offsetAliases[this.options.offset] 35 | } 36 | this.group.add(this) 37 | this.context.add(this) 38 | allWaypoints[this.key] = this 39 | keyCounter += 1 40 | } 41 | 42 | /* Private */ 43 | Waypoint.prototype.queueTrigger = function(direction) { 44 | this.group.queueTrigger(this, direction) 45 | } 46 | 47 | /* Private */ 48 | Waypoint.prototype.trigger = function(args) { 49 | if (!this.enabled) { 50 | return 51 | } 52 | if (this.callback) { 53 | this.callback.apply(this, args) 54 | } 55 | } 56 | 57 | /* Public */ 58 | /* http://imakewebthings.com/waypoints/api/destroy */ 59 | Waypoint.prototype.destroy = function() { 60 | this.context.remove(this) 61 | this.group.remove(this) 62 | delete allWaypoints[this.key] 63 | } 64 | 65 | /* Public */ 66 | /* http://imakewebthings.com/waypoints/api/disable */ 67 | Waypoint.prototype.disable = function() { 68 | this.enabled = false 69 | return this 70 | } 71 | 72 | /* Public */ 73 | /* http://imakewebthings.com/waypoints/api/enable */ 74 | Waypoint.prototype.enable = function() { 75 | this.context.refresh() 76 | this.enabled = true 77 | return this 78 | } 79 | 80 | /* Public */ 81 | /* http://imakewebthings.com/waypoints/api/next */ 82 | Waypoint.prototype.next = function() { 83 | return this.group.next(this) 84 | } 85 | 86 | /* Public */ 87 | /* http://imakewebthings.com/waypoints/api/previous */ 88 | Waypoint.prototype.previous = function() { 89 | return this.group.previous(this) 90 | } 91 | 92 | /* Private */ 93 | Waypoint.invokeAll = function(method) { 94 | var allWaypointsArray = [] 95 | for (var waypointKey in allWaypoints) { 96 | allWaypointsArray.push(allWaypoints[waypointKey]) 97 | } 98 | for (var i = 0, end = allWaypointsArray.length; i < end; i++) { 99 | allWaypointsArray[i][method]() 100 | } 101 | } 102 | 103 | /* Public */ 104 | /* http://imakewebthings.com/waypoints/api/destroy-all */ 105 | Waypoint.destroyAll = function() { 106 | Waypoint.invokeAll('destroy') 107 | } 108 | 109 | /* Public */ 110 | /* http://imakewebthings.com/waypoints/api/disable-all */ 111 | Waypoint.disableAll = function() { 112 | Waypoint.invokeAll('disable') 113 | } 114 | 115 | /* Public */ 116 | /* http://imakewebthings.com/waypoints/api/enable-all */ 117 | Waypoint.enableAll = function() { 118 | Waypoint.invokeAll('enable') 119 | } 120 | 121 | /* Public */ 122 | /* http://imakewebthings.com/waypoints/api/refresh-all */ 123 | Waypoint.refreshAll = function() { 124 | Waypoint.Context.refreshAll() 125 | } 126 | 127 | /* Public */ 128 | /* http://imakewebthings.com/waypoints/api/viewport-height */ 129 | Waypoint.viewportHeight = function() { 130 | return window.innerHeight || document.documentElement.clientHeight 131 | } 132 | 133 | /* Public */ 134 | /* http://imakewebthings.com/waypoints/api/viewport-width */ 135 | Waypoint.viewportWidth = function() { 136 | return document.documentElement.clientWidth 137 | } 138 | 139 | Waypoint.adapters = [] 140 | 141 | Waypoint.defaults = { 142 | context: window, 143 | continuous: true, 144 | enabled: true, 145 | group: 'default', 146 | horizontal: false, 147 | offset: 0 148 | } 149 | 150 | Waypoint.offsetAliases = { 151 | 'bottom-in-view': function() { 152 | return this.context.innerHeight() - this.adapter.outerHeight() 153 | }, 154 | 'right-in-view': function() { 155 | return this.context.innerWidth() - this.adapter.outerWidth() 156 | } 157 | } 158 | 159 | window.Waypoint = Waypoint 160 | }()) 161 | -------------------------------------------------------------------------------- /master_middleman/source/layouts/_additional-scripts.erb: -------------------------------------------------------------------------------- 1 | 18 | 19 | -------------------------------------------------------------------------------- /master_middleman/source/layouts/_book-footer.erb: -------------------------------------------------------------------------------- 1 |18 |
40 | 41 |- 19 | 20 |
25 |21 | Read the Docs 22 |
23 | 24 |- 26 | 27 |
32 |28 | Explore Case Studies 29 |
30 | 31 |- 33 | 34 |
39 |35 | Join the Community 36 |
37 | 38 |42 |661 |43 |47 |Contributing Documentation 44 |
45 |Contribute to the Cloud Foundry documentation.46 |
48 | 49 |50 |71 |Deploy Cloud Foundry 51 |
52 |Deploy Cloud Foundry on different infrastructures.53 |
54 |55 |70 |56 | Overview of deploying Cloud Foundry 57 |58 |
59 | 62 | 65 |
66 |67 | BOSH Backup and Restore (BBR) 68 |69 |
72 | 73 |74 |102 |Cloud Foundry CLI
75 |Direct a CF deployment from your local command line.76 |
77 |78 |101 |79 | Installing the cf CLI 80 |81 |82 | Getting started with the cf CLI 83 |84 |85 | Using the cf CLI with a proxy server 86 |87 | 90 |91 | Using cf CLI plug-ins 92 |93 |94 | Developing cf CLI plug-ins 95 |96 |97 | About starting apps 98 |99 | 100 |
103 | 104 |105 |216 |Develop and manage apps
106 |Develop, run, and track apps in the cloud.107 |
108 |109 |174 |110 | Designing and running your app in the cloud 111 |112 | 115 |116 | Deploying your large apps 117 |118 |119 | Configuring app deployments 120 |121 |122 | Deploying an app with Docker 123 |124 | 127 |128 | Using Cloud Foundry health checks 129 |130 |131 | Deploying with app manifests 132 |133 | 136 |137 | Running tasks in your apps 138 |139 |140 | Routes and domains 141 |142 |143 | Configuring per-route options 144 |145 |
146 |147 | Cloud Foundry environment variables 148 |149 |150 | Using blue-green deployment to reduce downtime 151 |152 |153 | App logging in Cloud Foundry 154 |155 |156 | Troubleshooting app deployment and health 157 |158 |159 | Configuring SSH access for your deployment 160 |161 |162 | Accessing your apps with SSH 163 |164 |165 | Accessing services with SSH 166 |167 | 170 |171 | Configuring apps to listen on custom ports 172 |173 |Integrating service instances with apps
175 |176 |215 |177 | Services 178 |179 |180 | Delivering service credentials to an app 181 |182 |183 | Managing service instances with the cf CLI 184 |185 |186 | Managing service keys 187 |188 |189 | User-provided service instances 190 |191 |192 | Manage app requests with route services 193 |194 |
195 |196 | Configuring Play Framework service connections 197 |198 | 199 |200 | Streaming app logs to log management services 201 |202 |203 | Streaming app logs to third-party services 204 |205 |206 | Integrating Cloud Foundry with Splunk 207 |208 |209 | Using an external filesystem (volume services) 210 |211 |212 | Using metrics with drain logs 213 |214 |
217 | 218 |219 |261 |220 | Creating Managed Services in Cloud Foundry
221 |Create and publish free or metered services for Cloud Foundry apps.222 |
223 |224 |260 |225 | Services in Cloud Foundry 226 |227 |228 | Open Service Broker API 229 |230 |231 | Managing Service Brokers in Cloud Foundry 232 |233 |234 | Managing access to Service Plans 235 |236 |237 | Dashboard Single Sign-on 238 |239 |
240 |241 | Service Broker examples 242 |243 |244 | App log streaming in Cloud Foundry 245 |246 |247 | Offering Route Services in Cloud Foundry 248 |249 |250 | Supporting multiple CFAR instances 251 |252 |
253 |254 | Binding credentials in Cloud Foundry 255 |256 |257 | CredHub 258 |259 |
262 | 263 |264 |351 |Administrating Cloud Foundry application runtime
265 |A guide for admins.266 |
267 |268 |350 |269 | cf CLI user management 270 |271 |272 | Creating and modifying Quota Plans 273 |274 |275 | Managing custom buildpacks 276 |277 |278 | Adding a custom stack 279 |280 |281 | Using Docker in CFAR 282 |283 |284 | App security groups in Cloud Foundry 285 |286 |
287 |288 | Administering container-to-container networking 289 |290 |291 | Managing isolation segments 292 |293 |294 | Routing isolation segments 295 |296 |297 | Feature flags 298 |299 |300 | Configuring SSH access for Cloud Foundry 301 |302 |303 | Enabling IPv6 for hosted apps 304 |305 |306 | Securing traffic into CFAR 307 |308 |309 | Configuring trusted system certificates for apps 310 |311 |
312 |313 | Enabling TCP routing 314 |315 |316 | Distributed tracing 317 |318 |319 | Enabling Zipkin tracing 320 |321 |322 | Enabling W3C tracing 323 |324 |325 | Supporting WebSockets 326 |327 | 330 |331 | Troubleshooting slow requests in CFAR 332 |333 |334 | Troubleshooting router error responses 335 |336 | 339 |340 | Adding volume services to your deployment 341 |342 |343 | Gorouter back end keep-alive connections 344 |345 |
346 |347 | User Account and Authentication (UAA) server 348 |349 |
352 | 353 |354 |371 | 372 |User Account and Authentication
355 |356 | UAA Overview 357 |358 |359 | UAA Concepts 360 |361 |362 | Identity Provider for UAA 363 |364 |365 | UAA Metrics 366 |367 |368 | Deploy UAA 369 |370 |373 |504 |Cloud Foundry Buildpacks
374 |Package the languages and libraries that support your apps.375 |Cloud Native Buildpacks
376 |377 |381 | 382 |378 | Paketo Buildpacks 379 |380 |Classic Buildpacks
383 |384 |406 |385 | How buildpacks work 386 |387 |388 | Custom buildpacks 389 |390 |391 | Packaging dependencies for offline buildpacks 392 |393 |394 | Configuring a production server 395 |396 |397 | Merging from upstream buildpacks 398 |399 |400 | Upgrading dependency versions 401 |402 |403 | Releasing a new buildpack version 404 |405 |Java
407 |408 |433 |409 | Java buildpack 410 |411 |412 | Tips for Java developers 413 |414 |415 | Grails 416 |417 |418 | Ratpack 419 |420 |421 | Spring 422 |423 |424 | Configure service connections 425 |426 |427 | Using Java Native Image buildpack 428 |429 |430 | Cloud Foundry Java Client Library 431 |432 |Node.js
434 |435 |448 |436 | Node.js Buildpack 437 |438 |439 | Tips for Node.js apps 440 |441 | 444 |445 | Configure service connections for Node.js 446 |447 |Ruby
449 |450 |479 |451 | Ruby buildpack 452 |453 |454 | Getting started deploying Ruby apps 455 |456 |457 | Getting started deploying Ruby on Rails apps 458 |459 |460 | Deploy a sample Ruby on Rails app 461 |462 |463 | Configure Rake tasks for deployed apps 464 |465 |466 | Tips for Ruby developers 467 |468 | 472 |473 | Configure service connections for Ruby 474 |475 |476 | Support for Windows Gemfiles 477 |478 |Other buildpacks
480 |481 |503 |482 | Go 483 |484 |485 | NGINX 486 |487 |488 | .NET 489 |490 |491 | PHP 492 |493 |494 | Python 495 |496 |497 | Staticfile (for HTML, CSS, JavaScript) 498 |499 |500 | Binary (for binary web servers) 501 |502 |
505 | 506 |507 |546 |Running Cloud Foundry
508 |A guide for operators.509 |
510 |511 |545 |512 | Overview 513 |514 |515 | Cloud Foundry logging 516 |517 |518 | Configuring system logging 519 |520 |521 | Configuring Diego for upgrades 522 |523 |524 | Configuring Diego Cell disk cleanup scheduling 525 |526 |527 | Configuring Health Monitor notifications 528 |529 |530 | Audit events 531 |532 |533 | UAA audit requirements 534 |535 |536 | Usage events and billing 537 |538 |539 | Monitoring and testing Diego components 540 |541 |542 | Troubleshooting Cloud Foundry 543 |544 |
547 | 548 |549 |598 |Cloud Foundry concepts
550 |Understand how Cloud Foundry works.551 |
552 |553 |597 |554 | Cloud Foundry overview 555 |556 |557 | Runtime components 558 |559 |560 | Diego components and architecture 561 |562 | 565 |566 | Staging your apps in Cloud Foundry 567 |568 |569 | Cloud Foundry app SSH components and processes 570 |571 |
572 |573 | App Security Groups in Cloud Foundry 574 |575 |576 | High availability in Cloud Foundry 577 |578 | 581 |582 | Planning orgs and spaces in Cloud Foundry 583 |584 |585 | Cloud Foundry security 586 |587 |588 | Container security in Cloud Foundry 589 |590 |591 | Container-to-container networking 592 |593 |594 | HTTP routing 595 |596 |
599 | 600 |601 |631 |Logging and metrics in Cloud Foundry
602 |Aggregate and stream logs and metrics from Cloud Foundry.603 |
604 |605 |630 |606 | Logging and metrics architecture 607 |608 |609 | Loggregator guide for Cloud Foundry operators 610 |611 |612 | App logging in Cloud Foundry 613 |614 |615 | Security event logging 616 |617 |618 | Cloud Foundry component metrics 619 |620 |621 | Configuring the OpenTelemetry Collector 622 |623 |624 | Deploying a nozzle to the Loggregator Firehose 625 |626 |627 | Installing the Loggregator plug-in for cf CLI 628 |629 |
632 | 633 |634 |660 |API Reference
635 | 636 |
637 |638 | 642 |659 |643 | Available Cloud Controller API client libraries 644 |645 | 649 |650 | CAPI V2 documentation 651 |652 |653 | CAPI V3 documentation 654 |655 |656 | CredHub API documentation 657 |658 |662 | 663 |664 | 667 |2 | Cloud Foundry Documentation 3 | © <%= Time.now.year %> Cloud Foundry Foundation. All Rights Reserved. 4 |5 |6 | Get Involved 7 |8 | -------------------------------------------------------------------------------- /master_middleman/source/layouts/_pre-content.erb: -------------------------------------------------------------------------------- 1 | <%# Unless you've set `modified_date` to false in the frontmatter, add the `modified_date` variable to the beginning of a topic. %> 2 | <% unless current_page.data.modified_date == false %> 3 |<%= modified_date %>
4 | <% end %> -------------------------------------------------------------------------------- /master_middleman/source/layouts/layout.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |11 | <% if current_page.data.title %> 12 | <%= current_page.data.title %> | 13 | <% end %> 14 | <%= vars.book_title_short %> 15 | 16 | 17 | <%= stylesheet_link_tag 'all', :media => 'screen, print' %> 18 | <%= stylesheet_link_tag 'print', :media => 'print' %> 19 | 20 | 21 | <%= javascript_include_tag "all" %> 22 | <%= partial 'layouts/additional-scripts' %> 23 | 24 | 25 | 26 | 27 | 60 | 61 | 62 | 63 |64 | 67 |68 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /master_middleman/source/owners.json.erb: -------------------------------------------------------------------------------- 1 | <%= owners.to_json %> 2 | -------------------------------------------------------------------------------- /master_middleman/source/search.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Search 3 | --- 4 | 5 | <%%= yield %> 6 | -------------------------------------------------------------------------------- /master_middleman/source/stylesheets/book-styles.scss: -------------------------------------------------------------------------------- 1 | // Declare your book-specific style overrides in this file. 2 | // 3 | // For example: 4 | // 5 | // .container { 6 | // color: mediumvioletred; 7 | // } 8 | // 9 | // These styles give http://docs.cloudfoundry.org/index.html two columns 10 | 11 | @import "font-awesome/variables"; 12 | // CUSTOM HELPER PARTIALS 13 | @import "partials/_vars.scss"; 14 | @import "partials/_mixins.scss"; 15 | 16 | @import "font-awesome/variables"; 17 | @import "font-awesome/core"; 18 | @import "font-awesome/path"; 19 | @import "vendor/mermaid"; 20 | 21 | * { 22 | -webkit-box-sizing: border-box; 23 | -moz-box-sizing: border-box; 24 | box-sizing: border-box; 25 | } 26 | 27 | // master.scss 28 | .panel { 29 | img { 30 | height: 2.6rem !important; 31 | } 32 | 33 | @media (min-width: $bp-wide) { 34 | padding-left: 0em; 35 | } 36 | } 37 | 38 | .title-top { 39 | font-size: 1.5em; 40 | font-weight: 400; 41 | text-align: center; 42 | } 43 | 44 | .title-intro { 45 | font-weight: 400; 46 | } 47 | 48 | .title-deemph { 49 | font-size: .75em; 50 | } 51 | 52 | .ftux { 53 | font-family: $font-primary; 54 | font-weight: 500; 55 | line-height: 1.45; 56 | margin: 0; 57 | padding: 0; 58 | font-size: 1.23em; 59 | } 60 | 61 | // partials/_default.scss 62 | input:focus { 63 | border-color: $blue3; 64 | } 65 | 66 | input:hover { 67 | border-color: $blue3; 68 | } 69 | 70 | // Columns 71 | .docs-column-main { 72 | -webkit-column-count: 2; 73 | -moz-column-count: 2; 74 | column-count: 2; 75 | -webkit-column-gap: 6em; /* Chrome, Safari, Opera */ 76 | -moz-column-gap: 6em; /* Firefox */ 77 | column-gap: 6em; 78 | } 79 | 80 | .docs-subsection { 81 | display: inline-block; 82 | margin: 0em; 83 | -webkit-column-break-inside: avoid; 84 | page-break-inside: avoid; 85 | break-inside: avoid; 86 | } 87 | 88 | .docs-module-description { 89 | color: $gray2; 90 | margin-top: -0.5em; 91 | } 92 | 93 | // Reference 94 | .docs-ref-link { 95 | display: inline 96 | } 97 | 98 | .docs-ref-list { 99 | list-style-stype: none; 100 | padding: 0em; 101 | padding-top: 1em; 102 | } 103 | 104 | .ref-link-spacer { 105 | margin-left: 2em; 106 | margin-right: 2em; 107 | } 108 | 109 | .docs-subsection h3 a { 110 | color: $navy; 111 | } 112 | 113 | hr { 114 | margin-top: 1em; 115 | } 116 | 117 | .header-item:after { 118 | @media (min-width: $bp-wide) { 119 | content: ""; 120 | } 121 | } 122 | 123 | // partials/_sidenav.scss 124 | .nav-content .menu { 125 | margin-top: 2em; 126 | } 127 | 128 | .title-details { 129 | font-size: 1.3em; 130 | font-weight: 300; 131 | margin: 0 auto; 132 | max-width: 30em; 133 | padding-bottom: 2em; 134 | text-align: center; 135 | padding-top: 1.5em; 136 | padding-bottom: 0.5em; 137 | } 138 | 139 | .panels { 140 | display: block; 141 | padding: 0; 142 | @include clearfix; 143 | @media (min-width: $bp-wide) { 144 | margin-top: 1.5em; 145 | } 146 | } 147 | 148 | // Add notebook like shadows 149 | /*doc 150 | --- 151 | title: Panel 152 | name: panel 153 | category: basics 154 | --- 155 | ```html_example 156 |
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Necessitatibus totam libero facilis voluptatem aliquam incidunt ipsa officiis, dicta nihil expedita, molestiae delectus impedit hic quidem deserunt laudantium, sint debitis tenetur.
226 | ``` 227 | */ 228 | 229 | // Notes and tips 230 | .note { 231 | background: #ffffed; 232 | border-color: #ebebd3; 233 | border-radius: 3px; 234 | border-style: solid; 235 | border-width: 1px; 236 | margin: 1em 0; 237 | padding: 0.7em 1em 0.7em 2.3em; 238 | position: relative; 239 | &:before { 240 | content: $fa-var-lightbulb-o; 241 | @extend .fa; 242 | color: #b9b781; 243 | font-size: 1.5em; 244 | left: 0.6em; 245 | position: absolute; 246 | top: 0.45em; 247 | } 248 | } 249 | 250 | .note.warning { 251 | background-color: #fdd; 252 | border-color: #fbb; 253 | &:before { 254 | content: "\F071"; 255 | font-family: FontAwesome; 256 | color: #b9b781; 257 | font-size: 1.2em; 258 | left: 0.6em; 259 | position: absolute; 260 | top: 0.75em; 261 | } 262 | } 263 | 264 | .note.breaking { 265 | background-color: #fdd; 266 | border-color: #fbb; 267 | &:before { 268 | content: "\F127"; 269 | font-family: FontAwesome; 270 | color: #000000; 271 | font-size: 1.2em; 272 | left: 0.6em; 273 | position: absolute; 274 | top: 0.75em; 275 | } 276 | } 277 | 278 | /*doc 279 | --- 280 | title: Content Helper - New User Tip 281 | name: content_helper-tip 282 | category: basics 283 | --- 284 | ```html_example 285 |Lorem ipsum dolor sit amet, consectetur adipisicing elit. Necessitatibus totam libero facilis voluptatem aliquam incidunt ipsa officiis, dicta nihil expedita, molestiae delectus impedit hic quidem deserunt laudantium, sint debitis tenetur.
286 | ``` 287 | */ 288 | 289 | // Tips for first-time users 290 | .tip { 291 | background: #ffffff; 292 | border-color: $color-border-tip; 293 | border-radius: 3px; 294 | border-style: solid; 295 | border-width: 1px; 296 | margin: 1em 0; 297 | padding: 1.7em 2em; 298 | position: relative; 299 | text-align: left; 300 | &:before { 301 | @extend .fa; 302 | color: #7C7C7C; 303 | font-size: $font-size-xl; 304 | left: 0.5em; 305 | position: absolute; 306 | top: 0.8em; 307 | } 308 | } 309 | 310 | -------------------------------------------------------------------------------- /master_middleman/source/stylesheets/partials/_book-base-values.scss: -------------------------------------------------------------------------------- 1 | // Declare your book-specific variable overrides in this file. 2 | // 3 | // For example: 4 | // 5 | // $navy: #333333; 6 | 7 | $blue3: #87b6e2; 8 | -------------------------------------------------------------------------------- /master_middleman/source/stylesheets/partials/_book-vars.scss: -------------------------------------------------------------------------------- 1 | // Variables that use the values defined in partials/_book-base-values.scss 2 | // and/or partials/_vars.scss 3 | 4 | $navy: #243640; 5 | $blue1: #2185c5; 6 | $blue2: #a7cae1; 7 | $bluegray1: #4b6475; 8 | 9 | $color-accent-bright: $blue1; 10 | 11 | $color-bg-header: $blue2; 12 | $color-link: $blue1; 13 | $color-link-border: #cddce5; 14 | -------------------------------------------------------------------------------- /master_middleman/source/stylesheets/vendor/mermaid.scss: -------------------------------------------------------------------------------- 1 | /* Flowchart variables */ 2 | /* Sequence Diagram variables */ 3 | /* Gantt chart variables */ 4 | .mermaid { 5 | .label { 6 | color: #333; 7 | } 8 | .node rect, 9 | .node circle, 10 | .node ellipse, 11 | .node polygon { 12 | fill: #ECECFF; 13 | stroke: #CCCCFF; 14 | stroke-width: 1px; 15 | } 16 | .edgePath .path { 17 | stroke: #333333; 18 | } 19 | .edgeLabel { 20 | background-color: #e8e8e8; 21 | } 22 | .cluster rect { 23 | fill: #ffffde !important; 24 | rx: 4 !important; 25 | stroke: #aaaa33 !important; 26 | stroke-width: 1px !important; 27 | } 28 | .cluster text { 29 | fill: #333; 30 | } 31 | .actor { 32 | stroke: #CCCCFF; 33 | fill: #ECECFF; 34 | } 35 | text.actor { 36 | fill: black; 37 | stroke: none; 38 | } 39 | .actor-line { 40 | stroke: grey; 41 | } 42 | .messageLine0 { 43 | stroke-width: 1.5; 44 | stroke-dasharray: "2 2"; 45 | marker-end: "url(#arrowhead)"; 46 | stroke: #333; 47 | } 48 | .messageLine1 { 49 | stroke-width: 1.5; 50 | stroke-dasharray: "2 2"; 51 | stroke: #333; 52 | } 53 | #arrowhead { 54 | fill: #333; 55 | } 56 | #crosshead path { 57 | fill: #333 !important; 58 | stroke: #333 !important; 59 | } 60 | .messageText { 61 | fill: #333; 62 | stroke: none; 63 | } 64 | .labelBox { 65 | stroke: #CCCCFF; 66 | fill: #ECECFF; 67 | } 68 | .labelText { 69 | fill: black; 70 | stroke: none; 71 | } 72 | .loopText { 73 | fill: black; 74 | stroke: none; 75 | } 76 | .loopLine { 77 | stroke-width: 2; 78 | stroke-dasharray: "2 2"; 79 | marker-end: "url(#arrowhead)"; 80 | stroke: #CCCCFF; 81 | } 82 | .note { 83 | stroke: #aaaa33; 84 | fill: #fff5ad; 85 | } 86 | .noteText { 87 | fill: black; 88 | stroke: none; 89 | font-family: 'trebuchet ms', verdana, arial; 90 | font-size: 14px; 91 | } 92 | /** Section styling */ 93 | .section { 94 | stroke: none; 95 | opacity: 0.2; 96 | } 97 | .section0 { 98 | fill: rgba(102, 102, 255, 0.49); 99 | } 100 | .section2 { 101 | fill: #fff400; 102 | } 103 | .section1, 104 | .section3 { 105 | fill: white; 106 | opacity: 0.2; 107 | } 108 | .sectionTitle0 { 109 | fill: #333; 110 | } 111 | .sectionTitle1 { 112 | fill: #333; 113 | } 114 | .sectionTitle2 { 115 | fill: #333; 116 | } 117 | .sectionTitle3 { 118 | fill: #333; 119 | } 120 | .sectionTitle { 121 | text-anchor: start; 122 | font-size: 11px; 123 | text-height: 14px; 124 | } 125 | /* Grid and axis */ 126 | .grid .tick { 127 | stroke: lightgrey; 128 | opacity: 0.3; 129 | shape-rendering: crispEdges; 130 | } 131 | .grid path { 132 | stroke-width: 0; 133 | } 134 | /* Today line */ 135 | .today { 136 | fill: none; 137 | stroke: red; 138 | stroke-width: 2px; 139 | } 140 | /* Task styling */ 141 | /* Default task */ 142 | .task { 143 | stroke-width: 2; 144 | } 145 | .taskText { 146 | text-anchor: middle; 147 | font-size: 11px; 148 | } 149 | .taskTextOutsideRight { 150 | fill: black; 151 | text-anchor: start; 152 | font-size: 11px; 153 | } 154 | .taskTextOutsideLeft { 155 | fill: black; 156 | text-anchor: end; 157 | font-size: 11px; 158 | } 159 | /* Specific task settings for the sections*/ 160 | .taskText0, 161 | .taskText1, 162 | .taskText2, 163 | .taskText3 { 164 | fill: white; 165 | } 166 | .task0, 167 | .task1, 168 | .task2, 169 | .task3 { 170 | fill: #8a90dd; 171 | stroke: #534fbc; 172 | } 173 | .taskTextOutside0, 174 | .taskTextOutside2 { 175 | fill: black; 176 | } 177 | .taskTextOutside1, 178 | .taskTextOutside3 { 179 | fill: black; 180 | } 181 | /* Active task */ 182 | .active0, 183 | .active1, 184 | .active2, 185 | .active3 { 186 | fill: #bfc7ff; 187 | stroke: #534fbc; 188 | } 189 | .activeText0, 190 | .activeText1, 191 | .activeText2, 192 | .activeText3 { 193 | fill: black !important; 194 | } 195 | /* Completed task */ 196 | .done0, 197 | .done1, 198 | .done2, 199 | .done3 { 200 | stroke: grey; 201 | fill: lightgrey; 202 | stroke-width: 2; 203 | } 204 | .doneText0, 205 | .doneText1, 206 | .doneText2, 207 | .doneText3 { 208 | fill: black !important; 209 | } 210 | /* Tasks on the critical line */ 211 | .crit0, 212 | .crit1, 213 | .crit2, 214 | .crit3 { 215 | stroke: #ff8888; 216 | fill: red; 217 | stroke-width: 2; 218 | } 219 | .activeCrit0, 220 | .activeCrit1, 221 | .activeCrit2, 222 | .activeCrit3 { 223 | stroke: #ff8888; 224 | fill: #bfc7ff; 225 | stroke-width: 2; 226 | } 227 | .doneCrit0, 228 | .doneCrit1, 229 | .doneCrit2, 230 | .doneCrit3 { 231 | stroke: #ff8888; 232 | fill: lightgrey; 233 | stroke-width: 2; 234 | cursor: pointer; 235 | shape-rendering: crispEdges; 236 | } 237 | .doneCritText0, 238 | .doneCritText1, 239 | .doneCritText2, 240 | .doneCritText3 { 241 | fill: black !important; 242 | } 243 | .activeCritText0, 244 | .activeCritText1, 245 | .activeCritText2, 246 | .activeCritText3 { 247 | fill: black !important; 248 | } 249 | .titleText { 250 | text-anchor: middle; 251 | font-size: 18px; 252 | fill: black; 253 | } 254 | /* 255 | 256 | 257 | */ 258 | .node text { 259 | font-family: 'trebuchet ms', verdana, arial; 260 | font-size: 14px; 261 | } 262 | div.mermaidTooltip { 263 | position: absolute; 264 | text-align: center; 265 | max-width: 200px; 266 | padding: 2px; 267 | font-family: 'trebuchet ms', verdana, arial; 268 | font-size: 12px; 269 | background: #ffffde; 270 | border: 1px solid #aaaa33; 271 | border-radius: 2px; 272 | pointer-events: none; 273 | z-index: 100; 274 | } 275 | } -------------------------------------------------------------------------------- /master_middleman/source/subnavs/_cf-subnav.erb: -------------------------------------------------------------------------------- 1 | 418 | -------------------------------------------------------------------------------- /redirects.rb: -------------------------------------------------------------------------------- 1 | # Redirect all production http traffic to https 2 | r301 %r{.*}, 'https://docs.cloudfoundry.org$&', :if => Proc.new { |rack_env| 3 | rack_env['SERVER_NAME'] == 'docs.cloudfoundry.org' && rack_env['HTTP_X_FORWARDED_PROTO'] == 'http' 4 | } 5 | 6 | r301 %r{/bosh/(.*)}, 'http://bosh.io/docs/$1' 7 | r301 '/console/cf-api-endpoint.html', '/running/cf-api-endpoint.html' 8 | 9 | r301 %r{/deploying/ec2/.*}, '/deploying/aws/index.html' 10 | 11 | r301 '/deploying/openstack/deploying_bosh.html', '/deploying/openstack/index.html' 12 | r301 '/deploying/openstack/deploying_microbosh.html', '/deploying/openstack/index.html' 13 | r301 '/deploying/openstack/uploading_bosh_stemcell.html', '/deploying/openstack/index.html' 14 | 15 | r301 '/deploying/vsphere/bosh-example-manifest.html', '/deploying/vsphere/index.html' 16 | r301 '/deploying/vsphere/deploying_bosh_with_micro_bosh.html', '/deploying/vsphere/index.html' 17 | r301 '/deploying/vsphere/deploying_micro_bosh.html', '/deploying/vsphere/index.html' 18 | r301 '/deploying/vsphere/install-and-prepare-vsphere.html', '/deploying/vsphere/index.html' 19 | 20 | r301 '/deploying/vcloud/bosh-example-manifest.html', '/deploying/vcloud/index.html' 21 | r301 '/deploying/vcloud/deploying_bosh_with_micro_bosh.html', '/deploying/vcloud/index.html' 22 | r301 '/deploying/vcloud/deploying_micro_bosh.html', '/deploying/vcloud/index.html' 23 | r301 '/deploying/vcloud/micro-bosh-example-manifest.html', '/deploying/vcloud/index.html' 24 | 25 | r301 '/deploying/boshlite/deploy_cf_boshlite.html', '/deploying/boshlite/index.html' 26 | 27 | r301 '/deploying/cf-stub-aws.html', '/deploying/aws/cf-stub.html' 28 | r301 '/deploying/cf-stub-openstack.html', '/deploying/openstack/cf-stub.html' 29 | r301 '/deploying/cf-stub-vsphere.html', '/deploying/common/vsphere-vcloud-cf-stub.html' 30 | r301 '/deploying/cf-stub-vcloud.html', '/deploying/common/vsphere-vcloud-cf-stub.html' 31 | 32 | r301 '/deploying/adding-services.html', 'https://github.com/cloudfoundry-community/cf-services-contrib-release' 33 | 34 | r301 '/deploying/common/cf-release.html', '/deploying/index.html' 35 | r301 '/deploying/common/create_a_manifest.html', '/deploying/index.html' 36 | r301 '/deploying/common/log_drain_blacklists.html', '/loggregator/data-sources.html' 37 | 38 | r301 '/devguide/deploy-apps/domains-routes.html', '/devguide/deploy-apps/routes-domains.html' 39 | r301 '/devguide/deploy-apps/sts.html', '/buildpacks/java/index.html' 40 | r301 '/devguide/deploy-apps/api-endpoint.html', '/running/cf-api-endpoint.html' 41 | r301 '/devguide/installcf/whats-new-v6.html', '/cf-cli/getting-started.html' 42 | r301 '/devguide/installcf/http-proxy.html', '/cf-cli/http-proxy.html' 43 | r301 %r{/devguide/installcf/(.*)}, '/cf-cli/$1' 44 | r301 %r{/devguide/cf-cli/(.*)}, '/cf-cli/$1' 45 | r301 '/cf-cli/cf-help.html', 'https://cli.cloudfoundry.org/en-US/v6/' 46 | r301 '/cf-cli/cf7-help.html', 'https://cli.cloudfoundry.org/en-US/v7/' 47 | 48 | r301 '/devguide/deploy-apps/manifest.html#deprecated', '/devguide/deploy-apps/manifest-attributes.html#deprecated' 49 | 50 | r301 '/running/managing-cf/', '/running/index.html#managing' 51 | r301 '/running/managing-cf/index.html', '/running/index.html#managing' 52 | r301 '/running/troubleshooting/', '/running/index.html#troubleshooting' 53 | r301 '/running/troubleshooting/index.html', '/running/index.html#troubleshooting' 54 | r301 '/running/troubleshooting/troubleshooting-apps.html', '/running/index.html#troubleshooting' 55 | r301 '/running/troubleshooting/troubleshooting-warden-services', '/running/index.html#troubleshooting' 56 | r301 '/running/using-vol-services.html', '/devguide/services/using-vol-services.html' 57 | r301 '/running/api/version.html', '/running/cf-api-endpoint.html' 58 | r301 '/running/distributed-tracing.html', '/adminguide/distributed-tracing.html' 59 | 60 | r301 '/concepts/diego/diego-components.html', '/concepts/diego/diego-architecture.html#core' 61 | r301 '/concepts/ha-levels.html', '/concepts/high-availability.html#cf-ha' 62 | r301 '/services/asynchronous-operations.html', '/services/api.html#asynchronous-operations' 63 | 64 | r301 '/buildpacks/java/build-tool-int.html', '/buildpacks/java/index.html' 65 | r301 '/buildpacks/ruby/ruby-prod-server.html', '/buildpacks/prod-server.html' 66 | r301 '/buildpacks/java/sts.html', '/buildpacks/java/index.html' 67 | 68 | r301 '/running/managing-cf/quota-plans.html', '/adminguide/quota-plans.html' 69 | r301 '/adminguide/apps-enable-diego.html', '/concepts/diego/diego-architecture.html' 70 | r301 '/running/apps-enable-diego.html', '/concepts/diego/diego-architecture.html' 71 | 72 | r301 '/deploying/vsphere/vcenter_user_privileges.html', 'https://bosh.io/docs/init-vsphere.html' 73 | 74 | r301 '/owners.html', 'http://docs-owners.cloudfoundry.org' 75 | r302 '/devguide/deploy-apps/app-startup.html', '/devguide/deploy-apps/start-restart-restage.html' 76 | 77 | r301 '/adminguide/hm-notifications.html', '/running/hm-notifications.html' 78 | r301 '/services/volume-services-v2.10.html', '/devguide/services/volume-services.html' 79 | r301 '/services/volume-services-v2.9.html', '/devguide/services/volume-services.html' 80 | r301 '/devguide/services/migrate-db.html', '/services/overview.html#migrating' 81 | 82 | r301 %r{/services/api-v(.*)}, '/services/api.html' 83 | 84 | r301 '/adminguide/container-networking.html', '/devguide/deploy-apps/cf-networking.html' 85 | r301 '/adminguide/trusted-system-certificates.html', '/running/trusted-system-certificates.html' 86 | r301 '/adminguide/deploy-vol-services.html', '/running/deploy-vol-services.html' 87 | 88 | r301 '/loggregator/all_metrics.html', '/running/all_metrics.html' 89 | r301 '/loggregator/dea-metrics.html', '/running/all_metrics.html' 90 | r301 '/running/dea-metrics.html', '/running/all_metrics.html' 91 | 92 | r301 '/adminguide/app-sec-groups.html', '/concepts/asg.html' 93 | r301 '/adminguide/custom-stack.html', '/running/custom-stack.html' 94 | 95 | r301 '/deploying/aws/setup_aws.html', '/deploying/aws/setup_bosh_aws.html' 96 | 97 | r301 '/concepts/architecture/execution-agent.html', '/concepts/diego/dea-vs-diego.html' 98 | r301 '/concepts/architecture/dea-algorithm.html', '/concepts/diego/dea-vs-diego.html' 99 | r301 '/concepts/architecture/warden.html', '/concepts/diego/dea-vs-diego.html' 100 | 101 | r301 '/running/troubleshooting/error-codes.html', '/running/index.html' 102 | r301 '/running/troubleshooting/v2-errors.html', '/running/index.html' 103 | r301 '/running/troubleshooting/v1-errors.html', '/running/index.html' 104 | 105 | r301 '/services/api.html', 'https://github.com/openservicebrokerapi/servicebroker/blob/v2.12/spec.md' 106 | r301 '/services/release-notes.html', 'https://github.com/openservicebrokerapi/servicebroker/blob/v2.12/release-notes.md' 107 | 108 | r301 '/adminguide/uaa-user-management.html', '/uaa/uaa-user-management.html' 109 | r301 '/buildpacks/detection.html', '/buildpacks/understand-buildpacks.html' 110 | r301 %r{/deploying/cf-release/.*}, '/deploying/cf-release-eol.html' 111 | 112 | #OSBAPI Redirects 113 | r301 '/services/catalog-metadata.html', 'https://github.com/openservicebrokerapi/servicebroker/blob/master/profile.md#service-metadata' 114 | r301 '/services/volume-services.html', 'https://github.com/openservicebrokerapi/servicebroker/blob/master/spec.md#volume-mounts-object' 115 | 116 | r301 '/adminguide/manage-domains-routes.html', '/devguide/deploy-apps/routes-domains.html' 117 | 118 | r301 '/running/troubleshooting/troubleshooting-diego-windows.html', '/running/troubleshooting/' 119 | 120 | r301 '/concepts/architecture/router.html', '/concepts/cf-routing-architecture.html' 121 | 122 | # BBR release notes redirect 123 | r301 '/bbr/bbr-rn.html', 'https://github.com/cloudfoundry-incubator/bosh-backup-and-restore/releases' 124 | -------------------------------------------------------------------------------- /run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Bring up the Docs at http://localhost:4567 4 | bundle exec bookbinder bind local 5 | cd final_app 6 | ruby app.rb 7 | --------------------------------------------------------------------------------