Component: Cloud Controller

Page last updated:

The Cloud Controller provides REST API endpoints for clients to access the system. The Cloud Controller maintains a database with tables for orgs, spaces, services, user roles, and more.

Diego Auction

The Cloud Controller uses the Diego Auction to balance application processes over the cells in a Cloud Foundry installation.

Database (CC_DB)

The Cloud Controller database has been tested with Postgres.

Blobstore

The Cloud Controller manages a blobstore for the following:

  • Resources: Files that are uploaded to the Cloud Controller with a unique SHA such that they can be reused without re-uploading the file

  • App Packages: Unstaged files that represent an application

  • Droplets: Result of taking an app package, staging it by processing a buildpack, and preparing it to run

You can configure the blobstore as either an internal server or an external S3 or S3-compatible endpoint.

The blob store uses the Fog Ruby gem such that it can use abstractions like Amazon S3, WebDAV, or NFS file system for storage.

NATS Messaging

The Cloud Controller interacts with other core components of the Cloud Foundry platform using the NATS message bus. For example, the Cloud Controller uses NATS when performing the following interactions:

  • Instructing a cell to stage an application by processes a buildpack for the app and to prepare it to run
  • Instructing a cell to start or stop an application
  • Receiving information from the Health Manager about applications
  • Subscribing to Service Gateways that advertise available services
  • Instructing Service Gateways to handle provisioning, unprovisioning, binding, and unbinding operations for services

Testing

By default rspec runs a test suite with the SQLite in-memory database. Specify a connection string using the DB_CONNECTION environment variable to test against Postgres and MySQL. For example:

    DB_CONNECTION="postgres://postgres@localhost:5432/ccng" rspec
    DB_CONNECTION="mysql2://root:password@localhost:3306/ccng" rspec

Travis currently runs three build jobs against SQLite, Postgres, and MySQL.

Was this helpful?
What can we do to improve?
View the source for this page in GitHub