示例#1
0
 def _delete_all_bundles(self):
     bucket = self.args.get('bucket')
     directory = tempfile.mkdtemp()
     try:
         manifest_keys = get_manifest_keys(bucket, service=self.service,
                                           config=self.config)
         download_files(bucket, manifest_keys, directory,
                        service=self.service, config=self.config)
         self._delete_manifest_parts(manifest_keys, directory)
         self._delete_manifest_keys(manifest_keys)
     finally:
         shutil.rmtree(directory)
示例#2
0
 def _delete_all_bundles(self):
     bucket = self.args.get('bucket')
     directory = tempfile.mkdtemp()
     try:
         manifest_keys = get_manifest_keys(bucket,
                                           service=self.service,
                                           config=self.config)
         download_files(bucket,
                        manifest_keys,
                        directory,
                        service=self.service,
                        config=self.config)
         self._delete_manifest_parts(manifest_keys, directory)
         self._delete_manifest_keys(manifest_keys)
     finally:
         shutil.rmtree(directory)
示例#3
0
 def _download_by_prefix(self, directory):
     bucket = self.args.get('bucket')
     prefix = self.args.get('prefix')
     manifest_keys = get_manifest_keys(bucket, prefix, service=self.service,
                                       config=self.config)
     if not manifest_keys:
         if prefix:
             raise ArgumentError(
                 "no manifests found with prefix '{0}' in bucket '{1}'."
                 .format(prefix, bucket))
         else:
             raise ArgumentError("no manifests found in bucket '{0}'."
                                 .format(bucket))
     try:
         download_files(bucket, manifest_keys, directory,
                        service=self.service, config=self.config,
                        show_progress=self.args.get('show_progress', True))
     except AWSError as err:
         if err.code != 'NoSuchEntity':
             raise
         raise ArgumentError(
             "cannot find manifest file(s) {0} in bucket '{1}'."
             .format(",".join(manifest_keys), bucket))
     self._download_parts(manifest_keys, directory)
示例#4
0
 def _download_by_prefix(self, directory):
     bucket = self.args.get('bucket')
     prefix = self.args.get('prefix')
     manifest_keys = get_manifest_keys(bucket, prefix, service=self.service,
                                       config=self.config)
     if not manifest_keys:
         if prefix:
             raise ArgumentError(
                 "no manifests found with prefix '{0}' in bucket '{1}'."
                 .format(prefix, bucket))
         else:
             raise ArgumentError("no manifests found in bucket '{0}'."
                                 .format(bucket))
     try:
         download_files(bucket, manifest_keys, directory,
                        service=self.service, config=self.config,
                        show_progress=self.args.get('show_progress', True))
     except AWSError as err:
         if err.code != 'NoSuchEntity':
             raise
         raise ArgumentError(
             "cannot find manifest file(s) {0} in bucket '{1}'."
             .format(",".join(manifest_keys), bucket))
     self._download_parts(manifest_keys, directory)
示例#5
0
 def _download_manifest(self,
                        bucket=None,
                        prefix=None,
                        private_key=None,
                        dest_dir=None):
     '''
     Read in bundle manifest from remote bucket.
     :param bucket: Bucket to download bundle manifest from
     :param prefix: Manifest prefix used to download bundle
     :param private_key: Local file path to key used to create the bundle.
     :dest_dir: Local dir path. If provided the downloaded manifest will
                be written to a file in this directory, otherwise it will
                not be written to a local file.
     :returns: BundleManifest obj
     '''
     self.log.debug('download to dest_dir:' + str(dest_dir))
     bucket = bucket or self.args.get('bucket')
     prefix = prefix or self.args.get('prefix')
     if bucket is None or prefix is None:
         raise ArgumentError('Need to provide both bucket and prefix'
                             ' to download manifest')
     #Make sure the manifest exists, and the prefix is unique...
     self.log.debug('Downloading manifest bucket "{0}" prefix "{1}"'
                    .format(bucket, prefix))
     manifest_keys = get_manifest_keys(bucket,
                                       prefix,
                                       service=self.service,
                                       config=self.config)
     if not manifest_keys:
         if prefix:
             raise ArgumentError("no manifests found with prefix '{0}' "
                                 "in bucket '{1}'."
                                 .format(prefix, bucket))
         else:
             raise ArgumentError("no manifests found in bucket '{0}'."
                                 .format(bucket))
     if len(manifest_keys) > 1:
         raise RuntimeError('Multiple manifests found:{0}'
                            .format(",".join(str(m)
                                    for m in manifest_keys)))
     manifest_key = manifest_keys.pop()
     #Write to a local file if dest_dir was provided...
     if dest_dir:
         #Download paths to individual files under provided directory...
         if not os.path.isdir(dest_dir):
             self.log.debug('Creating dir at: {0}'.format(dest_dir))
             os.mkdir(dest_dir)
         local_file_path = os.path.join(dest_dir,
                                        os.path.basename(manifest_key))
         self.log.debug('Writing manifest to "{0}"'.format(local_file_path))
         manifest_fileobj = open(local_file_path, 'w+')
     else:
         manifest_fileobj = BytesIO()
     #Read manifest in from fileobj and create BundleManifest obj...
     with manifest_fileobj:
         try:
             path = os.path.join(bucket, manifest_key)
             self.log.debug('Attempting to download:{0}'.format(path))
             GetObject(paths=[path],
                       fileobj=manifest_fileobj,
                       opath=None,
                       service=self.service,
                       config=self.config).main()
         except AWSError as err:
             if err.code != 'NoSuchEntity':
                 raise
             raise ArgumentError(
                 "cannot find manifest file(s) {0} in bucket '{1}'."
                 .format(",".join(manifest_keys), bucket))
         #Read manifest info from pipe...
         manifest_fileobj.seek(0)
         manifest = BundleManifest.read_from_fileobj(
             manifest_fileobj, privkey_filename=private_key)
     manifest.manifest_key = manifest_key
     self.log.debug('Returning Manifest for image:{0}'
                    .format(str(manifest.image_name)))
     return manifest