Happy New Year (and 0.4.0) from fog!

I’m rocking in 2011 with a bang today by pushing a big “minor” release of fog. For those not following along at home, fog is a provider agnostic cloud services library for Ruby. If you are a Rubyist using (or considering using) cloud services, look no further, we have you covered with one API for any cloud.

###Contributors, Contributors, Contributors

One of the most exciting changes has been the reaching the height of over 40 contributors, keep up the awesome work everybody! We have fixed tons of bugs, improved docs and added loads of features. So without further ado I’ll summarize the new hotness.

###New Providers and Services

First off, several new services have joined the fog family, as well as a few notable additions to the existing services:

  • AWS IAM service for access control of Amazon credentials was added
  • AWS storage (S3) gained CDN custom origin support and multipart uploads
  • AWS compute (EC2) gained support for tags and searching resources by filters
  • New DNS API with support for AWS, Linode, Slicehost and Zerigo
  • Brightbox contributed a ton of code for their new (still in beta) compute offering
  • GoGrid compute has just gotten off the ground, with plenty left to work on

###Smaller Memory Usage and Safer Credentials

As the number of services continues to grow I have been working hard to keep things nicely organized. Toward that goal we have a few additions. Now more than ever fog tries not to load parts of itself (or other gems) unless it needs them, allowing fog to use even less memory and start up faster.

To encourage the best practice of keeping your credentials safely outside your code, it is now easier to setup and use a yaml credential file. You can now use Fog::AWS::Compute.new with no arguments if you have a valid credential file supplied (default is ~/.fog). To use a different credential file just call Fog.credentials_path = 'path/to/credentials'. ###Focus on Services Another big change has been focusing on services more than providers, as mentioned above. New service level initializers simply take a :provideralong with the normal credentials, and if you have your credentials file setup all you’ll need to specify is the provider:

Fog::Compute.new(:provider => 'AWS')
Fog::DNS.new(:provider => 'AWS')
Fog::Storage.new(:provider => 'AWS')

Along with the initializers I have done a great deal of work to smooth out even more differences between the services (especially for storage and DNS). You can see the recommended interoperable way of working with dns and storage in the examples directory. These examples and many tests are now shared between providers to ensure compatibility and interoperability moving forward.

###Community Grows Up

There were a few non-code changes as well. We gained a mailing list where you can see the release notes for all the patch versions, the #ruby-fog irc channel, and we’re @fog on Twitter if you have questions. We gave out shirts, and added directions on how to score them to the README (in case you are curious). And we started on a webpage for fog, it still needs a lot of work but you can help by contributing to the gh-pages branch.


Since September Engine Yard has given me the awesome opportunity to work full time on fog. I can’t thank them enough for the whirlwind, hectic, but ultimately amazing experience. Engine Yard goes above and beyond paying the bills, helping me get to conferences and covering the awesome stickers and shirts.

Also thank you to Bluebox, Brightbox and GoGrid who all graciously donate resources so that I can run tests. For the other providers I would ask that you please consider getting in touch about donating resources so that I can keep my costs down.

Thanks again to everyone supporting and using fog, looking forward to another great year with my head in the clouds! ;)