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
Reference in a new issue