@@ -18,6 +18,7 @@ class CloudFS(BaseCommand):
1818 :ivar cterasdk.core.cloudfs.CloudDrives drives: Object holding Cloud Drive Folders APIs
1919 :ivar cterasdk.core.cloudfs.Backups backups: Object holding Backup Folders APIs
2020 :ivar cterasdk.core.cloudfs.Zones zones: Object holding Zones APIs
21+ :ivar cterasdk.core.cloudfs.Exports exports: Object holding Bucket Exports APIs
2122 """
2223
2324 def __init__ (self , portal ):
@@ -26,6 +27,7 @@ def __init__(self, portal):
2627 self .drives = CloudDrives (self ._portal )
2728 self .backups = Backups (self ._portal )
2829 self .zones = Zones (self ._portal )
30+ self .exports = Exports (self ._portal )
2931
3032
3133class FolderGroups (BaseCommand ):
@@ -192,7 +194,7 @@ def modify(self, current_name, owner, new_name=None, new_owner=None, new_group=N
192194 if new_name :
193195 param .name = new_name
194196 if new_owner :
195- param .owner = self ._portal .users .get (owner , ['baseObjectRef' ]).baseObjectRef
197+ param .owner = self ._portal .users .get (new_owner , ['baseObjectRef' ]).baseObjectRef
196198 if new_group :
197199 param .group = self ._portal .cloudfs .groups .get (new_group , include = ['baseObjectRef' ]).baseObjectRef
198200 if description :
@@ -533,3 +535,77 @@ def _zone_param(name, policy_type, description=None, zid=None):
533535 param .delta .devicesDelta .added = []
534536 param .delta .devicesDelta .removed = []
535537 return param
538+
539+
540+ class Exports (BaseCommand ):
541+ """ S3 Exports APIs """
542+
543+ def get (self , name ):
544+ """
545+ Get Buckets
546+
547+ :param str name: Bucket name
548+ """
549+ return self ._portal .get (f'/buckets/{ name } ' )
550+
551+ def get_endpoint (self , name ):
552+ """
553+ Get Endpoint
554+
555+ :param str name: Bucket name
556+ :returns: Bucket endpoint
557+ :rtype: str
558+ """
559+ return self .get (name ).url
560+
561+ def all (self ):
562+ """
563+ List Buckets
564+ """
565+ param = query .QueryParamBuilder ().startFrom (0 ).countLimit (25 ).orFilter (True ).build ()
566+ return query .iterator (self ._portal , '/buckets' , param )
567+
568+ def add (self , name , drive_name , drive_owner , description = None ):
569+ """
570+ Add Bucket
571+
572+ :param str name: Bucket name
573+ :param str drive_name: Cloud Drive Folder name
574+ :param str drive_owner: Cloud Drive Folder owner
575+ :param str,optional description: Bucket description
576+ """
577+ param = Object ()
578+ param ._classname = 'Bucket' # pylint: disable=protected-access
579+ param .description = description
580+ param .name = name
581+ param .cloudDrive = self ._portal .cloudfs .drives .find (drive_name , drive_owner , include = ['baseObjectRef' ]).baseObjectRef
582+ logging .getLogger ().info ('Adding Bucket. %s' , {'name' : name })
583+ response = self ._portal .add ('/buckets' , param )
584+ logging .getLogger ().info ('Bucket Added. %s' , {'name' : name })
585+ return response
586+
587+ def modify (self , name , description ):
588+ """
589+ Modify Bucket
590+
591+ :param str name: Bucket name
592+ :param str description: Bucket description
593+ """
594+
595+ bucket = self .get (name )
596+ bucket .description = description
597+ logging .getLogger ().info ("Modifying Bucket. %s" , {'name' : name })
598+ response = self ._portal .put (f'/buckets/{ name } ' , bucket )
599+ logging .getLogger ().info ("Bucket modified. %s" , {'name' : name })
600+ return response
601+
602+ def delete (self , name ):
603+ """
604+ Remove Bucket
605+
606+ :param str name: Bucket name
607+ """
608+ logging .getLogger ().info ('Deleting Bucket. %s' , {'name' : name })
609+ response = self ._portal .delete (f'/buckets/{ name } ' )
610+ logging .getLogger ().info ('Bucket deleted. %s' , {'name' : name })
611+ return response
0 commit comments