Welcome to the Cloud Controller
The Cloud Controller provides REST API endpoints to create and manage apps, services, user roles, and more!
The Cloud Controller supports Postgres and Mysql.
The Cloud Controller manages a blobstore for:
- Resource cache: During package upload resource matching, Cloud Controller will only upload files it doesn't already have in this cache.
- App packages: Unstaged files for an application
- Droplets: An executable containing an app and its runtime dependencies
- Buildpacks: Set of programs that transform packages into droplets
- Buildpack cache: Cached dependencies and build artifacts to speed up future staging
- Local (NFS)
The Cloud Controller uses Diego to stage and run apps and tasks.
See Diego Design Notes for more details.
Please read the contributors' guide
TLDR: Always run
bundle exec rake before committing
To maintain a consistent and effective approach to testing, please refer to the spec README and keep it up to date, documenting the purpose of the various types of tests.
rspec will randomly pick between postgres and mysql.
It will try to connect to those databases with the following connection string: postgres: postgres://postgres@localhost:5432/cc_test mysql: mysql2://root:password@localhost:3306/cc_test
rake db:create will create the above database when the
DB environment variable is set to postgres or mysql.
You should run this before running rake in order to ensure that the
cc_test database exists.
You can specify the full connection string via the
environment variable. Examples:
DB_CONNECTION_STRING="postgres://postgres@localhost:5432/cc_test" rake DB_CONNECTION_STRING="mysql2://root:password@localhost:3306/cc_test" rake
If you are running the integration specs (which are included in the full rake),
and you are specifying DB_CONNECTION_STRING, you will also
need to have a second test database with
_integration_cc as the name suffix.
For example, if you are using:
You will also need a database called:
Running tests on a single file
The development team typically will run the specs to a single file as (e.g.)
bundle exec rspec spec/controllers/runtime/users_controller_spec.rb
Running all the tests
bundle exec rake spec
Running static analysis
bundle exec rubocop
Cloud Controller uses Steno to manage its logs. Each log entry includes a "source" field to designate which module in the code the entry originates from. Some of the possible sources are 'cc.app', 'cc.app_stager', 'cc.dea.client' and 'cc.healthmanager.client'.
Here are some use cases for the different log levels:
error- the CC received a malformed HTTP request, or a request for a non-existent droplet
warn- the CC failed to delete a droplet, CC received a request with an invalid auth token
info- CC received a token from UAA, CC received a NATS request
debug2- CC created a service, updated a service
debug- CC syncs resource pool, CC uploaded a file
The Cloud Controller uses a YAML configuration file. For an example, see