示例#1
0
 def generate_isos(self, repo_working_dir, publish_dir, prefix, progress_callback=None):
     """
      generate iso images for the exported directory
     """
     iso_progress_status = self.init_progress()
     iso_progress_status['state'] = "IN_PROGRESS"
     self.set_progress("isos", iso_progress_status, progress_callback)
     isogen = GenerateIsos(repo_working_dir, publish_dir, prefix=prefix, progress=progress_callback)
     # get size and filelists of the target directory
     filelist, total_dir_size = isogen.list_dir_with_size(repo_working_dir)
     _LOG.debug("Total target directory size to create isos %s" % total_dir_size)
     # media size
     img_size = isogen.get_image_type_size(total_dir_size)
     # compute no.of images it takes per media image size
     imgcount = int(math.ceil(total_dir_size/float(img_size)))
     # get the filelists per image by size
     imgs = isogen.compute_image_files(filelist, imgcount, img_size)
     iso_progress_status['items_total'] = imgcount
     iso_progress_status['items_left'] = imgcount
     iso_progress_status["size_total"] = total_dir_size
     iso_progress_status["size_left"] = total_dir_size
     for i in range(imgcount):
         self.set_progress("isos", iso_progress_status, progress_callback)
         msg = "Generating iso images for exported content (%s/%s)" % (i+1, imgcount)
         _LOG.info(msg)
         grafts = isogen.get_grafts(imgs[i])
         pathfiles_fd, pathfiles = isogen.get_pathspecs(grafts)
         filename = isogen.get_iso_filename(publish_dir, prefix, i+1)
         cmd = isogen.get_mkisofs_template() % (string.join([pathfiles]), filename)
         status, out = isogen.run_command(cmd)
         if status != 0:
             _LOG.error("Error creating iso %s" % filename)
         _LOG.info("successfully created iso %s" % filename)
         _LOG.debug("status code: %s; output: %s" % (status, out))
         os.unlink(pathfiles)
         iso_progress_status['items_left'] -= 1
         iso_progress_status['num_success'] += 1
         if iso_progress_status["size_left"] > img_size:
             iso_progress_status["size_left"] -= img_size
         else:
             iso_progress_status["size_left"] = 0
     iso_progress_status["state"] = "FINISHED"
     self.set_progress("isos", iso_progress_status, progress_callback)
     return True, []