1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00

Merge pull request #1935 from jbence/feature/update_AWS_error_handling

[aws] Update aws error handling
This commit is contained in:
Wesley Beary 2013-07-03 10:07:29 -07:00
commit 9cdc2bce09
10 changed files with 126 additions and 138 deletions

View file

@ -301,5 +301,16 @@ module Fog
end
options
end
module Errors
def self.match_error(error)
matcher = lambda {|s| s.match(/(?:.*<Code>(.*)<\/Code>)(?:.*<Message>(.*)<\/Message>)/m)}
[error.message, error.response.body].each(&Proc.new {|s|
match = matcher.call(s)
return {:code => match[1].split('.').last, :message => match[2]} if match
})
{} # we did not match the message or response body
end
end
end
end

View file

@ -143,7 +143,7 @@ module Fog
def _request(body, idempotent, parser)
begin
response = @connection.request({
@connection.request({
:body => body,
:expects => 200,
:idempotent => idempotent,
@ -153,24 +153,19 @@ module Fog
:parser => parser
})
rescue Excon::Errors::HTTPStatusError => error
if match = error.message.match(/(?:.*<Code>(.*)<\/Code>)(?:.*<Message>(.*)<\/Message>)/m)
case match[1]
when 'AlreadyExists'
#raise Fog::AWS::AutoScaling::IdentifierTaken.new(match[2])
raise Fog::AWS::AutoScaling::IdentifierTaken.slurp(error, match[2])
when 'ResourceInUse'
raise Fog::AWS::AutoScaling::ResourceInUse.slurp(error, match[2])
when 'ValidationError'
raise Fog::AWS::AutoScaling::ValidationError.slurp(error, match[2])
else
raise Fog::Compute::AWS::Error.slurp(error, "#{match[1]} => #{match[2]}")
end
else
raise
end
match = Fog::AWS::Errors.match_error(error)
raise if match.empty?
raise case match[:code]
when 'AlreadyExists'
Fog::AWS::AutoScaling::IdentifierTaken.slurp(error, match[:message])
when 'ResourceInUse'
Fog::AWS::AutoScaling::ResourceInUse.slurp(error, match[:message])
when 'ValidationError'
Fog::AWS::AutoScaling::ValidationError.slurp(error, match[:message])
else
Fog::AWS::AutoScaling::Error.slurp(error, "#{match[:code]} => #{match[:message]}")
end
end
response
end
def setup_credentials(options)

View file

@ -131,16 +131,14 @@ module Fog
:parser => parser
})
rescue Excon::Errors::HTTPStatusError => error
if match = error.message.match(/(?:.*<Code>(.*)<\/Code>)(?:.*<Message>(.*)<\/Message>)/m)
raise case match[1].split('.').last
when 'InvalidParameterValue'
Fog::AWS::ElasticBeanstalk::InvalidParameterError.slurp(error, match[2])
else
Fog::AWS::ElasticBeanstalk::Error.slurp(error, "#{match[1]} => #{match[2]}")
end
else
raise error
end
match = Fog::AWS::Errors.match_error(error)
raise if match.empty?
raise case match[:code]
when 'InvalidParameterValue'
Fog::AWS::ElasticBeanstalk::InvalidParameterError.slurp(error, match[:message])
else
Fog::AWS::ElasticBeanstalk::Error.slurp(error, "#{match[:code]} => #{match[:message]}")
end
end
end

View file

@ -98,7 +98,7 @@ module Fog
)
begin
response = @connection.request({
@connection.request({
:body => body,
:expects => 200,
:idempotent => idempotent,
@ -108,19 +108,16 @@ module Fog
:parser => parser
})
rescue Excon::Errors::HTTPStatusError => error
if match = error.message.match(/(?:.*<Code>(.*)<\/Code>)(?:.*<Message>(.*)<\/Message>)/m)
raise case match[1].split('.').last
when 'NotFound', 'ValidationError'
Fog::AWS::CloudFormation::NotFound.slurp(error, match[2])
else
Fog::AWS::CloudFormation::Error.slurp(error, "#{match[1]} => #{match[2]}")
end
else
raise error
end
match = Fog::AWS::Errors.match_error(error)
raise if match.empty?
raise case match[:code]
when 'NotFound', 'ValidationError'
Fog::AWS::CloudFormation::NotFound.slurp(error, match[:message])
else
Fog::AWS::CloudFormation::Error.slurp(error, "#{match[:code]} => #{match[:message]}")
end
end
response
end
end

View file

@ -392,16 +392,14 @@ module Fog
:parser => parser
})
rescue Excon::Errors::HTTPStatusError => error
if match = error.message.match(/(?:.*<Code>(.*)<\/Code>)(?:.*<Message>(.*)<\/Message>)/m)
raise case match[1].split('.').last
when 'NotFound', 'Unknown'
Fog::Compute::AWS::NotFound.slurp(error, match[2])
else
Fog::Compute::AWS::Error.slurp(error, "#{match[1]} => #{match[2]}")
end
else
raise error
end
match = Fog::AWS::Errors.match_error(error)
raise if match.empty?
raise case match[:code]
when 'NotFound', 'Unknown'
Fog::Compute::AWS::NotFound.slurp(error, match[:message])
else
Fog::Compute::AWS::Error.slurp(error, "#{match[:code]} => #{match[:message]}")
end
end
end

