| # |
| # Licensed to the Apache Software Foundation (ASF) under one or more |
| # contributor license agreements. See the NOTICE file distributed with |
| # this work for additional information regarding copyright ownership. The |
| # ASF licenses this file to you 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. |
| |
| # The default URL prefix (where to mount Deltacloud API) |
| |
| # The default driver is 'mock' |
| ENV['API_DRIVER'] ||= 'mock' |
| ENV['API_FRONTEND'] ||= 'deltacloud' |
| |
| load File.join(File.dirname(__FILE__), 'lib', 'deltacloud_rack.rb') |
| |
| Deltacloud::configure do |server| |
| server.root_url '/api' |
| server.version Deltacloud::API_VERSION |
| server.klass 'Deltacloud::API' |
| end |
| |
| Deltacloud::configure(:cimi) do |server| |
| server.root_url '/cimi' |
| server.version Deltacloud::CIMI_API_VERSION |
| server.klass 'CIMI::API' |
| end |
| |
| Deltacloud::configure(:ec2) do |server| |
| server.root_url '/ec2' |
| server.version '2012-04-01' |
| server.klass 'Deltacloud::EC2::API' |
| end |
| |
| routes = {} |
| |
| def frontends |
| ENV['API_FRONTEND'].split(',').size > 1 ? |
| ENV['API_FRONTEND'].split(',') : [ENV['API_FRONTEND']] |
| end |
| |
| # If user wants to launch multiple frontends withing a single instance of DC API |
| # then require them and prepare the routes for Rack |
| # |
| # NOTE: The '/' will not be generated, since multiple frontends could have |
| # different root_url's |
| # |
| frontends.each do |frontend| |
| frontend = frontend.strip |
| if Deltacloud[frontend.to_sym].nil? |
| puts "ERROR: Unknown frontend (#{frontend}). Valid values are 'deltacloud,cimi,ec2'" |
| exit(1) |
| end |
| Deltacloud[frontend.to_sym].require! |
| routes.merge!({ |
| Deltacloud[frontend].root_url => Deltacloud[frontend].klass |
| }) |
| end |
| |
| def static_dir_for(name) |
| Rack::Directory.new( File.join(File.dirname(__FILE__), "public", name)) |
| end |
| |
| # Mount static assets directories and index entrypoint |
| # |
| routes.merge!({ |
| '/' => Deltacloud::IndexApp, |
| '/stylesheets' => static_dir_for('stylesheets'), |
| '/javascripts' => static_dir_for('javascripts'), |
| '/images' => static_dir_for('images') |
| }) |
| |
| run Rack::Builder.new { |
| use Rack::MatrixParams |
| run Rack::URLMap.new(routes) |
| } |