Sha256: c45e68ee3ff08b2d43cefec48027adf7bb8156dc2a0272f5c7e91876ee8405fc

Contents?: true

Size: 1.77 KB

Versions: 2

Compression:

Stored size: 1.77 KB

Contents

module Fog
  module StormOnDemand
    module Shared
      API_URL = 'https://api.stormondemand.com'
      API_VERSION = 'v1'

      def initialize(options = {})
        uri = URI.parse(options[:storm_on_demand_auth_url] ||= API_URL)
        @connection_options = options[:connection_options] || {}
        @host       = uri.host
        @path       = uri.path
        @persistent = options[:persistent] || false
        @port       = uri.port
        @scheme     = uri.scheme
        @storm_on_demand_username = options[:storm_on_demand_username]
        @storm_on_demand_password = options[:storm_on_demand_password]
        @connection = Fog::XML::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options)
      end

      def reload
        @connection.reset
      end

      def request(params)
        begin
          response = @connection.request(params.merge!({
            :headers  => {
              'Content-Type' => 'application/json',
              'Authorization' => 'Basic ' << Base64.encode64("#{@storm_on_demand_username}:#{@storm_on_demand_password}").chomp
            }.merge!(params[:headers] || {}),
            :path     => "#{@path}/#{API_VERSION}#{params[:path]}",
            :expects  => 200,
            :method   => :post
          }))
        rescue Excon::Errors::HTTPStatusError => error
          raise case error
          when Excon::Errors::NotFound
            Fog::StormOnDemand::Compute::NotFound.slurp(error)
          else
            error
          end
        end
        unless response.body.empty?
          response.body = Fog::JSON.decode(response.body)
        end
        if response.body.key?('error_class')
          raise(Fog::Compute::StormOnDemand::Error, response.body.inspect)
        end
        response
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
fog-storm_on_demand-0.1.0 lib/fog/storm_on_demand/shared.rb
fog-storm_on_demand-0.0.1 lib/fog/storm_on_demand/shared.rb