1
0
Fork 0
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:
Juris Galang 2010-11-21 02:56:41 -08:00 committed by geemus
parent 2943156d3d
commit 827c029a99
25 changed files with 52 additions and 45 deletions

View file

@ -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

View file

@ -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')

View file

@ -3,6 +3,7 @@ require 'base64'
require 'cgi'
require 'excon'
require 'formatador'
require 'named-parameters'
require 'time'
__DIR__ = File.dirname(__FILE__)

View 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'

View file

@ -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'

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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]

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -3,6 +3,7 @@ module Fog
class Compute < Fog::Service
requires :linode_api_key
recognizes :port, :scheme, :persistent
model_path 'fog/linode/models/compute'

View file

@ -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'

View file

@ -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)

View file

@ -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'

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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