mirror of
				https://github.com/fog/fog.git
				synced 2022-11-09 13:51:43 -05:00 
			
		
		
		
	This is a combination of 23 commits (included merges from upstream); this commit(s) include changes to enforces recognizes/requires parameters for all supported services. Comments from the included commits follow:
- Added google_storage_* keys - Fixed indentations. - Factored out requires and recognizes method implementation (now relies on the requires and recognizes clause from the NamedParameters module) - Added dependency to named-parameters gem. - Added recognizes declaration to classes for all supported services to enforce parameter name checks - - passing an unrecognized key when instantiating a service object will now cause an ArgumentError to be raised. - Added NOTE - comment added - check/filter-out keys from credentials that are not required by the class being instantiated - [local|storage] properly write out file contents - Added google_storage_* keys - Fixed indentations. - added put_object_acl request (ref: https://github.com/geemus/fog/issues#issue/74) - Release 0.3.24 - remove tracker reference from README - issues is now the goto for bugs/todo - notify and gracefully skip credential-less testsa - [rackspace|storage] fixes for directory/files - [local|storage] CGI.escape file names - Release 0.3.25 - updated deps; recognized_parameters -> declared_parameters; restored options filtering if Fog.bin - Added requires/recognizes to Fog::Terremark::Ecloud - Updted to use latest named-parameters gem. - Filter out unwanted parameters when Fog.bin - Updated to latest named-parameters gem - commented out unnecessary code - fix missing "volume" parameter error when setting Fog::AWS::Volume#server to nil (in order to detach it) - documentation update for key_pairs and helper - [aws|compute] commented/documented flavors/volumes - Fixes for issue 38 and 39 Closes #96
This commit is contained in:
		
							parent
							
								
									2943156d3d
								
							
						
					
					
						commit
						827c029a99
					
				
					 25 changed files with 52 additions and 45 deletions
				
			
		| 
						 | 
				
			
			@ -7,6 +7,7 @@ PATH
 | 
			
		|||
      formatador (>= 0.0.16)
 | 
			
		||||
      json
 | 
			
		||||
      mime-types
 | 
			
		||||
      named-parameters (>= 0.0.14)
 | 
			
		||||
      net-ssh (>= 2.0.23)
 | 
			
		||||
      nokogiri (>= 1.4.4)
 | 
			
		||||
      ruby-hmac
 | 
			
		||||
| 
						 | 
				
			
			@ -21,6 +22,7 @@ GEM
 | 
			
		|||
      formatador (>= 0.0.12)
 | 
			
		||||
    json (1.4.6)
 | 
			
		||||
    mime-types (1.16)
 | 
			
		||||
    named-parameters (0.0.14)
 | 
			
		||||
    net-ssh (2.0.23)
 | 
			
		||||
    nokogiri (1.4.4)
 | 
			
		||||
    rake (0.8.7)
 | 
			
		||||
| 
						 | 
				
			
			@ -40,6 +42,7 @@ DEPENDENCIES
 | 
			
		|||
  formatador (>= 0.0.16)
 | 
			
		||||
  json
 | 
			
		||||
  mime-types
 | 
			
		||||
  named-parameters (>= 0.0.14)
 | 
			
		||||
  net-ssh (>= 2.0.23)
 | 
			
		||||
  nokogiri (>= 1.4.4)
 | 
			
		||||
  rake
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,6 +47,7 @@ Gem::Specification.new do |s|
 | 
			
		|||
  s.add_dependency('formatador', '>=0.0.16')
 | 
			
		||||
  s.add_dependency('json')
 | 
			
		||||
  s.add_dependency('mime-types')
 | 
			
		||||
  s.add_dependency('named-parameters', '>=0.0.14')
 | 
			
		||||
  s.add_dependency('net-ssh', '>=2.0.23')
 | 
			
		||||
  s.add_dependency('nokogiri', '>=1.4.4')
 | 
			
		||||
  s.add_dependency('ruby-hmac')
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,6 +3,7 @@ require 'base64'
 | 
			
		|||
require 'cgi'
 | 
			
		||||
require 'excon'
 | 
			
		||||
require 'formatador'
 | 
			
		||||
require 'named-parameters'
 | 
			
		||||
require 'time'
 | 
			
		||||
 | 
			
		||||
__DIR__ = File.dirname(__FILE__)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,6 +3,7 @@ module Fog
 | 
			
		|||
    class CDN < Fog::Service
 | 
			
		||||
 | 
			
		||||
      requires :aws_access_key_id, :aws_secret_access_key
 | 
			
		||||
      recognizes :host, :path, :port, :scheme, :version, :persistent
 | 
			
		||||
 | 
			
		||||
      model_path 'fog/aws/models/cdn'
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,7 @@ module Fog
 | 
			
		|||
  module AWS
 | 
			
		||||
    class Compute < Fog::Service
 | 
			
		||||
 | 
			
		||||
      requires   :aws_access_key_id, :aws_secret_access_key
 | 
			
		||||
      requires :aws_access_key_id, :aws_secret_access_key
 | 
			
		||||
      recognizes :endpoint, :region, :host, :path, :port, :scheme, :persistent
 | 
			
		||||
 | 
			
		||||
      model_path 'fog/aws/models/compute'
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,6 +3,7 @@ module Fog
 | 
			
		|||
    class ELB < Fog::Service
 | 
			
		||||
 | 
			
		||||
      requires :aws_access_key_id, :aws_secret_access_key
 | 
			
		||||
      recognizes :region, :host, :path, :port, :scheme, :persistent
 | 
			
		||||
 | 
			
		||||
      request_path 'fog/aws/requests/elb'
 | 
			
		||||
      request :create_load_balancer
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,6 +3,7 @@ module Fog
 | 
			
		|||
    class IAM < Fog::Service
 | 
			
		||||
 | 
			
		||||
      requires :aws_access_key_id, :aws_secret_access_key
 | 
			
		||||
      recognizes :host, :path, :port, :scheme, :persistent
 | 
			
		||||
 | 
			
		||||
      request_path 'fog/aws/requests/iam'
 | 
			
		||||
      request :add_user_to_group
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,7 +3,8 @@ module Fog
 | 
			
		|||
    class SimpleDB < Fog::Service
 | 
			
		||||
 | 
			
		||||
      requires :aws_access_key_id, :aws_secret_access_key
 | 
			
		||||
 | 
			
		||||
      recognizes :host, :nil_string, :path, :port, :scheme, :persistent
 | 
			
		||||
      
 | 
			
		||||
      request_path 'fog/aws/requests/simpledb'
 | 
			
		||||
      request :batch_put_attributes
 | 
			
		||||
      request :create_domain
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,7 +3,8 @@ module Fog
 | 
			
		|||
    class Storage < Fog::Service
 | 
			
		||||
 | 
			
		||||
      requires :aws_access_key_id, :aws_secret_access_key
 | 
			
		||||
 | 
			
		||||
      recognizes :endpoint, :region, :host, :path, :port, :scheme, :persistent
 | 
			
		||||
      
 | 
			
		||||
      model_path 'fog/aws/models/storage'
 | 
			
		||||
      collection  :directories
 | 
			
		||||
      model       :directory
 | 
			
		||||
| 
						 | 
				
			
			@ -175,6 +176,7 @@ module Fog
 | 
			
		|||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      
 | 
			
		||||
      class Real
 | 
			
		||||
        include Utils
 | 
			
		||||
        extend Fog::Deprecation
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,6 +3,7 @@ module Fog
 | 
			
		|||
    class Compute < Fog::Service
 | 
			
		||||
 | 
			
		||||
      requires :bluebox_api_key, :bluebox_customer_id
 | 
			
		||||
      recognizes :bluebox_host, :bluebox_port, :bluebox_scheme, :persistent
 | 
			
		||||
 | 
			
		||||
      model_path 'fog/bluebox/models/compute'
 | 
			
		||||
      model       :flavor
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,6 +5,7 @@ module Fog
 | 
			
		|||
      API_URL = "https://api.gb1.brightbox.com/"
 | 
			
		||||
 | 
			
		||||
      requires :brightbox_client_id, :brightbox_secret
 | 
			
		||||
      recognizes :brightbox_auth_url, :brightbox_api_url
 | 
			
		||||
 | 
			
		||||
      model_path 'fog/brightbox/models/compute'
 | 
			
		||||
      model :account # Singular resource, no collection
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -148,6 +148,7 @@ module Fog
 | 
			
		|||
        !identity
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      # check that the attributes specified in args exist and is not nil
 | 
			
		||||
      def requires(*args)
 | 
			
		||||
        missing = []
 | 
			
		||||
        for arg in [:connection] | args
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,7 +28,6 @@ module Fog
 | 
			
		|||
        unless credentials && credentials[credential]
 | 
			
		||||
          print("\n  To run as '#{credential}', add the following to #{config_path}\n")
 | 
			
		||||
          yml = <<-YML
 | 
			
		||||
 | 
			
		||||
:#{credential}:
 | 
			
		||||
  :aws_access_key_id:                INTENTIONALLY_LEFT_BLANK
 | 
			
		||||
  :aws_secret_access_key:            INTENTIONALLY_LEFT_BLANK
 | 
			
		||||
| 
						 | 
				
			
			@ -51,7 +50,7 @@ module Fog
 | 
			
		|||
  :terremark_username:               INTENTIONALLY_LEFT_BLANK
 | 
			
		||||
  :terremark_password:               INTENTIONALLY_LEFT_BLANK
 | 
			
		||||
YML
 | 
			
		||||
          print(yml)
 | 
			
		||||
          print("\n#{yml}\n")
 | 
			
		||||
          raise(ArgumentError.new("Missing Credentials"))
 | 
			
		||||
        end
 | 
			
		||||
        credentials[credential]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -34,13 +34,16 @@ module Fog
 | 
			
		|||
        EOS
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def requirements
 | 
			
		||||
        declared_parameters_for :new, :required
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def new(options={})
 | 
			
		||||
        if Fog.bin
 | 
			
		||||
          default_credentials = Fog.credentials.reject {|key, value| !requirements.include?(key)}
 | 
			
		||||
          default_credentials = filter_parameters(Fog.credentials)
 | 
			
		||||
          options = default_credentials.merge(options)
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        validate_arguments(options)
 | 
			
		||||
        setup_requirements
 | 
			
		||||
 | 
			
		||||
        if Fog.mocking?
 | 
			
		||||
| 
						 | 
				
			
			@ -110,41 +113,10 @@ module Fog
 | 
			
		|||
        @requests ||= []
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def requires(*args)
 | 
			
		||||
        requirements.concat(args)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def requirements
 | 
			
		||||
        @requirements ||= []
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def recognizes(*args)
 | 
			
		||||
        recognized.concat(args)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def recognized
 | 
			
		||||
        @recognized ||= []
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def reset_data(keys=Mock.data.keys)
 | 
			
		||||
        Mock.reset_data(keys)
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      def validate_arguments(options)
 | 
			
		||||
        missing = requirements - options.keys
 | 
			
		||||
        unless missing.empty?
 | 
			
		||||
          raise ArgumentError, "Missing required arguments: #{missing.join(', ')}"
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        # FIXME: avoid failing for the services that don't have recognizes yet
 | 
			
		||||
        unless recognizes.empty?
 | 
			
		||||
          unrecognized = options.keys - requirements - recognized
 | 
			
		||||
          unless unrecognized.empty?
 | 
			
		||||
            raise ArgumentError, "Unrecognized arguments: #{unrecognized.join(', ')}"
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
  end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,8 +2,8 @@ module Fog
 | 
			
		|||
  module GoGrid
 | 
			
		||||
    class Compute < Fog::Service
 | 
			
		||||
 | 
			
		||||
      requires :go_grid_api_key
 | 
			
		||||
      requires :go_grid_shared_secret
 | 
			
		||||
      requires :go_grid_api_key, :go_grid_shared_secret
 | 
			
		||||
      recognizes :host, :path, :port, :scheme, :persistent
 | 
			
		||||
 | 
			
		||||
      model_path 'fog/go_grid/models/compute'
 | 
			
		||||
      model         :image
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,6 +3,7 @@ module Fog
 | 
			
		|||
    class Storage < Fog::Service
 | 
			
		||||
 | 
			
		||||
      requires :google_storage_access_key_id, :google_storage_secret_access_key
 | 
			
		||||
      recognizes :host, :port, :scheme, :persistent
 | 
			
		||||
 | 
			
		||||
      model_path 'fog/google/models/storage'
 | 
			
		||||
      collection  :directories
 | 
			
		||||
| 
						 | 
				
			
			@ -135,6 +136,7 @@ module Fog
 | 
			
		|||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
      class Real
 | 
			
		||||
        include Utils
 | 
			
		||||
        extend Fog::Deprecation
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,6 +3,7 @@ module Fog
 | 
			
		|||
    class Compute < Fog::Service
 | 
			
		||||
 | 
			
		||||
      requires :linode_api_key
 | 
			
		||||
      recognizes :port, :scheme, :persistent
 | 
			
		||||
 | 
			
		||||
      model_path 'fog/linode/models/compute'
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,8 +4,8 @@ module Fog
 | 
			
		|||
  module NewServers
 | 
			
		||||
    class Compute < Fog::Service
 | 
			
		||||
 | 
			
		||||
      requires :new_servers_password
 | 
			
		||||
      requires :new_servers_username
 | 
			
		||||
      requires :new_servers_password, :new_servers_username
 | 
			
		||||
      recognizes :host, :port, :scheme, :persistent
 | 
			
		||||
 | 
			
		||||
      model_path 'fog/new_servers/models/compute'
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,7 @@
 | 
			
		|||
module Fog
 | 
			
		||||
  module Rackspace
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    include NamedParameters
 | 
			
		||||
    extend Fog::Provider
 | 
			
		||||
 | 
			
		||||
    service_path 'fog/rackspace'
 | 
			
		||||
| 
						 | 
				
			
			@ -10,6 +11,11 @@ module Fog
 | 
			
		|||
    service 'servers'
 | 
			
		||||
    service 'storage'
 | 
			
		||||
 | 
			
		||||
    # NOTE: might be better to rely on the caller alone to enforce parameter 
 | 
			
		||||
    # requirements...
 | 
			
		||||
    has_named_parameters :'self.authenticate', 
 | 
			
		||||
      :required => [ :rackspace_api_key, :rackspace_username ],
 | 
			
		||||
      :optional => [ :rackspace_auth_url ]
 | 
			
		||||
    def self.authenticate(options)
 | 
			
		||||
      rackspace_auth_url = options[:rackspace_auth_url] || "auth.api.rackspacecloud.com"
 | 
			
		||||
      connection = Fog::Connection.new("https://" + rackspace_auth_url)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,6 +3,9 @@ module Fog
 | 
			
		|||
    class CDN < Fog::Service
 | 
			
		||||
 | 
			
		||||
      requires :rackspace_api_key, :rackspace_username
 | 
			
		||||
      # NOTE: recognizes clause delegates to Fog::Rackspace.authenticate's so 
 | 
			
		||||
      #       we also declare those parameters that the authenticate expects...
 | 
			
		||||
      recognizes :rackspace_auth_url, :persistent
 | 
			
		||||
 | 
			
		||||
      model_path 'fog/rackspace/models/cdn'
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,6 +3,9 @@ module Fog
 | 
			
		|||
    class Compute < Fog::Service
 | 
			
		||||
 | 
			
		||||
      requires :rackspace_api_key, :rackspace_username
 | 
			
		||||
      # NOTE: recognizes clause delegates to Fog::Rackspace.authenticate's so 
 | 
			
		||||
      #       we also declare those parameters that the authenticate expects...
 | 
			
		||||
      recognizes :rackspace_auth_url, :persistent
 | 
			
		||||
 | 
			
		||||
      model_path 'fog/rackspace/models/compute'
 | 
			
		||||
      model       :flavor
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,6 +3,9 @@ module Fog
 | 
			
		|||
    class Storage < Fog::Service
 | 
			
		||||
 | 
			
		||||
      requires :rackspace_api_key, :rackspace_username
 | 
			
		||||
      # NOTE: recognizes clause delegates to Fog::Rackspace.authenticate's so 
 | 
			
		||||
      #       we also declare those parameters that the authenticate expects...
 | 
			
		||||
      recognizes :rackspace_auth_url, :persistent
 | 
			
		||||
 | 
			
		||||
      model_path 'fog/rackspace/models/storage'
 | 
			
		||||
      model       :directory
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,6 +3,7 @@ module Fog
 | 
			
		|||
    class Compute < Fog::Service
 | 
			
		||||
 | 
			
		||||
      requires :slicehost_password
 | 
			
		||||
      recognizes :host, :port, :scheme, :persistent
 | 
			
		||||
 | 
			
		||||
      model_path 'fog/slicehost/models/compute'
 | 
			
		||||
      model       :flavor
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,7 +32,9 @@ module Fog
 | 
			
		|||
      end
 | 
			
		||||
 | 
			
		||||
      class Real
 | 
			
		||||
 | 
			
		||||
        requires :terremark_ecloud_password, :terremark_ecloud_username
 | 
			
		||||
        recognizes :host, :path, :port, :scheme, :persistent
 | 
			
		||||
        
 | 
			
		||||
        include Fog::Terremark::Shared::Real
 | 
			
		||||
        include Fog::Terremark::Shared::Parser
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,7 +19,8 @@ end
 | 
			
		|||
module Fog
 | 
			
		||||
  class Vcloud < Fog::Service
 | 
			
		||||
 | 
			
		||||
    requires :username, :password, :versions_uri
 | 
			
		||||
    requires :username, :password, :module, :versions_uri
 | 
			
		||||
    recognizes :version, :persistent
 | 
			
		||||
 | 
			
		||||
    model_path 'fog/vcloud/models'
 | 
			
		||||
    model :vdc
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue