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, []