Vagrant CloudFoundry provides a Vagrantfile, necessary Veewee files, and the requisite cookbooks (as submodules) for booting a VirtualBox VM running a full CloudFoundry instance. Unfortunately, Virtualbox is not always the fastest, so this repository also contains a node.json and solo.rb necessary for running the CloudFoundry cookbooks against an existing machine, such as one that has been created with VMware Fusion.
To use this repository, you need Ruby installed on your local machine. This code has only been tested with Ruby 1.9.2, but it may work on 1.8.7 as well. If you're planning on running VMs locally, you'll also need Virtualbox, VMware Fusion, or Parallels.
There are two ways to use this repository. The first is to use Vagrant and Veewee to completely build a VM from scratch and install CloudFoundry on it. The second is to use knife-solo against an existing VM.
With either approach, you'll first need the required Ruby Gems:
bundle install
You'll also need to download all the required cookbooks and their dependencies using librarian:
git submodule update --init
librarian-chef install
If you make any changes to the cookbooks in cookbooks-sources, you'll
need to run librarian-chef install
again in order to pick them up.
First, use veewee to create the Virtualbox image:
cd veewee
vagrant basebox build ubuntu-10.04.2-cloud-foundry
cd -
Next, run Vagrant:
vagrant up
This will start a VM running Ubuntu 10.04, install CloudFoundry on it, and start all services. Unlike below, we do not need to forward any ports, because Vagrant will do this for us automatically.
If you update any cookbooks and want to update your vm, run
vagrant provision
For more Vagrant commands, see the Vagrant docs.
If you're not using Vagrant for your virtualization, you can use Knife Solo to provision an existing VM. First, you'll want to download the Ubuntu 10.04 iso and install it. Next, you'll bootstrap the box to be able to run chef and use knife solo to run the cookbooks against it.
knife prepare <user>@<VM IP address>
knife cook <user>@<VM IP address> nodes/all-in-one.json
In order to access your CloudFoundry Instance, you'll need to setup an ssh tunnel to forward port 80 from your VM to a local port:
sudo ssh -L 8080:<VM IP address>:80 <user>@<VM IP address> -N
To access your CloudFoundry instance, you need to register your vmc
target your vmc client at api.vcap.me:8080
. This will work because
VMware has purchased the vcap.me
domain and pointed it at 127.0.0.1
.
The port of 8080
on the end is the port that we have forwarded from
our VM.
vmc target api.vcap.me:8080
vmc register # Provide a username and password
vmc apps # You will have no apps
vmc runtimes # You'll see a list of available runtimes
vmc frameworks # You'll see a list of available frameworks
vmc services # You'll see a list of available services
For more information on the vmc client, run vmc help
.
Deploying to your CloudFoundry instance is slightly wonky, because we only support the ruby19 runtime right now. Therefore, when you push apps, you'll want to explicitly specify this runtime.
vmc push --runtime=ruby19
In addition, our hostname is slightly off on account of going through an ssh tunnel to reach our instance. Therefore, you'll need to override the default deploy url with one that does not include the port number.
vmc push --runtime=ruby19 --url <APP NAME>.vcap.me
curl http://<APP NAME>.vcap.me:8080
Author:: Trotter Cashion (cashion@gmail.com)
Copyright (c) 2012 Trotter Cashion
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.