def mainrun(argv=None): """Consume inputs, configure logging, and launch the action. Keyword arguments: * argv -- Executable's arguments (default None) Return exit code: * 0 -- Success * 1 -- Input problem * 2 -- Configuration problem * 3 -- Problem with the local or remote system environment. * 4 -- Failure to carry out action. * 42 -- Programming error, please report if this is a non-modified release """ if os.name != 'posix': print >> sys.stderr, "Only runs on POSIX systems." return 3 starttimer() parser = parsersetup() if argv: (opts, args) = parser.parse_args(argv[1:]) else: (opts, args) = parser.parse_args() loglevel = None if opts.verbose or opts.trace: loglevel = logging.DEBUG elif opts.quiet: loglevel = logging.ERROR else: loglevel = logging.INFO log = configureLogging(loglevel, trace=opts.trace) try: validateargs(opts) #if opts.evaluate: # log.info("EVALUATE MODE ENABLED") if opts.configpath: config = getconfig(filepath=opts.configpath) else: config = getconfig(string=DEFAULTCONFIG) commonconf = getCommonConf(opts, config) if commonconf.logfilepath: addFileLogging(log, commonconf.logfilepath, None, loglevel, trace=opts.trace) setlogfilepath(commonconf.logfilepath) log.debug("[file logging enabled @ '%s'] " % commonconf.logfilepath) if opts.tryall: log.debug("action %s" % ARGS.TRYALL) elif opts.amazon: log.debug("action %s" % ARGS.AMAZON) elif opts.regular: log.debug("action %s" % ARGS.REGULAR) if opts.poweroff: log.info("OK to poweroff") try: problemscript = config.get("taskpaths", "problemscript") except: exception_type = sys.exc_type try: exceptname = exception_type.__name__ except AttributeError: exceptname = exception_type msg = "%s: %s" % (str(exceptname), str(sys.exc_value)) raise InvalidConfig(msg) setterminateok(problemscript) ####################################### ## I. Run one Instantiation action ## ####################################### # try-all could be replaced by supporting multiple action flags and # having an order (the order itself could be set via conf) iactionresult = None if not opts.tryall: if opts.regular: regconf = getReginstConf(opts, config) iaction = RegularInstantiation(commonconf, regconf) elif opts.amazon: ec2conf = getAmazonConf(opts, config) iaction = AmazonInstantiation(commonconf, ec2conf) log.info("Running instantiation action") iaction.run() iactionresult = iaction.result else: # embedded run order right now try: log.info("First running regular instantiation action") regconf = getReginstConf(opts, config) reg_iaction = RegularInstantiation(commonconf, regconf) reg_iaction.run() iactionresult = reg_iaction.result except: msg = "Problem with regular instantiation action: " exception_type = sys.exc_type try: exceptname = exception_type.__name__ except AttributeError: exceptname = exception_type msg += "%s: %s" % (str(exceptname), str(sys.exc_value)) log.error(msg) log.info("Second, running Amazon instantiation action") ec2conf = getAmazonConf(opts, config) ec2_iaction = AmazonInstantiation(commonconf, ec2conf) ec2_iaction.run() iactionresult = ec2_iaction.result # If there was an issue, exception should have been thrown: if iactionresult == None: raise ProgrammingError( "Instantiation action(s) ran to completion but no result?") ############################################################# ## II. Run one Retrieval action ## ## The Instantiation action throws an exception or ## ## places InstantiationResult in its "result" field. ## ############################################################# ractionresult = None # only one impl right now: raction = DefaultRetrieveAction(commonconf, iactionresult) log.info("Running retrieval action") raction.run() ractionresult = raction.result if ractionresult == None: raise ProgrammingError( "Retrieve Action ran to completion but no result?") ############################################################### ## III. Run one Consumption action ## ## The Retrieval action either throws an exception or ## ## places RetrieveResult object in its "result" field. ## ############################################################### # only one impl right now: caction = DefaultConsumeRetrieveResult(commonconf, ractionresult, iactionresult) log.info("Running consume action") caction.run() return 0 except InvalidInput, e: msg = "Problem with input: %s" % e.msg if log: log.critical(msg) else: print >> sys.stderr, msg return 1
def mainrun(argv=None): """Consume inputs, configure logging, and launch the action. Keyword arguments: * argv -- Executable's arguments (default None) Return exit code: * 0 -- Success * 1 -- Input problem * 2 -- Configuration problem * 3 -- Problem with the local or remote system environment. * 4 -- Failure to carry out action. * 42 -- Programming error, please report if this is a non-modified release """ if os.name != "posix": print >> sys.stderr, "Only runs on POSIX systems." return 3 starttimer() parser = parsersetup() if argv: (opts, args) = parser.parse_args(argv[1:]) else: (opts, args) = parser.parse_args() loglevel = None if opts.verbose or opts.trace: loglevel = logging.DEBUG elif opts.quiet: loglevel = logging.ERROR else: loglevel = logging.INFO log = configureLogging(loglevel, trace=opts.trace) try: validateargs(opts) # if opts.evaluate: # log.info("EVALUATE MODE ENABLED") if opts.configpath: config = getconfig(filepath=opts.configpath) else: config = getconfig(string=DEFAULTCONFIG) commonconf = getCommonConf(opts, config) if commonconf.logfilepath: addFileLogging(log, commonconf.logfilepath, None, loglevel, trace=opts.trace) setlogfilepath(commonconf.logfilepath) log.debug("[file logging enabled @ '%s'] " % commonconf.logfilepath) if opts.tryall: log.debug("action %s" % ARGS.TRYALL) elif opts.amazon: log.debug("action %s" % ARGS.AMAZON) elif opts.regular: log.debug("action %s" % ARGS.REGULAR) if opts.poweroff: log.info("OK to poweroff") try: problemscript = config.get("taskpaths", "problemscript") except: exception_type = sys.exc_type try: exceptname = exception_type.__name__ except AttributeError: exceptname = exception_type msg = "%s: %s" % (str(exceptname), str(sys.exc_value)) raise InvalidConfig(msg) setterminateok(problemscript) ####################################### ## I. Run one Instantiation action ## ####################################### # try-all could be replaced by supporting multiple action flags and # having an order (the order itself could be set via conf) iactionresult = None if not opts.tryall: if opts.regular: regconf = getReginstConf(opts, config) iaction = RegularInstantiation(commonconf, regconf) elif opts.amazon: ec2conf = getAmazonConf(opts, config) iaction = AmazonInstantiation(commonconf, ec2conf) log.info("Running instantiation action") iaction.run() iactionresult = iaction.result else: # embedded run order right now try: log.info("First running regular instantiation action") regconf = getReginstConf(opts, config) reg_iaction = RegularInstantiation(commonconf, regconf) reg_iaction.run() iactionresult = reg_iaction.result except: msg = "Problem with regular instantiation action: " exception_type = sys.exc_type try: exceptname = exception_type.__name__ except AttributeError: exceptname = exception_type msg += "%s: %s" % (str(exceptname), str(sys.exc_value)) log.error(msg) log.info("Second, running Amazon instantiation action") ec2conf = getAmazonConf(opts, config) ec2_iaction = AmazonInstantiation(commonconf, ec2conf) ec2_iaction.run() iactionresult = ec2_iaction.result # If there was an issue, exception should have been thrown: if iactionresult == None: raise ProgrammingError("Instantiation action(s) ran to completion but no result?") ############################################################# ## II. Run one Retrieval action ## ## The Instantiation action throws an exception or ## ## places InstantiationResult in its "result" field. ## ############################################################# ractionresult = None # only one impl right now: raction = DefaultRetrieveAction(commonconf, iactionresult) log.info("Running retrieval action") raction.run() ractionresult = raction.result if ractionresult == None: raise ProgrammingError("Retrieve Action ran to completion but no result?") ############################################################### ## III. Run one Consumption action ## ## The Retrieval action either throws an exception or ## ## places RetrieveResult object in its "result" field. ## ############################################################### # only one impl right now: caction = DefaultConsumeRetrieveResult(commonconf, ractionresult, iactionresult) log.info("Running consume action") caction.run() return 0 except InvalidInput, e: msg = "Problem with input: %s" % e.msg if log: log.critical(msg) else: print >> sys.stderr, msg return 1
def config_logging(commonconf, opts, loglevel=logging.DEBUG): print "commonconf.logfilepath => ", commonconf.logfilepath log = configureLogging(loglevel, trace=opts.trace) addFileLogging(log, commonconf.logfilepath, None, loglevel, trace=opts.trace) setlogfilepath(commonconf.logfilepath)