class Swift(object): def __init__(self, bucket, noop): """Setup the S3 storage backend with the bucket we will use and optional region.""" # This is our Swift container self.bucket = bucket self.noop = noop # We assume your environment variables are set correctly just like # you would for the swift command line util try: self.conn = Connection(authurl=os.environ["ST_AUTH"], user=os.environ["ST_USER"], key=os.environ["ST_KEY"], timeout=30) except KeyError: logger.warning( "Missing environment variables for Swift authentication") logger.warning("Bailing...") sys.exit(1) headers, objs = self.conn.get_account(self.bucket) for i in objs: logger.debug("Searching for bucket %s == %s" % (self.bucket, i)) if not noop and self.bucket not in objs: self.conn.put_container(self.bucket) def list(self, prefix=None): """Return all keys in this bucket.""" headers, objs = self.conn.get_container(self.bucket, prefix=prefix) while objs: # Handle paging i = {} for i in objs: yield i["name"] headers, objs = self.conn.get_container(self.bucket, marker=i["name"], prefix=prefix) def get(self, src): """Return the contents of src from S3 as a string.""" try: headers, obj = self.conn.get_object(self.bucket, src) return obj except ClientException: # Request failed....object doesn't exist return None def put(self, dst, data): """Store the contents of the string data at a key named by dst in S3.""" if self.noop: logger.info("No-Op Put: %s" % dst) else: self.conn.put_object(self.bucket, dst, data) def delete(self, src): """Delete the object in S3 referenced by the key name src.""" if self.noop: logger.info("No-Op Delete: %s" % src) else: self.conn.delete_object(self.bucket, src)
class OpenstackDriver(BaseDriver): """OpenStackDriver for Object Storage""" def __init__(self, cloud_config): super(OpenstackDriver, self).__init__() self.auth_url = cloud_config['os_auth_url'] self.project_name = cloud_config['os_project_name'] self.username = cloud_config['os_username'] self.password = cloud_config['os_password'] self.user_domain_name = \ cloud_config.get('os_project_domain_name', 'default') self.project_domain_name = \ cloud_config.get('os_user_domain_name', 'default') self.driver_name = \ cloud_config.get('driver_name', 'default') self.tenant_id = cloud_config.get('tenant_id', None) self.limit = cloud_config.get('limit', None) self.auth_version = \ cloud_config.get('os_auth_version', '2') self._setup() def _setup(self): auth = v3.Password(auth_url=self.auth_url, user_domain_name=self.user_domain_name, username=self.username, password=self.password, project_domain_name=self.project_domain_name, project_name=self.project_name) sess = session.Session(auth=auth) self.client = Connection(auth_version=self.auth_version, session=sess) self.quota = OpenStackQuota( self.client, self.tenant_id, self.limit) def create_container(self, container, **kwargs): return self.client.put_container(container) def delete_container(self, container): return self.client.delete_container(container) def list_containers(self): return self.client.get_account()[1] def stat_container(self, container): return self.client.head_container(container) def update_container(self, container, metadata, **kwargs): metadata = {('x-container-meta-' + key.strip()): value for key, value in metadata.items() if not key.strip().startswith('x-container-meta-')} return self.client.post_container(container, metadata, **kwargs) def upload_object(self, container, obj, contents, content_length=None, metadata=None, **kwargs): if metadata: metadata = {('x-object-meta-' + key.strip()): value for key, value in metadata.items() if not key.strip().startswith('x-object-meta-')} return self.client.put_object(container, obj, contents=contents, content_length=content_length, headers=metadata, **kwargs) def download_object(self, container, obj, **kwargs): return self.client.get_object(container, obj, **kwargs) def stat_object(self, container, obj): return self.client.head_object(container, obj) def delete_object(self, container, obj, **kwargs): return self.client.delete_object(container, obj, **kwargs) def list_container_objects(self, container, prefix=None, delimiter=None): return self.client.get_container(container, prefix, delimiter)[1] def update_object(self, container, obj, metadata, **kwargs): # Format metedata key metadata = {('x-object-meta-' + key.strip()): value for key, value in metadata.items() if not key.strip().startswith('x-object-meta-')} return self.client.post_object(container, obj, metadata, **kwargs) def copy_object(self, container, obj, metadata=None, destination=None, **kwargs): return self.client.copy_object(container, obj, headers=metadata, destination=destination, **kwargs)
auth = v3.Password(auth_url='http://192.168.122.100:5000/v3/', username='******', password='******', user_domain_name='Default', project_name='admin', project_domain_name='Default') # Create session keystone_session = session.Session(auth=auth) # Create swiftclient Connection swift_connection = Connection(session=keystone_session) test_container_name = 'test_mcos_containers' test_object_name = 'sample_2.iso' try: swift_connection.put_container(test_container_name) with open('./media/configs/sample_2.iso', 'r') as sample_file_content: swift_connection.put_object( test_container_name, test_object_name, contents=sample_file_content, ) except Exception as e: pass pass resp_headers, containers = swift_connection.get_account() for container in containers: print(container)
class OpenstackDriver(BaseDriver): """OpenStackDriver for Object Storage""" def __init__(self, cloud_config): super(OpenstackDriver, self).__init__() self.auth_url = cloud_config['os_auth_url'] self.project_name = cloud_config['os_project_name'] self.username = cloud_config['os_username'] self.password = cloud_config['os_password'] self.user_domain_name = \ cloud_config.get('os_project_domain_name', 'default') self.project_domain_name = \ cloud_config.get('os_user_domain_name', 'default') self.driver_name = \ cloud_config.get('driver_name', 'default') self.tenant_id = cloud_config.get('tenant_id', None) self.limit = cloud_config.get('limit', None) self.auth_version = \ cloud_config.get('os_auth_version', '2') self._setup() def _setup(self): auth = v3.Password(auth_url=self.auth_url, user_domain_name=self.user_domain_name, username=self.username, password=self.password, project_domain_name=self.project_domain_name, project_name=self.project_name) sess = session.Session(auth=auth) self.client = Connection(auth_version=self.auth_version, session=sess) self.quota = OpenStackQuota(self.client, self.tenant_id, self.limit) def create_container(self, container, **kwargs): return self.client.put_container(container) def delete_container(self, container): return self.client.delete_container(container) def list_containers(self): return self.client.get_account()[1] def stat_container(self, container): return self.client.head_container(container) def update_container(self, container, metadata, **kwargs): metadata = {('x-container-meta-' + key.strip()): value for key, value in metadata.items() if not key.strip().startswith('x-container-meta-')} return self.client.post_container(container, metadata, **kwargs) def upload_object(self, container, obj, contents, content_length=None, metadata=None, **kwargs): if metadata: metadata = {('x-object-meta-' + key.strip()): value for key, value in metadata.items() if not key.strip().startswith('x-object-meta-')} return self.client.put_object(container, obj, contents=contents, content_length=content_length, headers=metadata, **kwargs) def download_object(self, container, obj, **kwargs): return self.client.get_object(container, obj, **kwargs) def stat_object(self, container, obj): return self.client.head_object(container, obj) def delete_object(self, container, obj, **kwargs): return self.client.delete_object(container, obj, **kwargs) def list_container_objects(self, container, prefix=None, delimiter=None): return self.client.get_container(container, prefix, delimiter)[1] def update_object(self, container, obj, metadata, **kwargs): # Format metedata key metadata = {('x-object-meta-' + key.strip()): value for key, value in metadata.items() if not key.strip().startswith('x-object-meta-')} return self.client.post_object(container, obj, metadata, **kwargs) def copy_object(self, container, obj, metadata=None, destination=None, **kwargs): return self.client.copy_object(container, obj, headers=metadata, destination=destination, **kwargs)
class Swift(object): def __init__(self, bucket, noop): """Setup the S3 storage backend with the bucket we will use and optional region.""" # This is our Swift container self.bucket = bucket self.noop = noop # We assume your environment variables are set correctly just like # you would for the swift command line util try: self.conn = Connection(authurl=os.environ["ST_AUTH"], user=os.environ["ST_USER"], key=os.environ["ST_KEY"]) except KeyError: logger.warning("Missing environment variables for Swift authentication") logger.warning("Bailing...") sys.exit(1) headers, objs = self.conn.get_account(self.bucket) for i in objs: logger.debug("Searching for bucket %s == %s" % (self.bucket, i)) if not noop and self.bucket not in objs: self.conn.put_container(self.bucket) def list(self, prefix=None): """Return all keys in this bucket.""" headers, objs = self.conn.get_container(self.bucket, prefix=prefix) while objs: # Handle paging i = {} for i in objs: yield i["name"] headers, objs = self.conn.get_container(self.bucket, marker=i["name"], prefix=prefix) def get(self, src): """Return the contents of src from S3 as a string.""" try: headers, obj = self.conn.get_object(self.bucket, src) return obj except ClientException: # Request failed....object doesn't exist return None def put(self, dst, data): """Store the contents of the string data at a key named by dst in S3.""" if self.noop: logger.info("No-Op Put: %s" % dst) else: self.conn.put_object(self.bucket, dst, data) def delete(self, src): """Delete the object in S3 referenced by the key name src.""" if self.noop: logger.info("No-Op Delete: %s" % src) else: self.conn.delete_object(self.bucket, src)