View file

@ -94,7 +94,7 @@ module Fog
)
begin
response = @connection.request({
@connection.request({
:body => body,
:expects => 200,
:headers => { 'Content-Type' => 'application/x-www-form-urlencoded' },
@ -104,24 +104,20 @@ module Fog
:parser => parser
})
rescue Excon::Errors::HTTPStatusError => error
if match = error.message.match(/(?:.*<Code>(.*)<\/Code>?)/m)
case match[1]
when 'CacheSecurityGroupNotFound', 'CacheParameterGroupNotFound',
'CacheClusterNotFound'
raise Fog::AWS::Elasticache::NotFound
when 'CacheSecurityGroupAlreadyExists'
raise Fog::AWS::Elasticache::IdentifierTaken
when 'InvalidParameterValue'
raise Fog::AWS::Elasticache::InvalidInstance
else
raise
end
else
raise
end
match = Fog::AWS::Errors.match_error(error)
raise if match.empty?
raise case match[:code]
when 'CacheSecurityGroupNotFound', 'CacheParameterGroupNotFound', 'CacheClusterNotFound'
Fog::AWS::Elasticache::NotFound.slurp(error, match[:message])
when 'CacheSecurityGroupAlreadyExists'
Fog::AWS::Elasticache::IdentifierTaken.slurp(error, match[:message])
when 'InvalidParameterValue'
Fog::AWS::Elasticache::InvalidInstance.slurp(error, match[:message])
else
Fog::AWS::Elasticache::Error.slurp(error, "#{match[:code]} => #{match[:message]}")
end
end
response
end
end

View file

@ -191,37 +191,35 @@ module Fog
:parser => parser
})
rescue Excon::Errors::HTTPStatusError => error
if match = error.message.match(/(?:.*<Code>(.*)<\/Code>)(?:.*<Message>(.*)<\/Message>)/m)
case match[1]
when 'CertificateNotFound'
raise Fog::AWS::IAM::NotFound.slurp(error, match[2])
when 'DuplicateLoadBalancerName'
raise Fog::AWS::ELB::IdentifierTaken.slurp(error, match[2])
when 'DuplicatePolicyName'
raise Fog::AWS::ELB::DuplicatePolicyName.slurp(error, match[2])
when 'InvalidInstance'
raise Fog::AWS::ELB::InvalidInstance.slurp(error, match[2])
when 'InvalidConfigurationRequest'
# when do they fucking use this shit?
raise Fog::AWS::ELB::InvalidConfigurationRequest.slurp(error, match[2])
when 'LoadBalancerNotFound'
raise Fog::AWS::ELB::NotFound.slurp(error, match[2])
when 'PolicyNotFound'
raise Fog::AWS::ELB::PolicyNotFound.slurp(error, match[2])
when 'PolicyTypeNotFound'
raise Fog::AWS::ELB::PolicyTypeNotFound.slurp(error, match[2])
when 'Throttling'
raise Fog::AWS::ELB::Throttled.slurp(error, match[2])
when 'TooManyPolicies'
raise Fog::AWS::ELB::TooManyPolicies.slurp(error, match[2])
when 'ValidationError'
raise Fog::AWS::ELB::ValidationError.slurp(error, match[2])
else
raise
end
else
raise
end
match = Fog::AWS::Errors.match_error(error)
raise if match.empty?
raise case match[:code]
when 'CertificateNotFound'
Fog::AWS::IAM::NotFound.slurp(error, match[:message])
when 'DuplicateLoadBalancerName'
Fog::AWS::ELB::IdentifierTaken.slurp(error, match[:message])
when 'DuplicatePolicyName'
Fog::AWS::ELB::DuplicatePolicyName.slurp(error, match[:message])
when 'InvalidInstance'
Fog::AWS::ELB::InvalidInstance.slurp(error, match[:message])
when 'InvalidConfigurationRequest'
# when do they fucking use this shit?
Fog::AWS::ELB::InvalidConfigurationRequest.slurp(error, match[:message])
when 'LoadBalancerNotFound'
Fog::AWS::ELB::NotFound.slurp(error, match[:message])
when 'PolicyNotFound'
Fog::AWS::ELB::PolicyNotFound.slurp(error, match[:message])
when 'PolicyTypeNotFound'
Fog::AWS::ELB::PolicyTypeNotFound.slurp(error, match[:message])
when 'Throttling'
Fog::AWS::ELB::Throttled.slurp(error, match[:message])
when 'TooManyPolicies'
Fog::AWS::ELB::TooManyPolicies.slurp(error, match[:message])
when 'ValidationError'
Fog::AWS::ELB::ValidationError.slurp(error, match[:message])
else
Fog::AWS::ELB::Error.slurp(error, "#{match[:code]} => #{match[:message]}")
end
end
end
end

