Return-Path: Delivered-To: apmail-incubator-deltacloud-dev-archive@minotaur.apache.org Received: (qmail 22619 invoked from network); 9 Dec 2010 15:56:24 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 9 Dec 2010 15:56:24 -0000 Received: (qmail 34972 invoked by uid 500); 9 Dec 2010 15:56:24 -0000 Delivered-To: apmail-incubator-deltacloud-dev-archive@incubator.apache.org Received: (qmail 34891 invoked by uid 500); 9 Dec 2010 15:56:24 -0000 Mailing-List: contact deltacloud-dev-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: deltacloud-dev@incubator.apache.org Delivered-To: mailing list deltacloud-dev@incubator.apache.org Received: (qmail 34882 invoked by uid 99); 9 Dec 2010 15:56:23 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 09 Dec 2010 15:56:23 +0000 X-ASF-Spam-Status: No, hits=-5.0 required=10.0 tests=RCVD_IN_DNSWL_HI,SPF_HELO_PASS,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: domain of mfojtik@redhat.com designates 209.132.183.28 as permitted sender) Received: from [209.132.183.28] (HELO mx1.redhat.com) (209.132.183.28) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 09 Dec 2010 15:56:17 +0000 Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id oB9Ftu9d012281 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Thu, 9 Dec 2010 10:55:56 -0500 Received: from patashnik.brq.redhat.com (dhcp-2-138.brq.redhat.com [10.34.2.138]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id oB9FtrQY001146 for ; Thu, 9 Dec 2010 10:55:55 -0500 From: mfojtik@redhat.com To: deltacloud-dev@incubator.apache.org Subject: [PATCH core] Allow client to change driver/provider using HTTP headers Date: Thu, 9 Dec 2010 16:55:52 +0100 Message-Id: <1291910152-11493-2-git-send-email-mfojtik@redhat.com> In-Reply-To: <1291910152-11493-1-git-send-email-mfojtik@redhat.com> References: <1291910152-11493-1-git-send-email-mfojtik@redhat.com> X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11 From: Michal Fojtik --- client/lib/deltacloud.rb | 28 +++++++++++++++++++++++----- server/lib/sinatra/rack_driver_select.rb | 5 +---- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/client/lib/deltacloud.rb b/client/lib/deltacloud.rb index c632594..987487d 100644 --- a/client/lib/deltacloud.rb +++ b/client/lib/deltacloud.rb @@ -34,8 +34,9 @@ module DeltaCloud # @param [String, password] API password # @param [String, user_name] API URL (eg. http://localhost:3001/api) # @return [DeltaCloud::API] - def self.new(user_name, password, api_url, &block) - API.new(user_name, password, api_url, &block) + def self.new(user_name, password, api_url, opts={}, &block) + opts ||= {} + API.new(user_name, password, api_url, opts, &block) end # Check given credentials if their are valid against @@ -62,11 +63,13 @@ module DeltaCloud end class API - attr_reader :api_uri, :driver_name, :api_version, :features, :entry_points + attr_reader :api_uri, :driver_name, :api_version, :features, :entry_points + attr_reader :api_driver, :api_provider def initialize(user_name, password, api_url, opts={}, &block) opts[:version] = true - @username, @password = user_name, password + @api_driver, @api_provider = opts[:driver], opts[:provider] + @username, @password = opts[:username] || user_name, opts[:password] || password @api_uri = URI.parse(api_url) @features, @entry_points = {}, {} @verbose = opts[:verbose] || false @@ -241,6 +244,21 @@ module DeltaCloud raise NoMethodError end + def use_driver(driver, opts={}) + @api_driver = driver + @username = opts[:username] + @password = opts[:password] + @api_provider = opts[:provider] if opts[:provider] + return self + end + + def extended_headers + headers = {} + headers["X-Deltacloud-Driver"] = "#{@api_driver}" if @api_driver + headers["X-Deltacloud-Provider"] = "#{@api_provider}" if @api_provider + headers + end + # Basic request method # def request(*args, &block) @@ -264,7 +282,7 @@ module DeltaCloud end end else - RestClient.send(conf[:method], conf[:path], default_headers) do |response, request, block| + RestClient.send(conf[:method], conf[:path], default_headers.merge(extended_headers)) do |response, request, block| handle_backend_error(response) if response.code.eql?(500) if conf[:method].eql?(:get) and [301, 302, 307].include? response.code response.follow_redirection(request) do |response, request, block| diff --git a/server/lib/sinatra/rack_driver_select.rb b/server/lib/sinatra/rack_driver_select.rb index aa213d4..f00a2c8 100644 --- a/server/lib/sinatra/rack_driver_select.rb +++ b/server/lib/sinatra/rack_driver_select.rb @@ -15,10 +15,7 @@ class RackDriverSelect end def extract_driver(env) - if env['HTTP_HEADERS'] - driver_name = env['HTTP_HEADERS'].match(/X\-Deltacloud\-Driver:(\w+)/i).to_a - driver_name[1] ? driver_name[1].downcase : nil - end + driver_name = env['HTTP_X_DELTACLOUD_DRIVER'].downcase if env['HTTP_X_DELTACLOUD_DRIVER'] end end -- 1.7.3.2