def parse(image_uuid): LOG.debug("Trying to parse [%s] image", image_uuid) dir_path = full_path(image_uuid) if os.path.islink(dir_path) or not os.path.isdir(dir_path): raise errors.IncorrectImage( "There are no such image [{0}].".format(image_uuid)) metafile = os.path.join(dir_path, consts.METADATA_FILE) if not os.path.exists(metafile): raise errors.IncorrectImage( "Image [{0}] doen's contain metadata file.".format(image_uuid)) with open(metafile) as f: try: data = yaml.safe_load(f) except yaml.YAMLError as e: raise errors.IncorrectImage("Couldn't parse metadata file for" " image [{0}] due to {1}".format( image_uuid, e)) if data.get('uuid') != os.path.basename(dir_path): raise errors.IncorrectImage("UUID from metadata file [{0}] doesn't" " equal directory name [{1}]".format( data.get('uuid'), image_uuid)) data['status'] = ACTIVE if is_active(data['uuid']) else '' data.setdefault('label', '') return data
def import_image(arch_path): extract_dir = tempfile.mkdtemp() extract_to_dir(arch_path, extract_dir) metafile = os.path.join(extract_dir, consts.METADATA_FILE) with open(metafile) as f: try: data = yaml.safe_load(f) except yaml.YAMLError as e: raise errors.IncorrectImage("Couldn't parse metadata file" " due to {0}".format(e)) image_uuid = data['uuid'] dir_path = full_path(image_uuid) if os.path.exists(dir_path): raise errors.ImageAlreadyExists( "Image [{0}] already exists.".format(image_uuid)) shutil.move(extract_dir, dir_path) os.chmod(dir_path, 0o755) for root, dirs, files in os.walk(dir_path): for d in dirs: os.chmod(os.path.join(root, d), 0o755) for f in files: os.chmod(os.path.join(root, f), 0o755) return image_uuid