Skip to content

Commit

Permalink
Add S3_RGW storage driver
Browse files Browse the repository at this point in the history
Signed-off-by: Javier M. Mellid <jmunhoz@igalia.com>
  • Loading branch information
jmunhoz committed May 13, 2016
1 parent a39fe0e commit ee119bc
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 27 deletions.
92 changes: 65 additions & 27 deletions libcloud/storage/drivers/s3.py
Expand Up @@ -69,6 +69,8 @@

S3_RGW_OUTSCALE_DEFAULT_REGION = 'eu-west-2'

S3_RGW_DEFAULT_REGION = 'default'

API_VERSION = '2006-03-01'
NAMESPACE = 'http://s3.amazonaws.com/doc/%s/' % (API_VERSION)

Expand Down Expand Up @@ -1015,40 +1017,81 @@ class S3SAEastStorageDriver(S3StorageDriver):
ex_location_name = 'sa-east-1'


class S3RGWOutscaleConnectionAWS4(SignedAWSConnection, BaseS3Connection):
class S3RGWConnectionAWS4(SignedAWSConnection, BaseS3Connection):
service_name = 's3'
version = API_VERSION

def __init__(self, user_id, key, secure=True, host=None, port=None,
url=None, timeout=None, proxy_url=None, token=None,
retry_delay=None, backoff=None, **kwargs):

super(S3RGWOutscaleConnectionAWS4, self).__init__(user_id, key,
secure, host,
port, url,
timeout,
proxy_url, token,
retry_delay,
backoff,
4) # force aws4
super(S3RGWConnectionAWS4, self).__init__(user_id, key,
secure, host,
port, url,
timeout,
proxy_url, token,
retry_delay,
backoff,
4) # force aws4


class S3RGWOutscaleConnectionAWS2(S3Connection):
class S3RGWConnectionAWS2(S3Connection):

def __init__(self, user_id, key, secure=True, host=None, port=None,
url=None, timeout=None, proxy_url=None, token=None,
retry_delay=None, backoff=None, **kwargs):

super(S3RGWOutscaleConnectionAWS2, self).__init__(user_id, key,
secure, host,
port, url,
timeout,
proxy_url, token,
retry_delay,
backoff)
super(S3RGWConnectionAWS2, self).__init__(user_id, key,
secure, host,
port, url,
timeout,
proxy_url, token,
retry_delay,
backoff)


class S3RGWStorageDriver(S3StorageDriver):

def __init__(self, key, secret=None, secure=True, host=None, port=None,
api_version=None, region=S3_RGW_DEFAULT_REGION, **kwargs):
if host is None:
raise LibcloudError('host required', driver=self)
self.name = 'Ceph RGW S3 (%s)' % (region)
self.ex_location_name = region
self.region_name = region

self.signature_version = str(kwargs.pop('signature_version',
DEFAULT_SIGNATURE_VERSION))

if self.signature_version not in ['2', '4']:
raise ValueError('Invalid signature_version: %s' %
(self.signature_version))

if self.signature_version == '2':
self.connectionCls = S3RGWOutscaleConnectionAWS2
elif self.signature_version == '4':
self.connectionCls = S3RGWOutscaleConnectionAWS4
self.connectionCls.host = host
super(S3RGWStorageDriver, self).__init__(key, secret,
secure, host, port,
api_version, region,
**kwargs)

def _ex_connection_class_kwargs(self):
kwargs = {}
kwargs['signature_version'] = self.signature_version
return kwargs


class S3RGWOutscaleConnectionAWS4(S3RGWConnectionAWS4):
pass


class S3RGWOutscaleConnectionAWS2(S3RGWConnectionAWS2):
pass

class S3RGWOutscaleStorageDriver(S3StorageDriver):

class S3RGWOutscaleStorageDriver(S3RGWStorageDriver):

def __init__(self, key, secret=None, secure=True, host=None, port=None,
api_version=None, region=S3_RGW_OUTSCALE_DEFAULT_REGION,
Expand All @@ -1073,12 +1116,7 @@ def __init__(self, key, secret=None, secure=True, host=None, port=None,

host = S3_RGW_OUTSCALE_HOSTS_BY_REGION[region]
self.connectionCls.host = host
super(S3RGWOutscaleStorageDriver, self).__init__(key, secret,
secure, host, port,
api_version, region,
**kwargs)

def _ex_connection_class_kwargs(self):
kwargs = {}
kwargs['signature_version'] = self.signature_version
return kwargs
super(S3StorageDriver, self).__init__(key, secret,
secure, host, port,
api_version, region,
**kwargs)
2 changes: 2 additions & 0 deletions libcloud/storage/providers.py
Expand Up @@ -43,6 +43,8 @@
('libcloud.storage.drivers.s3', 'S3APNE2StorageDriver'),
Provider.S3_SA_EAST:
('libcloud.storage.drivers.s3', 'S3SAEastStorageDriver'),
Provider.S3_RGW:
('libcloud.storage.drivers.s3', 'S3RGWStorageDriver'),
Provider.S3_RGW_OUTSCALE:
('libcloud.storage.drivers.s3', 'S3RGWOutscaleStorageDriver'),
Provider.NINEFOLD:
Expand Down
2 changes: 2 additions & 0 deletions libcloud/storage/types.py
Expand Up @@ -49,6 +49,7 @@ class Provider(object):
:cvar S3_AP_NORTHEAST_HOST: Amazon S3 Asia South East (Tokyo)
:cvar S3_AP_SOUTHEAST_HOST: Amazon S3 Asia South East (Singapore)
:cvar S3_EU_WEST: Amazon S3 EU West (Ireland)
:cvar S3_RGW: RGW S3
:cvar S3_RGW_OUTSCALE: OUTSCALE RGW S3
:cvar S3_US_WEST: Amazon S3 US West (Northern California)
:cvar S3_US_WEST_OREGON: Amazon S3 US West 2 (Oregon)
Expand All @@ -71,6 +72,7 @@ class Provider(object):
S3_AP_NORTHEAST2 = 's3_ap_northeast_2'
S3_AP_SOUTHEAST = 's3_ap_southeast'
S3_EU_WEST = 's3_eu_west'
S3_RGW = 's3_rgw'
S3_RGW_OUTSCALE = 's3_rgw_outscale'
S3_SA_EAST = 's3_sa_east'
S3_US_WEST = 's3_us_west'
Expand Down

0 comments on commit ee119bc

Please sign in to comment.