cloudfoundry/vcap — Issue #137: Many Long-Term Suggestions
Author: yfeldblum
Created: 2011-10-25 16:38:24+00:00
State: open

Here are a number of suggestions for the CloudFoundry ecosystem.

* DEAs should deploy droplets into LXCs. No user code should run except in an LXC.

* Permit multiple named processes, with multiplicities, per application.

* Respect the Procfile if it exists; this defines the multiple named processes.
* The default process will be named "web" and will be the only process to be connected to the router.
* Other named processes will not be connected to the router.
* Add a VMC command and VCAP API for sizing and scaling processes independently.

* Permit an ignore file named .vmcignore.

* It should be parsed like .gitignore.
* VMC should respect it: VMC should upload only files not excluded by it, and VMC should delete files excluded by it from VCAP.

* Permit a build step which takes an uploaded app, builds it, and then saves the droplet.

* Only build if a Makefile exists.
* The build step should simply be `make` (i.e. with the default target).
* Support optional build caching. This is where in Build #1, the newly-built files, those files that exist post-`make` but not pre-`make`, are noted. In Build #2, the prior built droplet is downloaded and the noted files from that droplet are copied into place in the pre-build new droplet being built. This permits the default make task to `bundle install --deployment` and on the next build, the cached bundle is copied into place.
* Permit a `rebuild` VMC command and VCAP API which will build the droplet again, but without using the cache from the previous build.
* Do not gem bundle automatically; if the app wants a gem bundle, that must be in its default make target.
* Generally require apps to be responsible for their own builds via the Makefile.

* Add a process type Droplet Build Agent (DBA) so that droplet builds do not run on the same hosts as the Cloud Controllers.
* DBAs should build their droplets within LXCs. No user code should run except in an LXC.
* DBAs may actually be re-purposed DEAs if that simplifies the code.

* Permit applications to request packages.

* These packages should automatically be installed into the LXCs running the application.
* Define a standard Packagefile format for applications to note their package requirements. This format should be appropriate to be used generally, not just in CloudFoundry. So it should support versions, parameters, sources, repo public keys, etc. It should be useful with general packaging systems such as yum, not just with apt, and it should also allow an embedded shell script for building from source.
* Write a simple general open-source Packagefile reader/runner which will install the named packages in a Packagefile into the host system, respecting all the options, to propel the Packagefile as a useful standard.