View file

@ -208,19 +208,16 @@ module Fog
:parser => parser
})
rescue Excon::Errors::HTTPStatusError => error
if match = error.message.match(/(?:.*<Code>(.*)<\/Code>)(?:.*<Message>(.*)<\/Message>)/m)
case match[1]
when 'CertificateNotFound', 'NoSuchEntity'
raise Fog::AWS::IAM::NotFound.slurp(error, match[2])
when 'EntityAlreadyExists', 'KeyPairMismatch', 'LimitExceeded', 'MalformedCertificate', 'ValidationError'
raise Fog::AWS::IAM.const_get(match[1]).slurp(error, match[2])
else
raise Fog::AWS::IAM::Error.slurp(error, "#{match[1]} => #{match[2]}") if match[1]
raise
end
else
raise
end
match = Fog::AWS::Errors.match_error(error)
raise if match.empty?
raise case match[:code]
when 'CertificateNotFound', 'NoSuchEntity'
Fog::AWS::IAM::NotFound.slurp(error, match[:message])
when 'EntityAlreadyExists', 'KeyPairMismatch', 'LimitExceeded', 'MalformedCertificate', 'ValidationError'
Fog::AWS::IAM.const_get(match[:code]).slurp(error, match[:message])
else
Fog::AWS::IAM::Error.slurp(error, "#{match[:code]} => #{match[:message]}")
end
end
end

View file

@ -197,7 +197,7 @@ module Fog
)
begin
response = @connection.request({
@connection.request({
:body => body,
:expects => 200,
:headers => { 'Content-Type' => 'application/x-www-form-urlencoded' },
@ -207,23 +207,27 @@ module Fog
:parser => parser
})
rescue Excon::Errors::HTTPStatusError => error
if match = error.response.body.match(/(?:.*<Code>(.*)<\/Code>)(?:.*<Message>(.*)<\/Message>)/m)
case match[1].split('.').last
when 'DBInstanceNotFound', 'DBParameterGroupNotFound', 'DBSnapshotNotFound', 'DBSecurityGroupNotFound'
raise Fog::AWS::RDS::NotFound.slurp(error, match[2])
when 'DBParameterGroupAlreadyExists'
raise Fog::AWS::RDS::IdentifierTaken.slurp(error, match[2])
when 'AuthorizationAlreadyExists'
raise Fog::AWS::RDS::AuthorizationAlreadyExists.slurp(error, match[2])
match = Fog::AWS::Errors.match_error(error)
if match.empty?
case error.message
when 'Not Found'
raise Fog::AWS::RDS::NotFound.slurp(error, 'RDS Instance not found')
else
raise
end
else
raise
raise case match[:code]
when 'DBInstanceNotFound', 'DBParameterGroupNotFound', 'DBSnapshotNotFound', 'DBSecurityGroupNotFound'
Fog::AWS::RDS::NotFound.slurp(error, match[:message])
when 'DBParameterGroupAlreadyExists'
Fog::AWS::RDS::IdentifierTaken.slurp(error, match[:message])
when 'AuthorizationAlreadyExists'
Fog::AWS::RDS::AuthorizationAlreadyExists.slurp(error, match[:message])
else
Fog::AWS::RDS::Error.slurp(error, "#{match[:code]} => #{match[:message]}")
end
end
end
response
end
end

View file

@ -102,7 +102,7 @@ module Fog
)
begin
response = @connection.request({
@connection.request({
:body => body,
:expects => 200,
:idempotent => idempotent,
@ -111,23 +111,17 @@ module Fog
:method => 'POST',
:parser => parser
})
response
rescue Excon::Errors::HTTPStatusError => error
if match = error.message.match(/(?:.*<Code>(.*)<\/Code>)(?:.*<Message>(.*)<\/Message>)/m)
case match[1]
when 'EntityAlreadyExists', 'KeyPairMismatch', 'LimitExceeded', 'MalformedCertificate', 'ValidationError'
raise Fog::AWS::STS.const_get(match[1]).slurp(error, match[2])
else
raise Fog::AWS::STS::Error.slurp(error, "#{match[1]} => #{match[2]}") if match[1]
raise
end
else
raise
end
match = Fog::AWS::Errors.match_error(error)
raise if match.empty?
raise case match[:code]
when 'EntityAlreadyExists', 'KeyPairMismatch', 'LimitExceeded', 'MalformedCertificate', 'ValidationError'
Fog::AWS::STS.const_get(match[:code]).slurp(error, match[:message])
else
Fog::AWS::STS::Error.slurp(error, "#{match[:code]} => #{match[:message]}")
end
end
end
end