lib/dcmgr/endpoints/errors.rb in wakame-vdc-dcmgr-10.12.0 vs lib/dcmgr/endpoints/errors.rb in wakame-vdc-dcmgr-11.06.0
- old
+ new
@@ -1,59 +1,100 @@
# -*- coding: utf-8 -*-
module Dcmgr
module Endpoints
- def self.define_error(class_name, status_code, &blk)
+ def self.define_error(class_name, status_code, error_code, &blk)
c = Class.new(APIError)
c.status_code(status_code)
+ c.error_code(error_code)
c.instance_eval(&blk) if blk
+ self.set_error_code_type(error_code, c)
self.const_set(class_name.to_sym, c)
end
+ @error_code_map = {}
+ def self.set_error_code_type(error_code, klass)
+ raise TypeError unless klass < APIError
+ if @error_code_map.has_key?(error_code)
+ if @error_code[error_code] == klass
+ else
+ raise "Duplicate Error Code Registration: #{klass}, code=#{error_code}"
+ end
+ else
+ @error_code_map[error_code]=klass
+ end
+ end
+
class APIError < StandardError
+
+ # HTTP status code of the error.
def self.status_code(code=nil)
if code
@status_code = code
end
@status_code || raise("@status_code for the class is not set")
end
+ # Internal error code of the error.
+ def self.error_code(code=nil)
+ if code
+ @error_code = code
+ end
+ @error_code || raise("@error_code for the class is not set")
+ end
+
def status_code
self.class.status_code
end
+
+ def error_code
+ self.class.error_code
+ end
end
- define_error(:UnknownUUIDResource, 404)
- define_error(:UnknownMember, 400)
- define_error(:InvalidCredentialHeaders, 400)
- define_error(:InvalidRequestCredentials, 400)
- define_error(:DisabledAccount, 403)
- define_error(:OperationNotPermitted, 403)
- define_error(:UndefinedVolumeSize, 400)
- define_error(:StoragePoolNotPermitted, 403)
- define_error(:UnknownStoragePool, 404)
- define_error(:OutOfDiskSpace, 400)
- define_error(:DatabaseError, 400)
- define_error(:UndefinedVolumeID, 400)
- define_error(:InvalidDeleteRequest, 400)
- define_error(:UnknownVolume, 404)
- define_error(:UnknownHostPool, 404)
- define_error(:UnknownInstance, 404)
- define_error(:UndefindVolumeSnapshotID, 400)
- define_error(:UnknownVolumeSnapshot, 404)
- define_error(:UndefinedRequiredParameter, 400)
- define_error(:InvalidVolumeSize, 400)
- define_error(:OutOfHostCapacity, 400)
- define_error(:UnknownSshKeyPair, 404)
- define_error(:UndefinedStoragePoolID, 400)
- define_error(:DetachVolumeFailure, 400)
- define_error(:AttachVolumeFailure, 400)
- define_error(:InvalidInstanceState, 400)
- define_error(:DuplicateHostname, 400)
+ define_error(:UnknownUUIDResource, 404, '100')
+ define_error(:UnknownMember, 400, '101')
+ define_error(:InvalidCredentialHeaders, 400, '102')
+ define_error(:InvalidRequestCredentials, 400, '103')
+ define_error(:DisabledAccount, 403, '104')
+ define_error(:OperationNotPermitted, 403, '105')
+ define_error(:UndefinedVolumeSize, 400, '106')
+ define_error(:StoragePoolNotPermitted, 403, '107')
+ define_error(:UnknownStoragePool, 404, '108')
+ define_error(:OutOfDiskSpace, 400, '109')
+ define_error(:DatabaseError, 400, '110')
+ define_error(:UndefinedVolumeID, 400, '111')
+ define_error(:InvalidDeleteRequest, 400, '112')
+ define_error(:UnknownVolume, 404, '113')
+ define_error(:UnknownHostPool, 404, '114')
+ define_error(:UnknownInstance, 404, '115')
+ define_error(:UndefindVolumeSnapshotID, 400, '116')
+ define_error(:UnknownVolumeSnapshot, 404, '117')
+ define_error(:UndefinedRequiredParameter, 400, '118')
+ define_error(:InvalidVolumeSize, 400, '119')
+ define_error(:OutOfHostCapacity, 400, '120')
+ define_error(:UnknownSshKeyPair, 404, '121')
+ define_error(:UndefinedStoragePoolID, 400, '122')
+ define_error(:DetachVolumeFailure, 400, '123')
+ define_error(:AttachVolumeFailure, 400, '124')
+ define_error(:InvalidInstanceState, 400, '125')
+ define_error(:DuplicateHostname, 400, '126')
+ define_error(:UnknownImageID, 404, '127')
+ define_error(:UnknownInstanceSpec, 404, '128')
+ define_error(:UnknownNetworkID, 404, '129')
+ define_error(:OutOfNetworkCapacity, 400, '130')
+ define_error(:InvalidVolumeSnapshotState, 400, '131')
+
# netfilter_group
- define_error(:UndefinedNetfilterGroup, 400)
- define_error(:UnknownNetfilterGroup, 400)
- define_error(:NetfilterGroupNotPermitted, 400)
- define_error(:DuplicatedNetfilterGroup, 400)
+ define_error(:UndefinedNetfilterGroup, 400, '132')
+ define_error(:UnknownNetfilterGroup, 400, '133')
+ define_error(:NetfilterGroupNotPermitted, 400, '134')
+ define_error(:DuplicatedNetfilterGroup, 400, '135')
+
+ define_error(:DuplicateSshKeyName, 400, '136')
+ define_error(:InvalidImageID, 400, '137')
+ define_error(:InvalidInstanceSpec, 400, '138')
+ define_error(:UndefinedInstanceID, 404, '139')
+ define_error(:InvalidVolumeState, 400, '140')
end
end