#!/usr/bin/python import sys, os import os.path # Check command line arguments if len(sys.argv)<2: print "Usage: $0 []" sys.exit(1) # Logging always needs to be set up first thing, or there'll be tracebacks. from pyanaconda import anaconda_log anaconda_log.init() from pyanaconda.installclass import DefaultInstall from pyanaconda.storage import Storage from pyanaconda.threads import initThreading from pyanaconda.packaging.yumpayload import YumPayload from pyanaconda.platform import getPlatform from pykickstart.version import makeVersion from pyanaconda.ui.tui.simpleline import App from pyanaconda.ui.tui import YesNoDialog # Don't worry with fcoe, iscsi, dasd, any of that crud. from pyanaconda.flags import flags flags.imageInstall = True flags.testing = True initThreading() # Figure out the part we are about to show: hub/spoke? # And get the name of the module which represents it if os.path.basename(sys.argv[0]) == "run-text-spoke.py": spokeModuleName = "pyanaconda.ui.tui.spokes.%s" % sys.argv[1] from pyanaconda.ui.common import Spoke spokeBaseClass = Spoke spokeText = "spoke" SpokeText = "Spoke" elif os.path.basename(sys.argv[0]) == "run-text-hub.py": spokeModuleName = "pyanaconda.ui.tui.hubs.%s" % sys.argv[1] from pyanaconda.ui.common import Hub spokeBaseClass = Hub spokeText = "hub" SpokeText = "Hub" else: print "You have to run this command as run-spoke.py or run-hub.py." sys.exit(1) # Set default spoke class spokeClass = None spokeClassName = None # Load spoke specified on the command line # If the spoke module was specified, but the spoke class was not, # try to find it using class hierarchy try: spokeClassName = sys.argv[2] __import__(spokeModuleName, fromlist = [spokeClassName]) spokeModule = sys.modules[spokeModuleName] except IndexError: __import__(spokeModuleName) spokeModule = sys.modules[spokeModuleName] for k,v in vars(spokeModule).iteritems(): try: print k,v if issubclass(v, spokeBaseClass) and v != spokeBaseClass: spokeClassName = k spokeClass = v except TypeError: pass if not spokeClass: try: spokeClass = getattr(spokeModule, spokeClassName) except KeyError: print "%s %s could not be found in %s" % (SpokeText, spokeClassName, spokeModuleName) sys.exit(1) print "Running %s %s from %s" % (spokeText, spokeClass, spokeModule) platform = getPlatform() ksdata = makeVersion() storage = Storage(data=ksdata, platform=platform) storage.reset() instclass = DefaultInstall() app = App("TEST HARNESS", yes_or_no_question = YesNoDialog) payload = YumPayload(ksdata) payload.setup(storage) payload.install_log = sys.stdout spoke = spokeClass(app, ksdata, storage, payload, instclass) if not spoke.showable: print "This %s is not showable, but I'll continue anyway." % spokeText app.schedule_screen(spoke) app.run() if hasattr(spoke, "status"): print "%s status:\n%s\n" % (SpokeText, spoke.status) if hasattr(spoke, "completed"): print "%s completed:\n%s\n" % (SpokeText, spoke.completed) print "%s kickstart fragment:\n%s" % (SpokeText, ksdata)