As you may already know, Red Hat announced it’s own opensource PaaS called OpenShift this year. As many other PaaS services, like Heroku you can deploy your Rack applications easely using GIT without configuring anything. Since the Deltacloud API project I’m working on is a Sinatra application, thus Rack compatible, it would be great to offer our potential users a way how to quickly deploy Deltacloud API inside OpenShift. There are several benefits of doing that, like you don’t need to mess your system with installing Ruby libraries (which could be pretty painfull process, especially in operating systems like Windows). The other benefit is that you don’t need to waste resources in your system to run Deltacloud API (which is why this service is shamely called ‘cloud’).
Step 1. - Create OpenShift account
In order to get Deltacloud API running in OpenShift, you of surely need an OpenShift account. After you create one (it’s free!), then be sure you provide your SSH public key in Control Panel. This will make the authentication easier and you will not be asked for a password everytime.
Step 2. - Install OpenShift tooling
OpenShift use set of tools written in Ruby that make UI experience much better than messing up with pure GIT. Since they are Ruby gems, you can easely install them using gem install rhc. I’m sure they are also available as RPM package, but since I’m OSX user, using gem was my preffered choice ;-)
Step 3. - Creating a new OpenShift application
If you have tooling installed, you should get familiar with rhc-create-app command (this command is part of ‘rhc’ gem you installed in previous step). This command is used to create a new empty application inside OpenShift. There are several types of frameworks OpenShift currently support. The one, interesting for us is ‘rack-1.1’. This platform is common in Ruby world as unified interface for running web applications. Now the magic command is:
Where [email protected] is my OpenShift username and ’example1’ is the name of application I’m going to create. After you created a new application ‘rhc’ command should tell you the URL for this application and remote GIT repository, you will use for deploying your app. The URL should looks like:
Step 4. - Deploying Deltacloud API
The second information that ‘rhc’ will tells you is remote GIT repository. It should looks like:
The ‘rhc’ command will automatically clone this GIT repository into current directory. Repository name should be the same as your application name (’example1’ in this case).
Now you need to clone the Deltacloud API GIT repository:
Deltacloud API sources should be now present in ‘deltacloud’ directory.
Now we need to copy files, required to launch Deltacloud API to our
OpenShift application directory (example1
):
It’s seems like we’re already done and ready for git push
that will start this
application. But there is some additional fidling needed to get it running.
The first this is that in Deltacloud API we’re using Ruby ‘gemspec’ to hold our
dependencies. This is somehow not acceptable for OpenShift, thus we need to
provide ‘standard’ Gemfile with list of dependencies that will be installed.
The ‘Gemfile’ file inside example1
directory should looks like:
NOTE: The Rack version need to be set to ‘1.1’, otherwise the app will not be started.
The next thing we need to alter is config.ru
file. In Openshift this file
must contain Bundler.require
method that will install all required Ruby
dependencies.
The modified config.ru
should looks like:
Check the commented ENV['API_DRIVER']
section. By default Deltacloud API is
being started with the ‘mock’ driver pre-enabled. To speak with Amazon EC2
or other cloud provider by default you can alter this environment variable in
config.ru file.
Note that you can still use all Deltacloud API driver, using ‘matrix’ parameters
in URL:
OK. Now we’re ready for deploying Deltacloud API to OpenShift. First you should
lock all gem dependencies using bundle
command inside example1
directory.
Then you should add all files into GIT using:
Then run git push
and your instance of Deltacloud API should be available
on your application URL in a minute!