def create_overlay(self): from Configuration import Options disk_path = Const.BASE_DISK_PATH options = Options() options.disk_only = False options.TRIM_SUPPORT = False options.FREE_SUPPORT = False options.MEMORY_SAVE_PATH = Const.MODIFIED_MEMORY_SNAPSHOT overlay = cloudlet.VM_Overlay(disk_path, options) app_installer = App_installer('localhost', 2222) overlay.start() app_installer.start() app_installer.join() overlay.join() print "[INFO] overlay metafile : %s" % overlay.overlay_metafile print "[INFO] overlay : %s" % str(overlay.overlay_files[0])
def main(argv): if not lib_cloudlet.validate_congifuration(): sys.stderr.write("failed to validate configuration\n") sys.exit(1) CMD_BASE_CREATION = "base" CMD_OVERLAY_CREATION = "overlay" CMD_SYNTEHSIS = "synthesis" CMD_LIST_BASE = "list_base" CMD_DEL_BASE = "del_base" CMD_ADD_BASE = "add_base" CMD_LIST_SESSION = "list_session" CMD_CLEAR_SESSION = "clear_session" CMD_LIST_OVERLAY = "list_overlay" commands = { CMD_BASE_CREATION: "create new base VM", CMD_OVERLAY_CREATION: "create new overlay VM on top of base VM", CMD_SYNTEHSIS: "test created overlay using command line", CMD_LIST_BASE: "show all base VM at this machine", CMD_ADD_BASE: "add existing base vm to DB", CMD_DEL_BASE: "delete base vm at database", } mode, left_args, settings = process_command_line(sys.argv[1:], commands) if mode == CMD_BASE_CREATION: # creat base VM if len(left_args) < 1: sys.stderr.write("Error, Need to path to VM disk\n") sys.exit(1) if len(left_args) > 1 : sys.stderr("Warning, qemu argument won't be applied to creating base vm") disk_image_path = left_args[0] disk_path, mem_path = lib_cloudlet.create_baseVM(disk_image_path) print "Base VM is created from %s" % disk_image_path print "Disk: %s" % disk_path print "Mem: %s" % mem_path elif mode == CMD_OVERLAY_CREATION: # create overlay if len(left_args) < 1: sys.stderr.write("Error, Need to path to VM disk\n") sys.exit(1) disk_image_path = left_args[0] qemu_args = left_args[1:] options = Options() options.TRIM_SUPPORT = not settings.disable_trim_support options.FREE_SUPPORT = settings.enable_free_support options.DISK_ONLY = settings.disk_only overlay = lib_cloudlet.VM_Overlay(disk_image_path, options, qemu_args) overlay.start() overlay.join() print "[INFO] overlay metafile : %s" % overlay.overlay_metafile print "[INFO] overlay : %s" % str(overlay.overlay_files[0]) elif mode == CMD_SYNTEHSIS: if len(left_args) < 2: sys.stderr.write("Synthesis requires path to VM disk and overlay-meta\n \ Ex) ./cloudlet synthesis [VM disk] /path/to/precise.overlay-meta \n") sys.exit(1) disk_image_path = left_args[0] meta = left_args[1] qemu_args = left_args[2:] lib_cloudlet.synthesis(disk_image_path, meta, settings.disk_only, qemu_args=qemu_args) elif mode == CMD_LIST_BASE: from db.table_def import BaseVM dbconn = get_database() basevm_list = dbconn.list_item(BaseVM) sys.stdout.write("hash value" + "\t\t\t\t\t" + "path\n") sys.stdout.write("-"*90 + "\n") for item in basevm_list: sys.stdout.write(item.hash_value + "\t" + item.disk_path + "\n") sys.stdout.write("-"*90 + "\n") elif mode == CMD_ADD_BASE: from db.table_def import BaseVM dbconn = get_database() if len(left_args) < 2: sys.stderr.write("Add existing base vm requires: \n \ 1) base path\n \ 2) hash value of the base\n \ Ex) ./cloudlet add_base /path/to/base_disk.img 4304c473a9f98480c7d6387f01158881d3440bb81c8a9452b1abdef794e51111\n") sys.exit(1) basedisk_path = os.path.abspath(left_args[0]) base_hashvalue = left_args[1] if not os.path.isfile(basedisk_path): sys.stderr.write("Not valid file: %s\n" % basedisk_path) sys.exit(1) new_basevm = BaseVM(basedisk_path, base_hashvalue) dbconn.add_item(new_basevm) elif mode == CMD_DEL_BASE: from db.table_def import BaseVM dbconn = get_database() if len(left_args) < 1: sys.stderr.write("delete base vm requires base path\n \ Ex) ./cloudlet del_base /path/to/base_disk.img \n") sys.exit(1) basedisk_path = os.path.abspath(left_args[0]) basevm_list = dbconn.list_item(BaseVM) deleting_base = None for item in basevm_list: if basedisk_path == item.disk_path: deleting_base = item break if deleting_base: dbconn.del_item(item) else: sys.stderr.write("Cannot find matching base disk\n") sys.exit(1) elif mode == CMD_LIST_SESSION: from db.table_def import Session dbconn = get_database() session_list = dbconn.list_item(Session) sys.stdout.write("session_id\t\tassociated_time\t\t\tdisassociated_time\t\tstatus\n") sys.stdout.write("-"*95 + "\n") for item in session_list: sys.stdout.write(str(item) + "\n") sys.stdout.write("-"*95 + "\n") elif mode == CMD_CLEAR_SESSION: from db.table_def import Session dbconn = get_database() session_list = dbconn.list_item(Session) for item in session_list: dbconn.session.delete(item) dbconn.session.commit() elif mode == CMD_LIST_OVERLAY: from db.table_def import OverlayVM dbconn = get_database() overlay_list = dbconn.list_item(OverlayVM) sys.stdout.write("id\tsession_id\t\tbasevm_path\t\t\t\t\t\tstatus\n") sys.stdout.write("-"*95 + "\n") for item in overlay_list: sys.stdout.write(str(item) + "\n") sys.stdout.write("-"*95 + "\n") else: sys.stdout.write("Invalid command: %s\n" % mode) sys.exit(1) return 0