X-Git-Url: https://code.grnet.gr/git/snf-image-creator/blobdiff_plain/835171dc6ce2575ee6da40aa4e163b3bec09936f..aeb95900f10211f2d3c8ffead154a44121a2d5b5:/image_creator/dialog_main.py diff --git a/image_creator/dialog_main.py b/image_creator/dialog_main.py index 6b99af3..3082a1c 100644 --- a/image_creator/dialog_main.py +++ b/image_creator/dialog_main.py @@ -39,6 +39,7 @@ import os import textwrap import signal import StringIO +import optparse from image_creator import __version__ as version from image_creator.util import FatalError, MD5 @@ -47,6 +48,7 @@ from image_creator.disk import Disk from image_creator.os_type import os_cls from image_creator.kamaki_wrapper import Kamaki, ClientError from image_creator.help import get_help_file +from image_creator.dialog_wizard import wizard MSGBOX_WIDTH = 60 YESNO_WIDTH = 50 @@ -144,7 +146,7 @@ def update_background_title(session): MB = 2 ** 20 - size = (dev.meta['SIZE'] + MB - 1) // MB + size = (dev.size + MB - 1) // MB shrinked = 'shrinked' in session and session['shrinked'] postfix = " (shrinked)" if shrinked else '' @@ -203,7 +205,7 @@ def extract_image(session): try: dev = session['device'] if "checksum" not in session: - size = dev.meta['SIZE'] + size = dev.size md5 = MD5(out) session['checksum'] = md5.compute(session['snapshot'], size) @@ -235,7 +237,7 @@ def extract_image(session): def upload_image(session): d = session["dialog"] - size = session['device'].meta['SIZE'] + size = session['device'].size if "account" not in session: d.msgbox("You need to provide your ~okeanos login username before you " @@ -264,10 +266,10 @@ def upload_image(session): break out = GaugeOutput(d, "Image Upload", "Uploading...") - if 'checksum' not in session: - md5 = MD5(out) - session['checksum'] = md5.compute(session['snapshot'], size) try: + if 'checksum' not in session: + md5 = MD5(out) + session['checksum'] = md5.compute(session['snapshot'], size) kamaki = Kamaki(session['account'], session['token'], out) try: # Upload image file @@ -363,6 +365,15 @@ def register_image(session): def kamaki_menu(session): d = session['dialog'] default_item = "Account" + + account = Kamaki.get_account() + if account: + session['account'] = account + + token = Kamaki.get_token() + if token: + session['token'] = token + while 1: account = session["account"] if "account" in session else "" token = session["token"] if "token" in session else "" @@ -394,6 +405,7 @@ def kamaki_menu(session): del session["account"] else: session["account"] = answer.strip() + Kamaki.save_account(session['account']) default_item = "Token" elif choice == "Token": default_item = "Token" @@ -407,6 +419,7 @@ def kamaki_menu(session): del session["token"] else: session["token"] = answer.strip() + Kamaki.save_token(session['account']) default_item = "Upload" elif choice == "Upload": if upload_image(session): @@ -608,7 +621,8 @@ def sysprep(session): syspreps = [s for s in all_syspreps if s not in session['exec_syspreps']] if len(syspreps) == 0: - d.msgbox("No system preparation task available to run!", title="System Preperation", width=MSGBOX_WIDTH) + d.msgbox("No system preparation task available to run!", + title="System Preperation", width=MSGBOX_WIDTH) return while 1: @@ -775,7 +789,7 @@ def select_file(d, media): while 1: if media is not None: if not os.path.exists(media): - d.msgbox("The file you choose does not exist", + d.msgbox("The file `%s' you choose does not exist." % media, width=MSGBOX_WIDTH) else: break @@ -793,18 +807,21 @@ def select_file(d, media): def image_creator(d): - basename = os.path.basename(sys.argv[0]) - usage = "Usage: %s [input_media]" % basename - if len(sys.argv) > 2: - sys.stderr.write("%s\n" % usage) - return 1 + + usage = "Usage: %prog [options] []" + parser = optparse.OptionParser(version=version, usage=usage) + + options, args = parser.parse_args(sys.argv[1:]) + + if len(args) > 1: + parser.error("Wrong numver of arguments") d.setBackgroundTitle('snf-image-creator') if os.geteuid() != 0: - raise FatalError("You must run %s as root" % basename) + raise FatalError("You must run %s as root" % parser.get_prog_name()) - media = select_file(d, sys.argv[1] if len(sys.argv) == 2 else None) + media = select_file(d, args[0] if len(args) == 1 else None) out = GaugeOutput(d, "Initialization", "Initializing...") disk = Disk(media, out) @@ -846,7 +863,28 @@ def image_creator(d): "image_os": image_os, "metadata": metadata} - main_menu(session) + msg = "snf-image-creator detected a %s system on the input media. " \ + "Would you like to run a wizards to assists you through the " \ + "image creation process?\n\nChoose to run the wizard, " \ + " to run the snf-image-creator in expert mode or press " \ + "ESC to quit the program." \ + % (dev.ostype if dev.ostype == dev.distro else "%s (%s)" % + (dev.ostype, dev.distro)) + + update_background_title(session) + + while True: + code = d.yesno(msg, width=YESNO_WIDTH, height=12) + if code == d.DIALOG_OK: + if wizard(session): + break + elif code == d.DIALOG_CANCEL: + main_menu(session) + break + + if confirm_exit(d): + break + d.infobox("Thank you for using snf-image-creator. Bye", width=53) finally: disk.cleanup()